论文题目《YOLOv4: Optimal Speed and Accuracy of Object Detection》
论文地址:https://arxiv.org/abs/2004.10934
论文代码:https://github.com/AlexeyAB/darknet

内容目录

1 Introduction2 Related work2.1 Object detection models2.2 Bag of freebies2.3 Bag of Specials3 Methodology3.1 Selection of architecture3.2 Selection of BoF and BoS3.3 Additional improvement3.4 YOLOv44 Experiment and Result5 实现版本

1 Introduction

YOLO V4建立了一个更高效更强大的目标检测模型,使用单张1080Ti或者2080Ti就可以训练,验证了SOTA的Bag-of-Freebies和Bag-of-Specials的有效性,修改了SOTA方法,使其更适合在单卡环境下训练,相对于YOLO V3在准确率上提升了10个百分点左右。

目标检测系列(V): YOLO V4_github

2 Related work

2.1 Object detection models

文章首先抛出一张目标检测的概述图,包含One-Stage一阶段和Two-Stage两阶段目标检测算法,之前的各种算法我们都介绍过,包括R-CNN、Fast R-CNN、Faster R-CNN、SSD、 YOLO V1、YOLO V2、YLOL V3。

目标检测系列(V): YOLO V4_github_02

接下来是讲Bag of freebies和Bag of Specials,

2.2 Bag of freebies

Bag of freebies 就是只改变训练策略,增加训练开销,但是不增加推理测试的开销获得更好的精度,称为“免费赠品”,用到的改进有数据增强(光度畸变、几何畸变、Cutmix)、正则项(DropBlock)、难例挖掘(数据不平衡)、损失函数等。

2.3 Bag of Specials

Bag of Specials就是指增加很少的计算量(插件模块、后处理)来极大的提高模型精度的方法,称为“特价袋”,用到的改进有增大感受野(SPP)、attention注意力机制、shortcut跳跃连接、激活函数、NMS非极大值抑制、归一化方法等。

3 Methodology

YOLO V4提出了两种实时神经网络的选择:
对于 GPU,在卷积层中使用少量组(1-8 组):CSPResNeXt50 / CSPDarknet53;
对于 VPU,使用了分组卷积(grouped-convolution),但避免使用 Squeeze-and-excitement(SE)块。具体而言,它包括以下模型:EfficientNet-lite / MixNet / GhostNet / MobileNetV3。

3.1 Selection of architecture

该研究的目标是尽量找到输入分辨率、网络深度、模型参数量等的平衡,高输入分辨率、更深的网络、更多的模型参数量往往能得到更佳的精度和性能。而理论上感受野更大、参数量更多模型的变现也会更好。
此外,多尺度的感受野可以同时匹配不同大小的目标、兼顾目标的上下文信息、增加图像点与最终激活之间的连接数。

作者对比了三种Backbone model(CSPResNext50、CSPDarknet53、EfficientNet-B3),最终选择了感受野、参数量和速度都比较好的CSPDarknet53模型作为主干网络,并且添加SPP block(Spatial Pyramid Pooling)空间金字塔结构,增加了多尺度的感受野但不降低运行速度,整合上下文信息,将YOLO V3中的FPN替换为PANet作为不同层的参数整合方法。

目标检测系列(V): YOLO V4_数据_03

目标检测系列(V): YOLO V4_github_04

最终作者选择CSPDarknet53作为主要网络,添加SPP模块、PANet路径整合neck,YOLOv3(基于anchor)head作为YLOLv4的整体架构。

3.2 Selection of BoF and BoS

为了提升目标检测卷积神经网络的性能,目前比较有效的trick有:
Activation激活函数: ReLU, leaky-ReLU, parametric-ReLU, ReLU6, SELU, Swish, or Mish。
Bounding box Regression loss边界框回归损失: MSE, IoU, GIoU, CIoU, DIoU
Data augmentation数据增强: CutOut, MixUp, CutMix
Regularization method正则化方法: DropOut, DropPath, Spatial DropOut, or DropBlock
Normalization归一化方法: Batch Normalization(BN), Cross-GPU Batch Normalization(CGBN or SyncBN), Filter Response Normalization (FRN), or Cross-Iteration Batch Normalization(CBN)
Skip-connection跳跃连接方式:残差连接、加权残差连接、多输入加权残差连接、Cross stage 局部连接(CSP)。
  由于PReLU和SELU难以训练,并且ReLU6是专门为量化网络设计的,从激活函数中去除这几种。而在正则化方法中,DropBlock的效果是最优的。对于归一化方法的选择,由于需要单卡训练,因此不考虑SyncBN。

