写在前面
YOLO, YOLO9000, 以及 YOLOv3 等里程碑式目标检测网络框架,随着目标检测任务的进一步研究,在学术界和工业界中得到广泛应用。其论文作者 Joseph Redmon 更是由于在目标检测方面杰出的工作贡献而闻名于计算机视觉领域。由于个人原因,Joseph Redmon 宣布不再进行计算机视觉方向的研究工作。但是 Alexey Bochkovskiy 等人在时隔不久之后拿起了接力棒,提出了速度更快,检测准确率更高的 YOLOv4 网络框架。下图为各个目标检测工作的时间线:
下文主要对 YOLOv4 论文工作做一个简单的 Review ,进一步了解论文的工作内容。
Outline
1. 论文贡献/Motivation
2. 相关工作
3. 论文方法
4. 实验
5. 总结
1. 论文贡献/Motivation
多数 CNN-based 目标检测算法的应用场景仅仅局限于推荐系统中。例如通过城市街景的摄像头来查找空闲停车位,其应用场景对算法精度和速度需求不高,但汽车碰撞事件的发生却需要快速精确的检测算法从而对即将发生的碰撞事件进行警告。GPU硬件的出现允许实时物体检测算法可以在能承担费用的前提下大量应用。然而,大多数检测准确的神经网络检测算法不能达到实时检测的需求并且需要大量的GPU来保证算法的训练。
基于以上分析,作者意在通过搭建可以在普通单 GPU (通用)环境下训练的实时高精度 CNN 检测网络框架来解决该问题。
如何实现“实时高精度通用”的CNN检测网络,作者的一些思考:
1. 有大量特征可以用来提高 Convolutional Neural Network 的精度。但是,不同特征及不同特征的组合需要在大型数据集上对这些特性的组合进行实际测试,并对结果进行理论验证。
2. 有些特征只对某些模型 certain models 起作用,只对某些问题 certain problems 起作用,或者只对小规模数据集 small-scale datasets 起作用;而一些特征,如批处理规则化 batch-normalization 和不同尺度特征的残差连接 residual-connecions,则适用于大多数模型、任务和数据集。
3. 作者假设这些可以提高网络检测精度通用的特征包括: 带全残差连接 Weighted-Residual-connctions (WRC),跨阶段局部连接 Cross-Stage-Partial-connections (CSP), Cross mini-Batch Normalization (CmBN), 自对抗训练 Self-adversarial-training (SAT) 以及 Mish-activation 激活函数等。最终作者通过大量剥离实验来验证具体哪些特征或操作可以帮助网络提高精度。通过实验作者最后选择了:WRC,CSP,CmBN,SAT,Mish activation, modified PAN, modified SAM,对训练集图像打马赛克数据增加方法 Mosaic data augmentation,DropBlock 规则化,CIoU 损失函数以及其中的一些组合达到了比其它 SOTA 领域最新更好的实验结果。在MS COCO数据集上取得了43.5%AP (65.7% A P 50 AP_{50} AP50)的最好精度,并在 Tesla V100(16G显存) 上达到了 65FPS 的实时速度。
2. 相关工作
目标检测任务是判断什么物体具体在什么位置的任务,即包括两个子任务,分类和检测。目标检测网络通常由两部分组成,在ImageNet或其它数据集预训练的骨干网络 backbone 以及 检测器头 head,分别用来预测物体的classes和bounding boxes。
对于backbone的选择:
- 适合作为 backbone 运行在 GPU 硬件环境上的骨干网络有:VGG, ResNet, ResNetXt, DenseNet,SpineNet, EfficientNet-B0/B7, HitDetector, DetNet, DetNAS, CSPResNetXt50, CSPDarknet53 等骨干网络;适合运行在CPU硬件环境上的backbone:SqueezeNet, MobileNet以及ShuffleNet等。
对于head的选择:
- 一步法 one-stage 检测器
- 对于一步法检测器头的选择,最具代表性的 anchor based 检测器头有 RPN, R-FCN, YOLO(YOLO,YOLO9000,YOLOv3),SSD,RetinaNet;代表性的 anchor-free的 one-stage 检测器头有 CenterNet, CornerNet, FCOS等等。
- 二步法 two-stage 检测器
- 最具代表性的two-stage anchor based检测器头包括 R-CNN 系列,包括 fast R-CNN, faster R-CNN, R-FCN 以及 Libra R-CNN; two-stage anchor-free检测器头有 RepPoints。
对于 Neck 的选择:
- Neck 指在监测网络框架的 backbone 与 head 之间插入的层,通常这些层用来将不同阶段/不同维度的特征进行聚集。一个 Neck 往往是由几个 bottom-up 路径特征和几个 top-dowm 路径特征构成,类似于特征金字塔的构造。
具有 Neck 模块设计的网络包括:
- Path-aggregation 模块网络:Feature Pyramid Network(FPN), Path Aggregation Network (PAN),BiFPN 以及 NAS-FPN 等网络。
- 直接可添加的模块: SPP, ASPP,RFB, SAM等。
3. 论文方法
由论文贡献部分我们了解到,作者意在通过找到那些可以提高网络模型检测精度和速度的通用特征 universal features 来实现“实时高精度通用”的CNN检测网络的设计。因此作者在论文方法部分主要围绕这一思路进行讨论分析。
1. Bag of freebies
Bag of freebies 是指那些在不改变模型结构并且不改变损失函数的情况下,不牺牲前向传播时间/推断代价从而提高算法精度的方法。
数据增强 data augmentation。
-
data augmentation的目的旨在通过提高网络训练输入图像的多样性来提高检测算法在不同环境下的算法鲁棒性, 提供算法的 robustness。这些数据增强方法包括:光学变换 photometric distortions, 几何变换 geometric distortions。photometric distortions 可以通过改变训练图像的亮度,对比度,色调,饱和度,对图像加噪声等方式实现。geometric distortions 可通过对训练图像随机尺度缩放 random scaling, 裁剪 cropping, 翻转 flipping 以及不同角度旋转 rotating 等方式实现。具体实现可以参考这里;
-
以上方法均属于在原图逐像素上做了调整,在图像调整了的像素位置其依然保留了原像素的信息。而一些其它的数据增强方法,例如:random erase 以及 CutOut 数据增强方法则通过随机的选择图像中的矩形区域,将该矩形区域中的像素值随机或全部设为0的方式,一定程度上解决了图像中出现遮挡环境场景情况的数据增强问题(例如疫情期间人脸识别/检测环境中行人带口罩的情况);相似的 hide-and-seek 以及 grid mask 数据增强方式通过随机或者选择图像中多个矩形区域进行置零操作。通过这些数据增强的方式来提高算法鲁棒性,类似于对网络层中的特征图 feature map 进行的 DropOut, DropConnect 以及 DropBlock 操作;
-
将多个图像整合在一起的图像增强方式 MixUp 将两张图像进行相乘并以不同的系数将其叠加,随后将对应的标签 label 以同样的系数进行调整。CutMix 方法将裁剪的图像覆盖到其它图像的矩形区域中,并根据混合区域调整对应图像的标签;除了以上数据增强方式,风格迁移对抗神经网络 style transfer GAN 也常用作数据增强,其可以有效的减少 CNN 网络学习到的纹理偏差。
训练数据集类别不均衡问题
- 当训练数据集出现类不均衡问题时会导致 "the semantic distribution in the dataset may have bias"的问题,即会出现数据集中不同类别的语义分布偏差。对于 两步法检测算法中的类不均衡问题我们可以通过样本挖掘方法 hard negative example miming 或 online hard example mining 来解决。 由于一步法检测器属于 dense prediction 的设计方式, 这些样本挖掘方法并不适合。对于 one-stage 检测器可用 focal loss 来解决不同类之间存在类别不均衡的问题。 另外,作者还指出通过硬编码 one-hot 编码方法很难表达不同类别之间的关联度,标签平滑 label smoothing 方法可以将硬编码 hard label 转换为 soft label, 从而使模型具有更好的鲁棒性。还可以通过知识精炼 knowledge distillation 的方式来获得更好的 soft label。
BBox 回归的目标函数
- 作者分析传统的检测算法通常之间使用 Mean Square Error (MSE) 即均方误差来计算 BBox的中心点坐标以及 BBox 的宽和高 { x c e n t e r x_{center} xcenter, y c e n t e r y_{center} ycenter, w w w, h h h}或左上角点和右下角点 {KaTeX parse error: Undefined control sequence: \- at position 7: x_{top\̲-̲left}, KaTeX parse error: Undefined control sequence: \- at position 7: y_{top\̲-̲left}, KaTeX parse error: Undefined control sequence: \- at position 10: x_{bottom\̲-̲right}, KaTeX parse error: Undefined control sequence: \- at position 10: y_{bottom\̲-̲right}}。对于 anchor-based 方法,用坐标偏移量来估计,如{ x c e n t e r − o f f s e t x_{center-offset} xcenter−offset, y c e n t e r − o f f s e t y_{center-offset} ycenter−offset, w o f f s e t w_{offset} woffset, h o f f s e t h_{offset} hoffset} 以及 { x t o p − l e f t − o f f s e t x_{top-left-offset} xtop−left−offset, y t o p − l e f t − o f f s e t y_{top-left-offset} ytop−left−offset, x b o t t o m − r i g h t − o f f s e t x_{bottom-right-offset} xbottom−right−offset, y b o t t o m − r i g h t − o f f s e t y_{bottom-right-offset} ybottom−right−offset}。但这些直接对 BBox 坐标点值进行估计的方式均将坐标点独立的对待,没有考虑到检测物体的完整性。由于存在以上问题,IoU loss 通过将预测的 BBox 区域与 ground truth 的 BBox 同时考虑的方式较好的解决了直接对 BBox 坐标点值估计的方式存在没有考虑到检测物体的完整性这一缺点, 且 IoU loss 具有较好的尺度不变性, 不会发生传统回归目标函数用 l 1 l_1 l1 距离或 l 2 l_2 l2 距离计算 x , y , w , h {x,y,w,h} x,y,w,h 时,loss 会增加的问题;同样基于区域的目标回归函数还包括将物体 shape 和 orientation 因素作为考虑的GIoU loss, 将物体距中心的距离作为考虑因素的 DIoU loss 以及将预测框和 ground truth 区域框,物体距中心点距离,纵横比等因素作为考虑的 [CIoU] loss,并且 CIoU 对于 BBox 回归具有很好的的收敛速度和精度。
2.bag of specials
bag of specials 是指那些增加稍许推断代价,但可以提高模型精度的 plugin modules 以及 post-processing 方法。通常这些方法在具体网络中都有着特殊的作用,例如:增大网络的感受野 enlarge receptive filed, 加入注意力机制 attention mechanism, 又或者增强综合特征能力。而后处理方法通常用来对结果进一步细化和筛选,使得预测结果更加准确。
提高网络感受野的一些 modules:
- SPP, ASPP,RFB, SAM 等。SPP module 的设计来自于 Spatial Pyramid Matching (SPM) 网络,SPMs 将上层的 feature map 划分为多个相同大小的 d x d dxd dxd 快,其中 d d d 可以是 1 , 2 , 3 , . . . {1,2,3,...} 1,2,3,..., 从而形成空间金字塔,然后进行 bag-of-word feature的提取(把一幅图像描述为多个局部区域/关键点(Patches/Key Points)特征的无序集合,某局部图像特征不依赖于其它局部图像特征的存在,即Bag-of-word features);SPP module 则将 SPM 应用于 CNN 中 并使用 max-pooling 操作代替了 bag-of-word features;因为原 SPP module 论文中输出的是一维的特征向量,无法在 Fully Convolutional Network (FCN) 中使用,因此在 YOLOv3的设计中通过将 kernel size 为 k x k kxk kxk, 其中 k = 1 , 5 , 9 , 13 {k={1,5,9,13}} k=1,5,9,13, 步长均为 1 的 max-pooling的输出进行了 concate 操作, 从而 kernel size 为 k x k kxk kxk 大小的池化操作有效的提高了 backbone 的感受野;ASPP module 与 YOLOv3 改进的 SPP module 不同的是原来的池化操作改成了几个 3 x 3 3x3 3x3 kernel sizes, 空洞率 dialated ratio 为 k k k 以及步长均为1的空洞卷积;RFB module 则是使用几个空洞率为 k k k, 卷积核大小为 k x k kxk kxk 以及步长为1的空洞卷积来获取更加全面的空间范围特征。
注意力机制 attention modules:
- attention module 常常用在目标检测网络的设计中,其主要分为通道注意力 channel-wise attention 和 逐像素 point-wise attention, 二者的典型设计分别为 Squeeze-and Excitation (SE) 和 Spatial Attention Module (SAM)。SE module更适合于在移动设备使用,而 SAM 则在GPU不太影响推理时间。
特征融合 feature integration:
- 跨层特征链接 skip connection 以及 hyper-column 作为特征融合方法其将网络中的低维物理特征信息(图像中的边,角等信息)与高维语义信息(物体形状)进行了结合。而 SFAM,ASFF和BiFPN则属于将不同尺度特征金字塔进行融合。SFAM 在多尺度连接特征层添加了 SE module 来实现通道级别的加权 channel-wise level re-weigting; ASFF 使用 softmax 输出的特征概率图作为逐像素水平的加权,并将不同尺度的特征图进行加和; BiFPN 则使用多个输入的带权残差连接实现了逐尺度水平的加权,最后将不同尺度的特征图进行加和。
激活函数 activation function:
- 一个好的 activation function 可以使得网络模型中参数的梯度更加有效的传播,并且 activation function 的计算应该具有较小的计算代价。ReLU, LReLU, PReLU, ReLU6 ,以及 Scaled Exponential Linear Unit [SELU], Swish, hard-Swish 和 Mish等激活函数,ReLU 相对于传统的 t a n h tanh tanh 和 s i g m o i d sigmoid sigmoid 激活函数较好的解决了网络训练过程中梯度消失问题 gradient vanish problem,其作为激活函数被广泛应用于神经网络模型中。LReLU 和 PReLU 的设计目的是为了解决当ReLU 的输入小于0时,则对应激活后的输出梯度均为0这一问题;而 ReLU6 和 hard-Swish 激活函数则是为量化网络 quantization network()专门设计的激活函数。其中,Swish 和 Mish 激活函数是连续可微的(continuously differentiable)。
后处理 post-processing:
- 非极大值抑制后处理算法(Non-maximum suppression,NMS)通常被用于基于深度学习的目标检测任务中,NMS 可以过滤掉同一目标低置信度的预测框,仅保留高置信度的候选预测框。原方 NMS 方法没有考虑到图像的纹理信息,因此 Girshick 在 R-CNN 中添加了分类置信得分 classification confidence score 作为参考,根据 confidence score 得分的顺序, greedy NMS 依据 confidence score 由高到低执行。而 [soft NMS ] (以IoU score来计算)考虑到了物体检测中物体遮挡问题可能对 greedy NMS 的结果造成 confidence score 退化的问题。同样的, [DIoU NMS] 在 soft NMS 基础上以 DIoU 的方式在 BBoX 的筛选过程中添加了中心点坐标距离信息。由于以上的后处理方法都没有使用到图像的特征信息,因此这些后处理方法在 anchor-free 检测方法中都不再需要。
4. 实验
4.1 网络框架选择
- 作者将输入图像分辨率,卷积层数量,参数量( f i l t e r s i z e 2 ∗ f i l t e r s ∗ c h a n n e l / g r o u p s filter_size^2*filters*channel/groups filtersize2∗filters∗channel/groups),以及输出层卷积核数量(n_num)等作为选择网络框架的因素,旨在找到最优的平衡。作者通过大量研究表明在 ImageNet 数据集上 CSPResNext50 对于 classification 任务相对于 CSPDarknet53表现要优;在 MS COCO 数据集上,对于 detecting 任务CSPDarknet53要优于CSPResNext50网络。可以看出,对于classification 任务表现好的网络不一定在 detecting 任务上表现好。
- 具有较大感受野(有大量的3x3卷积)和参数量多的网络理应被选择为骨干网络。网络层数越多,较大的感受野可以覆盖较大的网络输入图像;高分辨率的输入图像有利于多个较小尺寸物体的检测;多参数量有利于网络获得更强的在一张图像中检测出不同尺寸大小的物体的能力。不同尺寸大小的感受野对网络的影响包括:感受野大小达到物体尺寸大小可以使得网络看到整个物体;感受野大小达到网络输出大小可以使得网络看到物体周围的纹理信息;当感受野大于网络输出尺寸时,网络增加了图像像素点与最后网络激活的连接。SCPResNeXt50,CSPDarknet53 以及 EfficientNet B3 在分类任务中的参数量如图 Fig.4 所示,可以看出 CSPDarknet53 经过衡量之后作为检测任务的骨干网络是最优的。
4.2 对比实验 BoF 以及 BoS 的选择
- Activation: ReLU, leaky-ReLU, Swish, or Mish;
- Bounding Box 回归损失函数:MSE, IoU, GIoU, CIoU, DIoU;
- Data augmentation 方法:CutOut, MixUp, CutMix;
- Regularization method: DropOut, DropPath, Spatial DropOut, or DropBlock;
- Normalization of the network activations (Mean and Variance): Batch Normalization (BN), Cross-GPU Batch Normalization (CGBN or SyncBN), Filter Response Normalization (FRN),以及 Cross-Iteration Batch Normalization (CBN) 等标准化方法;
- Skip-connections: 残差连接 Residual connections, 带全残差连接 Weighted residual connection, Multi-input weighted residual connections, 以及跨阶段局部连接 cross stage partial connections (CSP) 等。
4.3 增加的提高性能的方法
- 新的数据增强方法 Mosaic ; 数据增强技术自对抗训练 Self-Adversarial Training (SAT);
- 使用遗传算法 genetic algorithms 选择最优的超参数;
- modified SAM and PAN, 以及 Cross mini-Batch Normalization (CmBN)。
新的数据增强方法 Mosaic:旨在通过将 4 张不同训练数据图像混合为一张图像的方法从而将 4 种不同的图像上下文信息进行了混合,而 CutMix 方法仅使用了 2 张图像,该方法可使得网络的每一层在normalization 时,激活统计信息都来自于 4 张不同的图像,Mosaic 可以很大程度上在训练时减少 mini-batch size 的设置,从而使网络在普通较低显存的 GPU 上正常训练。
数据增强技术 Self-Adversarial Training (SAT) 方法:SAT 在网络训练的前馈 forward 以及反向传播 backward 阶段均参与。在 forward 阶段,神经网络对自己执行一种对抗攻击,通过改变原训练图像以制造假的图像上没有的物体对象进行训练,而在 backward 反向传播阶段,网络在该更改了的图像上进行正常的检测训练。
Cross mini-Batch 正则化(CmBN):CmBN 为 Cross-iteration batch normalization (CBN)的改进版,如下图 Fig.6。CmBN 只在单个 batch 内部的小批 mini-batch 之间收集数据的统计信息。
改进的 SAM 和 PAN:改进的 SAM 将原来的 SAM 中的 spatial-wise attention 改为了 point-wise attention;将原来 PAN 中的 addition 操作改为了 concatenation 操作。
4.4 details of YOLOv4
- BOF/BOS 对分类任务的影响。
-
从 Fig.10 作者在 CSPResNeXt 骨干网络的消融结果表以及 Fig.11 作者在 SCPDarknet-53 骨干网络的实验结果表可以看出,CutMix, Mosaic data augmentation, Class label smoothing 以及使用 Mish activation 激活函数取得了较好的实验效果。
-
BOF/BOS 对检测任务的影响。
-
从 Fig.12 消融实验表可以看出, 作者在以 MSE 损失函数为基准,使用了 M(Mosaic data augmentatioin,马赛克数据增强方法)后检测结果有较为突出的提高;在损失函数对比实验中 CIoU 取得了较好的结果;最终,在使用 S(Eliminate grid sensitivity,消除网格敏感性),M(Mosaic data augmentation, 马赛克数据增强方法),IT(IoU 阈值),GA(Genetic algorithm),OA(Optimized Anchors)以及 CIoU 损失函数取得了最好的实验结果。
- 从表 Fig.13 实验结果表中可以看出 modified SAM 可以使得 CSPResNeXt50-PANet-SPP 检测结果有所提高,取得最好的实验结果。
- 从表Fig.14 可以看出 CSPDarknet53-PANet-SPP(BoF-backbone+Mish)在对比实验中取得了最好的检测结果。
- 从表Fig.15可以看出,作者可以在使用小的mini-batch情况下,通过引入 BoF 以及 BoS 的方式来提高算法的检测结果,即 可以通过引入 BoF 以及 BoS 提高检测精度的方式,而不需要使用额外更大的 GPU显存来训练网络。
- 从 Fig.16 对比结果图中可以看出,YOLOv4 在速度与精度上均优于其它对比算法,且 YOLOv4 可以在任何低显存 (普通 GPU 设别)上取得较好的训练效果。
5. 总结
- 本文对 YOLOv4 做了简要的 review, 旨在学习目标检测算法的一些知识,能够对自己以后工作提供一些借鉴。作者通过大量验证性实验提出了一种通用的高速度高精度目标检测算法,从论文与其它经典目标检测算法对比实验就可以看出,YOLOv4 目标检测算法无论对研究人员或是工业界从业人员都将是很“亲民”的。另外很感慨作者从事研究工作的方法论,真可以说的上是思路严谨,实验充分呀。另外,该篇文章可以算的上是目标检测方向的一个很好的综述了。博客搬家