百度的PP-YOLO发布了!性能超越YOLOv4

百度的PP-YOLO发布了!性能超越YOLOv4

paper链接:arxiv.org/abs/2007.1209
源码链接:github.com/PaddlePaddle

上图所示为PP-YOLO的主要结构,不同于YOLOv4,PP-YOLO没有大规模的去搜索对比backbone、fpn、数据增强trick等等,NAS也没有用上。

PP-YOLO的主干网络仅仅使用了ResNet,数据增强也只是直接用了MixUp,这使得PP-YOLO在训练和推理是更加高效(如果将YOLOv4的trick都用一遍,那么效果一定。。。)。PP-YOLO将COCO数据集上的精度由43.5%提升到了45.2%同时具有比YOLOv4更快的推理速度。

Backbone

使用 ResNet50-vd 来替代DarkNet-53,考虑使用resnet50-vd直接替换darknet-53会影响YOLOv3检测器的性能,论文使用可变形卷积层代替resnet50vd中的一些卷积层。

Neck

采用FPN方式。

Detection Head

YOLOv3的检测头非常简单。它由两个卷积层组成。采用3×3的卷积层和1×1的卷积层得到最终的预测结果。对于分类和定位,相应地采用交叉熵损失和Smooth L1损失,置信度损失用于监督目标得分,用于识别是否存在目标。

文中的Tricks

论文并没有提出一种新的检测方法,而是集中于结合现有的检测手段来实现一个高效的检测器。由于许多技巧不能直接应用于YOLOv3,因此需要根据其结构进行调整。

1、Big Batch

使用较大的batch size可以提高训练的稳定性,取得更好的效果。这里将训练的batch size从64个调整为196个,并相应地调整training学习率。

2、EMA

在训练模型时,保持训练参数的移动平均值通常是有益的。使用平均参数的评估有时会产生比最终训练值更好的结果。指数移动平均法(EMA)用指数递减法计算训练参数的移动平均值,有点动量的意思。

3、DropBlock

DropBlock是一种结构化的dropout,feature map上的一个连续区域中的单元被放在一起。与原论文不同,我们只对检测头应用DropBlock,因为在主干上添加DropBlock会导致性能下降。

4、IoULoss

不同于Yolov4,论文不直接用IoU损失替换L1损失,而是添加另一个分支来计算IoU loss。

5、IoU Aware

在YOLOv3中,分类概率和置信度相乘,以得到最终检测score,可是没有考虑定位精度。为了解决这个问题,论文增加了一个IoU预测分支来衡量定位精度。在训练过程中,采用IoU-aware-loss来训练IoU预测分支。在推理过程中,将预测的IoU乘以分类概率和客观得分来计算最终检测置信度,这与定位精度更相关。最终的检测结果是使用了这些子序列的输入。IoU感知分支将增加额外的计算成本。然而,只增加了0.01%的参数数目和0.0001%的触发器,这几乎可以忽略不计。

6、Grid Sensitive

网格敏感是YOLOv4引入的一个有效技巧。当我们解码边界盒中心x和y的坐标时,在原始YOLOv3中,我们可以通过以下式子得到它们:

其中,σ为sigmoid激活函数,gx​和gy​为整数。显然,x和y不能完全等于s⋅gx​或s⋅(gx+1),这使得预测仅仅位于网格边界上的边界框的中心变得困难。我们通过可以把方程变成以下式子来解决这个问题:

其中α在本文中设为1.05。这使得模型更容易预测边界框中心位于网格边界上。网格敏感所增加的浮点运算量非常小,可以完全忽略。

7、 Matrix NMS

Matrix NMS是由Soft NMS演化而来,并以并行的方式实现NMS。因此,Matrix NMS比传统NMS速度快,不会带来任何效率损失。

8、CoordConv

CoordConv是通过使用额外的坐标通道对自己的输入坐标进行卷积访问。CoordConv允许网络学习完全的平移不变性或不同程度的平移依赖。考虑到CoordConv会在卷积层增加两个输入通道,因此会增加一些参数和FLOPs。为了尽可能减少效率的损失,作者不改变骨干网中的卷积层,只使用CoordConv替换FPN中的1x1卷积层和检测头中的第一卷积层。在图中,CoordConv的具体插入点由橙色的菱形标记。

9、SPP

空间金字塔池(SPP)将SPM集成到CNN中,使用max-pooling操作,而不是bag-of-word操作。PP-YOLO的SPP具体插入点带有红色星号标记。SPP本身没有引入参数,但是接下来的卷积层的输入通道数量会增加。所以增加了大约2%的参数量和1%的FLOPs。

10、Better Pretrain Model

在ImageNet上使用具有更高分类精度的pretrain模型可以获得更好的检测性能。这里我们使用蒸馏的resnet50vd模型作为预训练模型。这显然不会影响检测器的效率。

实验结果

EfficientDet、YOLOv4,你们不行了,我的效果卡卡的。。。

发布于 07-25

文章被以下专栏收录