本人最近在跑Yolo的时候遇到了一个问题,就是使用官方代码val.py验证出来的mAP50和mAP(50-95和运行结束的时候所输出的不一致,根据大量实验,发现val.py验证出来的mAP总是高于运行结束时输出的mAP值,这导致写论文的时候不能使用运行时输出的result.png。
经过问题排查发现是val.py中的超参数与训练时的超参数不一致导致的。
#官方代码中给出的Val.py
from ultralytics import YOLO
# Load a model
model = YOLO("runs/detect/train/weights/best.pt")
if __name__ == '__main__':
# Validate with a custom dataset
metrics = model.val(data="Datasets/yolo11n_cow.yaml")
这个官方代码一般来说只适用于默认参数,如果你调整了一些超参数就要修改,具体在哪里看到超参数要找到runs/detect/train/weights/args.yaml。比如说我运行训练的时候设置了batch=25,验证的时候就要在里面加上。特别注意agnostic_nms=True这个超参数,这个超参数是导致验证时不一致的罪魁祸首,如果你设置了agnostic_nms=True,验证时一定要加上。
from ultralytics import YOLO
# Load a model
model = YOLO("runs/detect/train/weights/best.pt")
if __name__ == '__main__':
# Validate with a custom dataset
metrics = model.val(data="Datasets/yolo11n_cow.yaml",
conf=None,iou=0.7,batch=25,imgsz=640,half=False,nms=False,agnostic_nms=True)
总结来说就是你训练的时候调整的超参数是哪些,在使用val.py的时候就要加上。

11万+

被折叠的 条评论
为什么被折叠?



