打假Yolov7的精度,不是所有的论文都是真实可信
最近我们分享了Yolov6和Yolov7两个新框架,但是好多同学希望我们真正的对代码进行详细解读,今天“计算机视觉研究院”就先对Yolov7的性能做一次真实实验对比。
Average Precision (AP) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.51206
Average Precision (AP) @[ IoU=0.50 | area= all | maxDets=100 ] = 0.69730
Average Precision (AP) @[ IoU=0.75 | area= all | maxDets=100 ] = 0.55521
Average Precision (AP) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.35247
Average Precision (AP) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.55937
Average Precision (AP) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.66693
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 1 ] = 0.38453
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets= 10 ] = 0.63765
Average Recall (AR) @[ IoU=0.50:0.95 | area= all | maxDets=100 ] = 0.68772
Average Recall (AR) @[ IoU=0.50:0.95 | area= small | maxDets=100 ] = 0.53766
Average Recall (AR) @[ IoU=0.50:0.95 | area=medium | maxDets=100 ] = 0.73549
Average Recall (AR) @[ IoU=0.50:0.95 | area= large | maxDets=100 ] = 0.83868
注:以下改动需要bs=1去验证:
python3.7 test.py --data data/coco.yaml --img 640 --batch 1 --conf 0.001 --iou 0.65 --device 0 --weights yolov7.pt --name yolov7_640_val
改数据预处理letterbox的auto=True,因为实际预测都是固定尺寸,也只能到640尺寸
eval的时候NMS是有trick的,multi_label表示一个框是否可以赋予两个类别,但是我们实际部署的时候就是一个框对应一个类别,所以再把multi_label设为False
max_nms=30000,max_det=300这种操作不仅eval过程变慢,生成json的时候更慢,而且如果是训练早期还没训的很好的时候去eval,肯定会很慢。
为什么边训边eval的时候感觉很快?
原因:边训边eval和单独拿权重去eval,从数据处理到评测工具都走的不是一套逻辑!
再加改max_nms从30000到1000,mAP虽然没掉,但recall下降:
按照上面的3点操作后,X版本mAP只有52.1了,掉了0.8个点。
python3.7 test.py --data data/coco.yaml --img 640 --batch 1 --conf 0.001 --iou 0.65 --device 3 --weights yolov7x.pt --name yolov7_640_val
Yolov7
Yolov6
评论