前言
Tricks大法好!PP-YOLO可达45.2% mAP,速度高达72.9 FPS!FPS和mAP均超越YOLOv4,FPS也远超过EfficientDet!
Amusi 认为YOLO系列让大家钟情的原因之一并不是超高的mAP指标,而且其又快又好的效果,其让 mAP 和 FPS达到很好的权衡。记得18年YOLOv3一出,这幅图风靡一时:
吐槽一句,17年入坑检测的时候,那时候很多人默认one-stage的优势之一是速度,特别是YOLO和SSD为首的实时检测器(>30 FPS)。如今看看19年和20年的论文,很多都不对比速度了,只管mAP怼多高,这个本身没有任何问题,但很多网络的速度数据都不给了,我想没有人不在乎这个指标吧。
今年4月,YOLOv4一出,引起相当大的热议,比如其是否称得上"接棒者";后来还有所谓"YOLOv5"的开源项目出现。其实很高兴看到YOLO社区这么活跃,这不超越YOLOv4的网络就来了:PP-YOLO。
PP-YOLO
先上结果图,感受一下PP-YOLO的性能。越靠右上角,性能越给力!很明显PP-YOLO在mAP和FPS的权衡要优于YOLOv4和EfficientDet。
作者团队:百度
论文:https://arxiv.org/abs/2007.12099
代码(刚刚开源):
https://github.com/PaddlePaddle/PaddleDetection
PP-YOLO的命名规则很简单,因为作者团队是百度,而PaddlePaddle就是百度开源的深度学习框架,所以其全称是PaddlePaddle-YOLO,简称即PP-YOLO。
先定性:
-
PP-YOLO的目的是实现一种可以在实际应用场景中直接应用的具有相对平衡的有效性和效率的目标检测器,而不是提出一种新颖的检测模型。
-
PP-YOLO:一种基于YOLOv3的新型目标检测器。
-
PP-YOLO:尝试结合各种几乎不增加模型参数和FLOPs数量的技巧,以实现在确保速度几乎不变的情况下尽可能提高检测器精度的目标。
请你反复阅读上面几句话,你应该就知道不要带着"硬啃创新点"的眼光看待这篇检测论文。这篇论文是一篇经验+实战技巧的检测论文,对落地、实际上手应用或者打比赛友好度较高。
在介绍PP-YOLO之前,还要说一下:PP-YOLO并没有在backbone、数据增广和NAS方面做更多的实验,所以如果你想基于PP-YOLO来改进,那么其空间蛮大的。
PP-YOLO网络如上图,部分主要模块如下所述:
-
Backbone:ResNet50-vd-dcn
-
Detection Neck:FPN
-
Detection Head:YOLOv3
重磅技巧(tricks)来了:
-
Larger Batch Size:196
-
EMA
-
DropBlock
-
IoU Loss
-
IoU Aware
-
Grid Sensitive
-
Matrix NMS
-
CoordConv
-
SPP
-
Better Pretrain Model
上面模块和技巧有点多,那么怎么组合才最有效,分别涨点多少呢?看下图便知详情!
最终PP-YOLO在COCO test-dev 2017上的性能表现如下:
45.2% mAP,72.9 FPS!这数据很舒服了!
侃侃
其实YOLOv4 在不同框架下实现,性能也是不同的,据我了解的YOLOv4 PyTorch版本可以达到48.5% mAP。但PP-YOLO的出发点是相当好的,特别对于目标检测入坑小白,所以我推荐大家阅读YOLOv4和PP-YOLO,里面的实验做的都相当棒!
再说一下:PP-YOLO并没有在backbone、数据增广和NAS方面做更多的实验,所以如果你想基于PP-YOLO来改进,那么其空间蛮大的。
百度团队给出了 PP-YOLO的github链接,我查了一下相关代码,现已开源!
https://github.com/PaddlePaddle/PaddleDetection