PP-Yolo阅读笔记

PP-YOLO 是百度在paddle-paddle框架下基于YOLOv3,结合各种trick得到的一个在性能与效率平衡的检测网络。与yolov4、efficientDET等不同,pp-yolo没有提出各种新的东西,但是它主要面向实际场景,通过各种trick得到mAP 超过yolov4,同时FPS更高,对工作中训练优化目标检测网络提供了很好的参考。同时,PP-yolo 的各种基本组件并不是最新的,因此也有较大的提升空间。

如上图中所示,PP-YOLO可以达到比yolov4更高的FPS,在相同的FPS下,PP-yolo map更高. 以下主要记录PP-yolo中使用到的各种技巧。

网络结构

上图为yolov3的网络结构图,PP-yolo基本一致。其中五角星代表注入的 SPP层,三角形代表dropblock,菱形代表CoordConv。

backbone

主干网络 Resnet50-vd-dcn: 使用了 DCN(deformable convolutional),虽然DCN本身不会明显提升模型的参数量与FLOPs, 但在实际中太多的DCN会增加推理时间消耗,所以只在最后一个stage使用DCN替代3 * 3 卷积 。

Detection Neck

FPN

Detection Head

yolov3 的检测头以及yolo loss

Tricks

Large batch size

训练batch size达到196

EMA

使用指数移动平均作为评估模型参数, 衰减系数 $0.9998$

$$W_ {EMA} = \lambda W_ {EMA} + (1 - \lambda) W$$

DropBlock

使连续的特征图区域drop掉。(论文中写只在detect head中使用,但上图中只在FPN中使用了??)

IoU Loss

pp-yolo中保持了box回归的l1损失,同时增加了 IOU loss 分支。

IoU Aware

作者认为在yolov3 中,分类概率和物体分数会相乘作为最后的输出置信度,但是没有考虑到定位的准确性。因此,增加了IOU预测分支来度量定位。预测时,预测的IOU与分类概率与物体分数相乘得到最终的输出置信度。

Grid Sensitive

yolov3 中bounding box 中心坐标如上公式,但是sigmoid 不能达到0或1,因此x,无法取到 $s*g_x$, y也雷同,即当物体刚好落在网格边缘时其中心点刚好落在网格顶点上。文中提出的优化公式如下,$\alpha$ 为1.05 (暂时还有疑惑,感觉也无法等于$s*g_x$呢):

Matrix NMS

CoordConv

SPP

Better Pretrain Model

使用蒸馏过的 resnet50-vd

消融实验

通过逐个增加模块,精度性能对比如下:

对比sota:

在并没有增加创新点的情况下,pp-yolo的性能与效率还是很可观的。如果将最新的一些创新点加进去应该还能提升。

ref

pp-yolo 论文 pp-yolo代码