(三十三)论文阅读 | 目标检测之PP-YOLO


简介

(三十三)论文阅读 | 目标检测之PP-YOLO

图1:论文原文

本文介绍的是百度于20202020年提出的目标检测算法,PP{\rm PP}-YOLO{\rm YOLO},它主要是基于YOLOv3{\rm YOLOv3}实现。首先,PP{\rm PP}-YOLO{\rm YOLO}改进了YOLOv3{\rm YOLOv3}中的骨干网络、网络颈、网络头等,然后添加诸多技巧完成对改进网络的优化。实验结果为在COCO{\rm COCO}数据集上的mAP{\rm mAP}45.2%45.2\%FPS{\rm FPS}72.972.9,好于当前热门的EfficientDet{\rm EfficientDet}YOLOv4{\rm YOLOv4}等模型。论文原文 源码


0. Abstract

目标检测在计算机视觉任务中扮演了重要角色。通常,由于计算机硬件的限制,需要牺牲模型精度来保证其推理速度。因此在设计网络时应充分考虑精度与速度之间的平衡。而PP{\rm PP}-YOLO{\rm YOLO}的主要考虑点是在一定程度上平衡模型的精度和速度,而非设计一个新颖的检测模型。PP{\rm PP}-YOLO{\rm YOLO}基于YOLOv3{\rm YOLOv3}实现,通过添加大量技巧来提高模型的精度,同时也保证了模型的推理速度。

论文贡献:(一)提出对YOLOv3{\rm YOLOv3}的改进,PP{\rm PP}-YOLO{\rm YOLO};(二)PP{\rm PP}-YOLO{\rm YOLO}兼顾了模型的精度和速度;(三)PP{\rm PP}-YOLO{\rm YOLO}超越了YOLOv4{\rm YOLOv4}EfficientDet{\rm EfficientDet}


1. Introduction

YOLO{\rm YOLO}系是目标检测检测算法中的一个重要系列,它们在精度和速度间作了有效的平衡。从YOLOv1{\rm YOLOv1}YOLOv3{\rm YOLOv3},模型均发生了很大的改变。而YOLOv4{\rm YOLOv4}则是在YOLOv3{\rm YOLOv3}的基础上通过添加大量的技巧来显著提高模型的性能。论文提出的PP{\rm PP}-YOLO{\rm YOLO}也是基于以上思路,在不增加模型推理时间的基础上通过添加大量技巧来提高模型的整体性能。

YOLOv4{\rm YOLOv4}不同,PP{\rm PP}-YOLO{\rm YOLO}没有试图设计新颖的骨干网络或数据增强方法,亦或是使用NAS{\rm NAS}得到超参数。在骨干网络部分,PP{\rm PP}-YOLO{\rm YOLO}使用ResNet{\rm ResNet};数据增强使用MixUp{\rm MixUp}。上述选择的原因有两点:ResNet{\rm ResNet}系列优化力度很大,能够很好地满足实际部署等需求;骨干网络的替换和数据增强方法是相对独立的部分,不会对后续提到的技巧产生影响。同时,NAS{\rm NAS}通常会消耗更多的计算资源,其不具有通用性。所以,PP{\rm PP}-YOLO{\rm YOLO}的超参数设置同YOLOv3{\rm YOLOv3}

论文的设计初衷是使用大量技巧来提高模型的性能,同时不会降低其推理速度。通常,技巧不能直接应用于YOLOv3{\rm YOLOv3}而需要一些小改动。论文并没有设计一个新颖的检测器,而是以PP{\rm PP}-YOLO{\rm YOLO}的例子来说明如何一步步构建一个高效的目标检测器。


2. Related Work

当前,Anchor{\rm Anchor}-Based{\rm Based}仍是主流的目标检测算法。其最早可追溯到RCNN{\rm RCNN}系列,它的核心思想是引入锚框,可以看作是预定义的先验框,以此为边界框回归提供先验知识。其中又可以分为一阶段检测算法和两阶段检测算法两个分支:一阶段检测算法中,YOLO{\rm YOLO}系列、RetinaNet{\rm RetinaNet}RefineDet{\rm RefineDet}EfficientDet{\rm EfficientDet}等较为经典的模型;两阶段检测算法中,RCNN{\rm RCNN}系列、ReidentNet{\rm ReidentNet}等较为经典的模型。除此之外,Anchor{\rm Anchor}-Free{\rm Free}方法正受到广泛的关注,出现大量如DenseBox{\rm DenseBox}UnitBox{\rm UnitBox}FSAF{\rm FSAF}FCOS{\rm FCOS}FoveaBox{\rm FoveaBox}SAPD{\rm SAPD}CornerNet{\rm CornerNet}CenterNet{\rm CenterNet}ExtremeNet{\rm ExtremeNet}RepPoint{\rm RepPoint}等经典方法。这类方法消除了手工设计的限制,在多尺度目标检测下展现出了巨大的潜力


3. Method

3.1 Architecture

Backbone 在原始的YOLOv3{\rm YOLOv3}中,特征提取部分使用的是DarkNet53{\rm DarkNet53}。论文使用残差网络提取特征,同时为了保证模型的精度而引入DCN{\rm DCN}。最后,使用ResNet50{\rm ResNet50}-vd{\rm vd}-dcn{\rm dcn}作为骨干网络。

Detection Neck 论文使用FPN{\rm FPN}作为网络颈。

