打假Yolov7的精度,不是所有的论文都是真实可信

共 2260字,需浏览 5分钟

 ·

2022-07-26 23:12

最近我们分享了Yolov6和Yolov7两个新框架,但是好多同学希望我们真正的对代码进行详细解读,今天“计算机视觉研究院”就先对Yolov7的性能做一次真实实验对比。


之前分享了yolo系列的最新两个版本:
Yolov7:最新最快的实时检测框架,最详细分析解释(附源代码)

劲爆!YOLOv6又快又准的目标检测框架开源啦(附源代码下载)
Rep-PAN 结构图

今天我们基于Yolov7的开源代码,实现了其论文中的一些实验。
在MS COCO的数据集上结果如下:

首先在coco验证集上,验证官方提供的yolov7.pt,其实用的是L版本(类似YOLOv5-L,YOLOX-L,PPYOLOE-L),结果如下:
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尺寸


通过上面的结果很明显可以看到mAP为50.8,掉了0.4
  • eval的时候NMS是有trick的,multi_label表示一个框是否可以赋予两个类别,但是我们实际部署的时候就是一个框对应一个类别,所以再把multi_label设为False

测试结果好像又掉了0.2....

这种YOLO系列测速都是没有比对nms的耗时的,所以为了精度可以对nms大作文章。进nms前的max_nm设置到了30000,实际部署的时候,进入nms的Tensor如果很大会很耗时,一般都不会设置到这么大,1000足够了,改max_nms=1000。同时还有max_det=300表示每张图最多几个框,真的有必要300这么多吗? cocoapi评测工具虽然是max_det=100,但是改300真的也会涨点。

max_nms=30000,max_det=300这种操作不仅eval过程变慢,生成json的时候更慢,而且如果是训练早期还没训的很好的时候去eval,肯定会很慢。

为什么边训边eval的时候感觉很快?原因:边训边eval和单独拿权重去eval,从数据处理到评测工具都走的不是一套逻辑!

再加改max_nms从30000到1000,mAP虽然没掉,但recall下降:

再加改max_det从300到100,mAP又掉了0.1:


按照上面的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,结果确实会有一些质的提升。

Yolov7

Yolov6



浏览 84
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报