YOLOv4论文详解

在Redmon宣布退出CV界后,YOLO算法的大棒由中国*的学者接力,并在今年推出了YOLOv4算法。和之前的版本一样,YOLOv4也是一个one-stage的物体检测方法,在YOLOv3的基础上,YOLOv4修改了Backbone网络,添加了新的Neck融合方法,并且从通用和专用的角度加入了一些新的技巧,有效地提升了算法的检测精度,同时提高了检测速度。

方法

Backbone

对于GPU,综合考虑了网络输入的分辨率、卷积层数、参数量和卷积输出通道数等,论文选择的是Darknet53的改进版CSPDarknet53来作为Backbone。虽然CSPResNext50在分类上比CSPDarknet53要好,但是在COCO检测数据集上,CSPDarknet53在速度和检测精度上均优于CSPResNext50。图1是CSPResNext50、CSPDarknet53和EfficientNet-B3分类网络的一些指标对比。

图1. 三种分类网络的指标对比
YOLOv4论文详解

Neck and Head

在Neck部分上,作者添加了SPP Block,因为SPP能增大网络的感受野,同时几乎不会影响到检测速度。

另外,作者还使用的改进版PANet的特征融合方法,代替了原YOLOv3中的FPN方法,改进的地方在于,原PANet不同scale之间的特征融合是通过相加(addition)的方式,论文中采用的是衔接(concatenation)的融合方式。如图2所示。

图2. 改进版PAN
YOLOv4论文详解

作者还使用了一种叫做改进版SAM的模块,原本的SAM方法是通道维度的attention,论文里将其改成了point-wise的attention。如图3所示。

图3. 改进版SAM
YOLOv4论文详解

在Head部分,YOLOv4仍然沿用了v3的anchor based的结构。

训练Tricks

在预训练网络的backbone上,作者采用了这几种tricks:

  1. 在**函数上,作者摒弃了PReLU和SELU等方法,因为它们很难训练,也放弃了ReLU6,因为它更适合于量化网络。最后论文选择了Mish activation。
  2. 为了了提高网络的泛化能力,作者使用的DropBlock的方法来训练。
  3. 在数据增强上,作者采用了CutMix和Mosaic数据增强的方法
  4. 在loss上,使用了label smoothing的方法。
  5. 在网络的跳跃连接设计上,采用了Multi-input weighted残差连接(MiWRC)。

在训练检测网络时,作者采用了这几种tricks:

  1. 沿用了backbone预训练的一些方法,比如Mish activation、DropBock、Mosaic数据增强。
  2. 在loss上采用CIoU-loss;选择检测方框上使用DIoU-NMS;学习率策略使用Cosine annealing。
  3. 训练方式上使用了自对抗训练(Self-Adeversarial);消除网格敏感度;在单个groud truth上使用多个anchor;随机化训练数据的shape等。
  4. 采用遗传算法找到最优的一组训练超参。
  5. 网络结构上使用了CmBN(Cross mini-Batch Normalization)、改进版的SAM和PAN。

其中,自对抗训练的方法分成两个阶段:1. 通过回传的梯度不更新网络权重,而是改变图片,生成对抗样本;2.使用该对抗样本以正常的方式去训练网络。

CmBN与之前BN(batch normalization)和CBN(Cross batch normalization)的区别如图4所示。BN是每个mini-batch上累加网络权重梯度和计算BN,最后一步再更新网络权重和ScaleShift;CBN是在每个mini-batch上更新网络权重,累加近n(图4中的n为4)个mini-batch的BN,在最后一步更新ScaleShift;CmBN综合了以上两种更新方式,在每个mini-batch累加网络权重梯度和近n个mini-batch的BN,在最后一步时更新网络权重和ScaleShift。

图4. Cross mini-Batch Normalization
YOLOv4论文详解

实验

在ImageNet的backbone训练上,采用了以下超参:训练步数为8,000,000,batch size为128, mini-batch为32,多项式学习率调整策略,学习率初始值为0.1,warm-up步数为1000,优化器的momentum和weight dacay分别为0.9和0.005。作者对比了好几种数据增强和**函数的方法,才选择了上个部分给出的训练tricks。所有这些实验都是在1080Ti或者2080 Ti的GPU上完成。

在COCO检测数据集上,默认的超参如下:训练步数为500,500,step decay的学习率策略,学习率初始值为0.01,在400,000步和450,000的时候乘以0.1,优化器的momentum和weight decay分别为0.9和0.0005。所有实验都是只使用一个GPU,输入数据是batch size为64、mini batch size为8或4的多尺寸图片。另外作者也用遗传算法搜索出了另一种超参策略,有兴趣的读者可自行在论文中查阅。

直接给出训练的结果吧,如图5所示。详细的表就不贴出来了,论文都有。

图5. YOLOv4在COCO数据集上的实验结果与其他网络的对比
YOLOv4论文详解

从图4中可以看出,在实时检测标准上(大于30FPS),YOLOv4相比YOLOv3的精度有不小的提升,同时速度还略有减小。在和其他网络的对比上,同精度的条件下,YOLOv4的速度具有明显的优越性。