Detection Head 论文沿用YOLOv3{\rm YOLOv3}的检测头,每一个分支的输出通道数是3(K+5)3(K+5)。对于分类和定位,分别使用交叉熵损失函数和L1{\rm L1}损失函数。综上,PP{\rm PP}-YOLO{\rm YOLO}的基本结构如下:
(三十三)论文阅读 | 目标检测之PP-YOLO

图2:PP-YOLO结构

3.2 Selection of Tricks

上一部分介绍了PP{\rm PP}-YOLO{\rm YOLO}的基本结构,这部分将介绍其中使用的基本技巧。

Large Batch Size 增大批次可以提高训练稳定性,从而能够获得更好的结果。论文使用的批次大小为192{\rm 192},同时相应地调整训练策略以及学习率。

EMA 在训练模型时,保持训练参数平均移动往往有益于训练更优的模型, 使用平均参数评估有时会产生比最终训练值更好的结果。 指数平均移动是深度学习中常用到的优化方法,由于在训练深度学习模型时,模型权重在最后几步可能会在最优点处徘徊。EMA{\rm EMA}的思路是取最后几步的平均值作为最后的结果,从而增加模型的鲁棒性。即:WEMA=λWEMA+(1λ)W(1)W_{EMA}=\lambda W_{EMA}+(1-\lambda)W\tag{1}

其中,λ=0.99998\lambda=0.99998

DropBlock DropBlock{\rm DropBlock}是在网络模型上随机丢弃的一种正则化方法,例如将特征图上的连续区域丢弃。不同于以往,PP{\rm PP}-YOLO{\rm YOLO}仅在FPN{\rm FPN}使用DropBlock{\rm DropBlock}

IoU LossYOLOv4{\rm YOLOv4}中使用IoU{\rm IoU}损失替换L1{\rm L1}损失不同的是,PP{\rm PP}-YOLO{\rm YOLO}通过额外添加一个分支引入IoU{\rm IoU}损失。

IoU AwareYOLOv3{\rm YOLOv3}中,将分类概率和目标分数的乘积作为最后的分类置信度,而没有考虑定位精度。为了处理这个问题,论文引入一个IoU{\rm IoU}预测分支。在训练过程中,使用感知IoU{\rm IoU}损失来训练这个分支。在推理阶段,最后的分类置信度由分类概率、目标分数和IoU{\rm IoU}值乘积得到。

Grid Sensitive Grid Sensitive{\rm Grid\ Sensitive}YOLOv4{\rm YOLOv4}中采用的一种优化方法。在原始的YOLOv3{\rm YOLOv3}中,边界框中心坐标通过以下式子得到:x=s(gx+σ(px))    y=s(gy+σ(py))(2)x=s·(g_x+\sigma(p_x))\ \ \ \ y=s·(g_y+\sigma(p_y))\tag{2}

其中,σ\sigmaSigmoid{\rm Sigmoid}函数、gg_*是坐标值、ss是缩放因子。显然,xxyy的值不可能为sgxs·g_xs(gx+1)s·(g_x+1),这样边界框的中心不可能到达网格的边界。论文对此做了如下改动:x=s(gx+σ(px)(α1)/2)(3)x=s·(g_x+\sigma(p_x)-(\alpha-1)/2)\tag{3}

y=s(gy+σ(py)(α1)/2)(4)y=s·(g_y+\sigma(p_y)-(\alpha-1)/2)\tag{4}

其中,α=1.05\alpha=1.05

Matrix NMS Matrix NMS{\rm Matrix\ NMS}是在Soft NMS{\rm Soft\ NMS}的基础上改进得到的,解决了Soft NMS{\rm Soft\ NMS}无法并行实现的问题。

CoordConv CoordConv{\rm CoordConv}的提出是为了解决经典卷积神经网络无法感知坐标信息的问题。CoordConv{\rm CoordConv}在普通卷积的基础上添加两个通道分别表示横向和纵向的位置,用于给卷积操作提供自身位置信息。CoordConv{\rm CoordConv}使得网络可以具备完全或部分平移不变性。

SPP SPP{\rm SPP}最早来自于SPPNet{\rm SPPNet},其提出的目的是解决卷积神经网络的输入需要固定尺寸的问题。在PP{\rm PP}-YOLO{\rm YOLO}中引入SPP{\rm SPP}以增大网络感受也,且仅引入少量额外的参数。

Better Pretrain Model 使用预训练的ResNet50{\rm ResNet50}-vd{\rm vd}模型。


4. Experiment

(三十三)论文阅读 | 目标检测之PP-YOLO

图3:各trick的实验结果对比

(三十三)论文阅读 | 目标检测之PP-YOLO

图4:各目标检测算法的实验结果对比


5. Conclusion

本文介绍的PP{\rm PP}-YOLO{\rm YOLO}是针对YOLOv3{\rm YOLOv3}的又一改进,效果优于YOLOv4{\rm YOLOv4},模型基于PaddlePaddle{\rm PaddlePaddle}实现。与YOLOv4{\rm YOLOv4}类似,PP{\rm PP}-YOLO{\rm YOLO}通过引入诸多技巧逐步提高模型性能。但作者也提到,不能一味地引入技巧,而必须要平衡模型的精度与速度,以及保证训练模型时的稳定性。


参考

  1. Long X, Deng K, Wang G, et al. PP-YOLO: An Effective and Efficient Implementation of Object Detector[J]. arXiv preprint arXiv:2007.12099, 2020.