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

2022-07-26 18:49:25 浏览数 (1)

关注并星标

从此不迷路

计算机视觉研究院

公众号ID|ComputerVisionGzq

学习群|扫码在主页获取加入方式

计算机视觉研究院专栏

作者:Edison_G

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

之前“计算机视觉研究院”分享了yolo系列的最新两个版本:

Yolov7:最新最快的实时检测框架,最详细分析解释(附源代码)

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

Rep-PAN 结构图

今天我们基于Yolov7的开源代码,实现了其论文中的一些实验。

在MS COCO的数据集上结果如下:

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

代码语言:javascript复制
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去验证:

代码语言:javascript复制
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,肯定会很慢。

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

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

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

按照上面的3点操作后,X版本mAP只有52.1了,掉了0.8个点。

代码语言:javascript复制
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

先恭喜2022LPL夏季赛常规赛焦点战,RNG 2-1翻盘击败EDG,拿下LPL德比大战的胜利。

© THE END 

转载请联系本公众号获得授权

计算机视觉研究院学习群等你加入!

我们开创“计算机视觉协会”知识星球两年有余,也得到很多同学的认可,最近我们又开启了知识星球的运营。我们定时会推送实践型内容与大家分享,在星球里的同学可以随时提问,随时提需求,我们都会及时给予回复及给出对应的答复。

ABOUT

计算机视觉研究院

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

VX:2311123606

往期推荐 

0 人点赞