3.3 Additional improvement

为了让目标检测模型更加适合在单卡进行训练,作者还做了如下改进:
1) 提出新的数据增强方法Mosaic和自对抗训练SAT
2) 采用遗传算法来选择最优的超参数
3) 改进SAM、PAN和Cross-mini-Batch Normalization使训练更高效

Mosaic可以同时融合4张图像进行数据增强,可以增强目标检测器的检测能力,减少对mini-batch的依赖,而Cutmix只能融合2张图像。

目标检测系列(V): YOLO V4_数据_05

目标检测系列(V): YOLO V4_目标检测_06

SAT自对抗训练也是一种新的数据增强方法,包含两个阶段,第一阶段用神经网络进行前向传播和反向传播并修改图像,进行一次对抗训练,第二阶段对修改后的图像进行正常目标检测训练。
CmBN是对CBN的改进,它只在当前单个batch的数据进行积累,BN是对当前mini-batch进行归一化,CBN是对当前以及往前三个mini-batch进行归一化。

目标检测系列(V): YOLO V4_数据_07

SAM从spatial-wise attention空间注意力机制修改为point-wise attention点注意力机制,直接使用卷积核Sigmoid进行激活,对应点相乘,并不使用Pooling,并将PAN中的shortcut连接替换为concate级联。

目标检测系列(V): YOLO V4_数据_08

下图为空间注意力机制:

目标检测系列(V): YOLO V4_目标检测_09

下图为PANet:

目标检测系列(V): YOLO V4_目标检测_10

3.4 YOLOv4

这部分介绍了YOLOv4的细节构成。YOLOv4包含:
1)Backbone主干网络:CSPDarknet53
2)Neck颈部:SPP,PAN
3)Head头部:YOLOv3

总体来看,YOLO v4使用了如下结构:
主干网络的BoF(Bag of Freebies):CutMix和Mosaic数据增强, DropBlock正则化, 标签平滑(Class label smoothing)
主干网络的BoS(Bag of Specials):Mish激活, Cross-stage partial connections (CSPNet), Multiinput weighted residual connections(MiWRC)
目标检测端的BoF(Bag of Freebies):CIoU-loss, CmBN, DropBlock正则化, Mosaic数据增强, Self-Adversarial Training, 去除边框敏感性(Eliminate grid sensitivity,见实验部分的解释), 多anchor回归(之前只选最大的), 余弦退火学习率调整(Cosine annealing scheduler), 使用遗传算法最优化超参数, 随机输入大小
目标检测端的BoS(Bag of Specials):Mish激活, SPP-block, SAM-block, PAN通道融合, DIoU-NMS

4 Experiment and Result

作者测试了不同训练改进技术对ImageNet(ILSVRC 2012 val)数据集进行分类器准确性测试,然后对MS COCO(test-dev 2017)数据集检测器的准确性进行了测试。
不同目标检测器的速度和准确性对比结果,YOLOv4位于P-are最优曲线上,在速度和精度方面都优于最快和最精确的检测。

目标检测系列(V): YOLO V4_数据_11

5 实现版本

以下是部分YOLO v4的实现版本,来自Github
TensorFlow 2.0
​​​https://github.com/xiao9616/yolo4_tensorflow2​

Pytorch
​​​https://github.com/Minerva-J/pytorch-YOLOv4​​fork自Tianxiaomo/pytorch-YOLOv4,目前还没做任何修改

Keras
​​​https://github.com/Ma-Dan/keras-yolo4​​大家可以自行测试~~~


目标检测系列(V): YOLO V4_数据_12