[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

YOLOv4: Optimal Speed and Accuracy of Object Detection

作者: Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao

论文地址: https://arxiv.org/abs/2004.10934

  1. ABSTRACT

There are a huge number of features which are said to improve Convolutional Neural Network (CNN) accuracy. Practical testing of combinations of such features on large datasets, and theoretical justification of the result, is required. Some features operate on certain models exclusively and for certain problems exclusively, or only for small-scale datasets; while some features, such as batch-normalization and residual-connections, are applicable to the majority of models, tasks, and datasets. We assume that such universal features include Weighted-Residual-Connections (WRC), Cross-Stage-Partial-connections (CSP), Cross mini-Batch Normalization (CmBN), Self-adversarial-training (SAT) and Mish-activation. We use new features: WRC, CSP, CmBN, SAT, Mish activation, Mosaic data augmentation, CmBN, DropBlock regularization, and CIoU loss, and combine some of them to achieve state-of-the-art results: 43.5% AP (65.7% AP50) for the MS COCO dataset at a realtime speed of ~65 FPS on Tesla V100. Source code is at this https URL.

据说有大量的特征可以提高卷积神经网络(CNN)的准确性。需要在大型数据集上对这些特征的组合进行实际测试,并对结果进行理论论证。有些特征只对某些模型和某些问题进行操作,或者只对小规模的数据集进行操作;而有些特征,如批量规范化(BN)和残差连接,适用于大多数模型、任务和数据集。我们假设这样的通用特征包括加权残差连接(WRC)、跨阶段部分连接(CSP)、跨小批归一化(CmBN)、自我对抗训练(SAT)和Mish-activation。我们使用新的特征。WRC、CSP、CmBN、SAT、Mish激活、Mosaic数据增强、CmBN、DropBlock正则化和CIoU损失,并结合其中的一些功能,取得最先进的结果。在Tesla V100上,MS COCO数据集的AP为43.5%(AP50为65.7%),实时速度为~65 FPS。源代码在这个https URL

  1. 引言

YOLOv4是2020年Alexey Bochkovskiy等人发表在CVPR上的一篇文章,并不是Darknet的原始作者Joseph Redmon发表的,但这个工作已经被Joseph Redmon大佬认可了。

如果将YOLOv4和原始的YOLOv3相比效果确实有很大的提升,但和Ultralytics版的YOLOv3 SPP相比提升确实不大。

但毕竟Ultralytics的YOLOv3 SPP以及YOLOv5都没有发表过正式的文章,所以不太好讲

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

图1:提出的YOLOv4和其他最先进的物体检测器的比较。YOLOv4的运行速度是EfficientDet的两倍,性能相当。将YOLOv3的AP和FPS分别提高了10%和12%。
这里是YOLOv4和原始的YOLOv3进行比较, 如果和YOLOv3-SPP相比的话, YOLOv4的提升其实并不明显.

; 3. YOLOv4中的亮点

如果之前有阅读过YOLOv4这篇论文的小伙伴,你会发现作者就是把当年所有的常用技术罗列了一遍,然后做了一堆消融实验。实验过程及结果写的还是很详细的,但 没能很好的突出重点

3.1 网络结构

  1. Backbone: CSPDarknet
  2. Neck: SPP, PAN
  3. Head: YOLOv3

相比之前的YOLOv3,改进了下Backbone,在Darknet53中引入了CSP模块(来自CSPNet)。在Neck部分,采用了SPP模块(Ultralytics版的YOLOv3 SPP就使用到了)以及PAN模块(来自PANet)。Head部分没变还是原来的YOLO检测头。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

; 3.2 优化策略

  • Eliminate grid sensitivity
  • Mosaic data augmentation
  • IoU threshold (match positive samples)
  • Optimized Anchors
  • CIoU

  • 网络结构 – CSPDarknet53

CSPDarknet53就是将CSP结构融入了Darknet53中。CSP结构是在CSPNet(Cross Stage Partial Network)论文中提出的,CSPNet作者说在目标检测任务中使用CSP结构有如下好处:

  • Strengthening learning ability of a CNN: 增强CNN的学习能力
  • Removing computational bottlenecks: 移除计算瓶颈
  • Reducing memory costs: 减少MACs

即减少网络的计算量以及对显存的占用,同时保证网络的能力不变或者 略微提升。CSP结构的思想参考原论文中绘制的CSPDenseNet,进入每个stage(一般在下采样后)先将数据划分成俩部分,如下图左图所示的Part1和Part2。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

但具体怎么划分呢,在CSPNet中是直接按照通道均分,但在YOLOv4网络中是通过 两个1×1的卷积层来实现的。在Part2后跟一堆Blocks然后在通过 1×1的卷积层(图中的Transition),接着将两个分支的信息在通道方向进行Concat拼接,最后再通过1×1的卷积层进一步融合(图中的Transition)。

transition: 英[trænˈzɪʃn] 美[trænˈzɪʃn] n. 过渡; 转变; 变革; 变迁; v.

总之,使用CSPDarknet不仅可以加快网络的推理速度,还可以减少MACs,并且还可以增加网络的学习能力

左边的图是CSPDenseNet(来源于CSPNet论文)。CSP结构会将网络分为两个部分。Part2分支首先会经过一系列的Block(这里是DenseBlock),最后经过Transition,得到输出后再与Part1上的输出进行Transition融合。

在YOLOv4中也使用到了CSP结构,如右图所示。其中 ConvBNMish是经典的卷积层,k1, s1表示的是1×1卷积。

接下来详细分析下CSPDarknet53网络的结构(以输入图片大小为 416 × 416 × 3 416 \times 416 \times 3 416 ×416 ×3 为例),图中:

  • k k k 代表卷积核的大小
  • s s s 代表步距
  • c c c 代表通过该模块输出的特征层channels

注意,CSPDarknet53 Backbone中所有的激活函数都是 Mish激活函数

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

; 5. SPP (Spatial Pyramid Pooling, 空间金字塔池化)

SPP就是将特征层分别通过一个池化核大小为 5×59×913×13的最大池化层,然后在通道方向进行concat拼接在做进一步融合,这样能够在一定程度上解决目标多尺度问题,如下图所示。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection
  • 所有分支的stride均为1
  • 不同分支通过设置相应padding大小,每个分支输出特征图的shape和输入都是一样的
  • 最后再将四个分支的特征图拼接起来(注意输入也是一个分支)
  • 输出大小与输入一样,但通道数扩大了4倍

SPP结构能够 在一定程度上解决多尺度的问题

  1. PAN (Path Aggregation Network, 路径聚合网络)

对应论文:Path Aggregation Network for Instance Segmentation

信息在神经网络中的传播方式是非常重要的。在本文中,我们提出了路径聚合网络(PANet),旨在提高基于提议的实例分割框架中的信息流。具体来说,我们通过自下而上的路径增强来提高整个特征层次的准确定位信号,从而缩短了低层和最顶层特征之间的信息路径。我们提出了自适应特征池,它将特征网格和所有的特征层联系起来,使每个特征层的有用信息直接传播到下面的提议子网络。为每个提议创建了一个捕捉不同观点的补充分支,以进一步改善掩码预测。这些改进很容易实现,只是有细微的额外计算开销。我们的PANet在COCO 2017挑战赛实例分割任务中获得了第一名,在没有大批量训练的情况下在物体检测任务中获得了第二名。它在MVD和Cityscapes上也是最先进的。代码可以在这个https URL上找到。

PAN(Path Aggregation Network)结构其实就是在FPN(从顶到底信息融合)的基础上加上了从底到顶的信息融合,如下图(b)所示。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

图1. 我们框架的说明。(a) FPN骨干网。(b) 自下而上的路径增强。© 自适应特征集合。(d) 箱形分支。(e) 全连接的融合。注意,为了简洁起见,我们省略了(a)和(b)中特征图的通道尺寸。

PAN各个部分的说明如下图:

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

但YOLOv4的PAN结构和原始论文的融合方式又略有差异,如下图所示。图(a)是原始论文中的融合方式,即特征层之间融合时是直接通过相加⊕ \oplus ⊕的方式进行融合的,但在YOLOv4中是通过在通道方向Concat拼接的方式进行融合的。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

; 7. YOLOv4整体网络结构

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

在CSPDarknet53中,激活函数都是Mish,但是在PAN结构中,激活函数为LeakyReLU
最后的 Conv2d k1, s1, c=(4 + 1 + n_cls) × 3只有一个1×1的卷积层,没有BN和激活函数

  1. 优化策略 – Eliminate grid sensitivity (消除grid网格的敏感程度问题)

在原来YOLOv3中,关于计算预测的 目标中心坐标计算公式是:

b x = σ ( t x ) + c x b y = σ ( t y ) + c y b_x = \sigma(t_x) + c_x \ b_y = \sigma(t_y) + c_y b x ​=σ(t x ​)+c x ​b y ​=σ(t y ​)+c y ​

其中:

  • t x t_x t x ​ 是网络预测的目标中心x x x 坐标偏移量(相对于网格的左上角)
  • t y t_y t y ​ 是网络预测的目标中心y y y 坐标偏移量(相对于网格的左上角)
  • c x c_x c x ​ 是对应网格左上角的x x x 坐标
  • c y c_y c y ​ 是对应网格左上角的y y y 坐标
  • σ \sigma σ 是sigmoid激活函数, 将预测的偏移量限制在0到1之间,即预测的中心点不会超出对应的Grid Cell区域

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

但在YOLOv4的论文中作者认为这样做不太合理,比如当真实目标中心点非常靠近网格的左上角点(偏移量 σ ( t x ) \sigma(t_x)σ(t x ​) 和 σ ( t y ) \sigma(t_y)σ(t y ​) 应该趋近与0)或者右下角点(偏移量 σ ( t x ) \sigma(t_x)σ(t x ​) 和 σ ( t y ) \sigma(t_y)σ(t y ​) 应该趋近与1)时,网络的预测值需要负无穷或者正无穷时才能取到,而这种很极端的值网络一般无法达到。为了解决这个问题,作者引入了一个大于1的缩放系数(s c a l e x y {\rm scale}_{xy}scale x y ​):

b x = ( s c a l e x y ⋅ σ ( t x ) − s c a l e x y − 1 2 ) + c x b y = ( s c a l e x y ⋅ σ ( t y ) − s c a l e x y − 1 2 ) + c y b_x = \left({\rm scale}{xy} \cdot \sigma(t_x) – \frac{{\rm scale}{xy} – 1}{2}\right) + c_x \ b_y = \left({\rm scale}{xy} \cdot \sigma(t_y) – \frac{{\rm scale}{xy} – 1}{2}\right) + c_y b x ​=(scale x y ​⋅σ(t x ​)−2 scale x y ​−1 ​)+c x ​b y ​=(scale x y ​⋅σ(t y ​)−2 scale x y ​−1 ​)+c y ​

通过引入这个系数, 网络的预测值能够很容易达到0或者1,现在比较新的实现方法包括YOLOv5都将 s c a l e x y {\rm scale}_{xy}scale x y ​ 设置2,即:

b x = ( 2 ⋅ σ ( t x ) − 0.5 ) + c x b y = ( 2 ⋅ σ ( t y ) − 0.5 ) + c y b_x = \left( 2 \cdot \sigma(t_x) – 0.5 \right) + c_x \ b_y = \left( 2 \cdot \sigma(t_y) – 0.5 \right) + c_y b x ​=(2 ⋅σ(t x ​)−0.5 )+c x ​b y ​=(2 ⋅σ(t y ​)−0.5 )+c y ​

下面是霹雳吧啦Wz绘制的 y = σ ( x ) y = \sigma(x)y =σ(x ) 对应sigma曲线和 y = 2 ⋅ σ ( x ) − 0.5 y = 2 \cdot \sigma(x) – 0.5 y =2 ⋅σ(x )−0.5 对应scale曲线。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

很明显通过引入缩放系数scale以后,x x x 在同样的区间内,y y y 的取值范围更大,或者说 y y y 对 x x x 更敏感了。并且偏移的范围由原来 ( 0 , 1 ) (0, 1)(0 ,1 ) 调整到了 ( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5 ,1.5 )。

b w , b h b_w, b_h b w ​,b h ​ 保持YOLOv3的策略不变。

; 9. 优化策略 – Mosaic data augmentation (马赛克数据增强)

之前我们也使用过很多图像增强算法,如:

  • 随机裁剪
  • 随机水平翻转
  • 亮度、色度、饱和度随机调整

在ultralytics的YOLOv3 SPP和YOLOv4中,Mosaic图像增强的实现就是将几张图片拼接在一起(默认使用4张图片)。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

Mosaic图像增强的优点:

  1. 增加数据的多样性
  2. 增加目标个数 —— 一张图片中可能目标的个数是很少的,Mosaic之后目标的个数增加了,有助于网络的训练
  3. 有利于BN统计均值和方差。
    BN能一次性统计多张图片的参数 —— Batch size越大,BN的统计值就越接近整个数据集的均值和方差(越准),效果就越好。但有时我们的设备性能受限,BS不能增大。如果将多张图片拼接在一起再输入进网络,变增加了输入网络的BS。比如:输入一张由四张图片拼接的图像,等效于并行输入四张原始图片(BS=4)。通过Mosaic图像增强算法,输入一张图片就包含了4张图片的均值和方差,所以对于BN统计均值和方差是有一定帮助的。

  4. 优化策略 – IoU threshold (正样本匹配策略)

在YOLOv3中针对 每一个GT都只分配了一个Anchor。但在YOLOv4包括之前讲过的YOLOv3 SPP以及YOLOv5中 一个GT可以同时分配给多个Anchor,它们是直接使用Anchor模板与GT Boxes进行粗略匹配,然后再定位到对应cell的对应Anchor。

首先回顾下之前在讲YOLOv3 SPP源码解析时提到的正样本匹配过程。流程大致如下图所示:比如说针对某个预测特征层采用如下三种Anchor模板 AT 1AT 2AT 3

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection
  1. 将每个GT Boxes与每个Anchor模板进行匹配(这里直接将GT和Anchor模板左上角对齐,然后计算IoU)
  2. 如果GT与某个Anchor模板的IoU大于给定的阈值,则将GT分配给该Anchor模板,如图中的 AT 2
  3. 将GT投影到对应预测特征层上,根据GT的中心点定位到对应cell(图中黑色的 × 表示cell的左上角)
  4. 则该cell对应的 AT2为正样本

但在YOLOv4以及YOLOv5中关于匹配正样本的方法又有些许不同。主要原因在于 Eliminate grid sensitivity中提到的缩放因子 s c a l e x y {\rm scale}_{xy}scale x y ​,通过缩放后网络预测中心点的偏移范围已经从原来的 ( 0 , 1 ) (0, 1)(0 ,1 ) 调整到了 ( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5 ,1.5 )。所以对于同一个GT Boxes可以分配给更多的Anchor,即正样本的数量更多了。如下图所示:

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection
  1. 将每个GT Boxes与每个Anchor模板进行匹配(这里直接将GT和Anchor模板左上角对齐,然后计算IoU,在YOLOv4中IoU的阈值设置的是 0.213
  2. 如果GT与某个Anchor模板的IoU大于给定的阈值,则将GT分配给该Anchor模板,如图中的 AT 2
  3. 将GT投影到对应预测特征层上,根据GT的中心点定位到对应cell(注意图中有三个对应的cell,后面会解释)
  4. 则这三个cell对应的AT2都为正样本

为什么图中的GT会定位到3个cell,这里简单做下解释(这里是通过分析ultralytics的YOLOv5源码得到的)。刚刚说了网络预测中心点的偏移范围已经调整到了 ( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5 ,1.5 ),所以按理说只要Grid Cell左上角点距离GT中心点在 ( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5 ,1.5 ) 范围内它们对应的Anchor都能回归到GT的位置处。

再回过头看看刚刚上面的例子,G T x c e n t e r , G T y c e n t e r {\rm GT^{center}_x, GT^{center}_y}G T x center ​,G T y center ​ 它们距离落入的Grid Cell左上角距离都小于0.5,所以该Grid Cell上方的Cell以及左侧的Cell都满足条件,即Cell左上角点距离GT中心在 ( − 0.5 , 1.5 ) (-0.5, 1.5)(−0.5 ,1.5 ) 范围内。这样会让正样本的数量得到大量的扩充。

但需要注意的是,YOLOv5源码中扩展Cell时只会往上、下、左、右 四个方向扩展,不会往左上、右上、左下、右下方向扩展。

下面又给出了一些根据 G T x c e n t e r , G T y c e n t e r {\rm GT^{center}_x, GT^{center}_y}G T x center ​,G T y center ​ 的位置扩展的一些Cell,其中 %1表示取余并保留小数部分。

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

; 11. 优化策略 – Optimizer Anchors (优化Anchor Templates)

在YOLOv3中的输入尺寸为 416 × 416 416 \times 416 416 ×416 使用anchor模板是通过聚类得到的,如下表所示:

目标类型Anchors模板小尺度
( 10 × 13 ) , ( 16 × 30 ) , ( 33 × 23 ) (10 \times 13), (16 \times 30), (33 \times 23)(10 ×13 ),(16 ×30 ),(33 ×23 )

中尺度
( 30 × 61 ) , ( 62 × 45 ) , ( 59 × 119 ) (30 \times 61), (62 \times 45), (59 \times 119)(30 ×61 ),(62 ×45 ),(59 ×119 )

大尺度
( 116 × 90 ) , ( 156 × 198 ) , ( 373 × 326 ) (116 \times 90), (156 \times 198), (373 \times 326)(116 ×90 ),(156 ×198 ),(373 ×326 )

在YOLOv4中作者针对 512 × 512 512 \times 512 512 ×512 尺度采用的anchor模板是:

目标类型Anchors模板小尺度
( 12 × 16 ) , ( 19 × 36 ) , ( 40 × 28 ) (12 \times 16), (19 \times 36), (40 \times 28)(12 ×16 ),(19 ×36 ),(40 ×28 )

中尺度
( 36 × 75 ) , ( 76 × 55 ) , ( 72 × 146 ) (36 \times 75), (76 \times 55), (72 \times 146)(36 ×75 ),(76 ×55 ),(72 ×146 )

大尺度
( 142 × 110 ) , ( 192 × 243 ) , ( 459 × 401 ) (142 \times 110), (192 \times 243), (459 \times 401)(142 ×110 ),(192 ×243 ),(459 ×401 )

根据不同的输入进行anchor模板的重新计算
在YOLOv5中,所采用的Anchor模板仍然是YOLOv3中的模板

  1. 优化策略 – CIoU (定位损失函数的改进)

在YOLOv3中定位损失采用的是MSE损失,但在YOLOv4中作者采用的是CIoU损失。

一个优秀的回归定位损失应该考虑三种几何参数:

  1. 重叠面积 —— IoU
  2. 中心点距离 ——ρ 2 ( b , b gt ) c 2 \frac{\rho^2(b, b^{\text{gt}})}{c^2}c 2 ρ2 (b ,b gt )​
  3. 长宽比 ——α υ α υ \alpha \upsilonαυαυαυ

12.1 CIoU计算公式 —— 非Loss计算公式

C I o U = I o U − ( ρ 2 ( b , b gt ) c 2 + α υ ) υ = 4 π 2 ( arctan ⁡ w gt h gt − arctan ⁡ w h ) 2 α = υ ( 1 − IoU ) + υ \mathrm{CIoU} = \mathrm{IoU} – (\frac{\rho^2(b, b^{\text{gt}})}{c^2} + \alpha \upsilon) \ \upsilon = \frac{4}{\pi^2}(\arctan \frac{w^{\text{gt}}}{h^{\text{gt}}} – \arctan \frac{w}{h})^2 \ \alpha = \frac{\upsilon}{(1 – \text{IoU}) + \upsilon}CIoU =IoU −(c 2 ρ2 (b ,b gt )​+αυ)υ=π2 4 ​(arctan h gt w gt ​−arctan h w ​)2 α=(1 −IoU )+υυ​

其中:

  • w , h w, h w ,h为矩形框的宽度和高度

这样CIoU将长宽比这个因素引入进来了 —— 相比DIoU考虑的更加全面。

12.2 CIoU Loss计算公式 —— Loss计算公式

L CIoU = 1 − CIoU L_{\text{CIoU}} = 1 – \text{CIoU}L CIoU ​=1 −CIoU

12.3 CIoU与其他IoU字段的损失函数效果对比

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

其中:
L CIoU ( D ) \mathcal{L}_{\text{CIoU}}(D)L CIoU ​(D )如果用DIoU替换IoU,那么CIoU还有进一步的提升。

虽然提升很小,但是使用DIoU替换CIoU是更加合理的,因为重叠的情况下,IoU和GIoU是没办法评价两个矩形框的重合关系(退化问题),而DIoU可以解决退化的问题。
所以现在有很多Post-process(后处理算法)中将IoU替换为了DIoU。

; 12.4 DIoU与CIoU的关系

这篇论文中,作者提出了两个IoU算法,其中:

  • DIoU的目的是替换IoU
  • CIoU的目的是替换IoU Loss

12.5 CIoU与GIoU检测效果示例

[纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

; 12.6 这几种IoU Loss该如何选择

有时候CIoU的效果可能不如GIoU和DIoU -> 深度学习

参考

  1. https://blog.csdn.net/qq_37541097/article/details/123229946?spm=1001.2014.3001.5502
  2. https://www.bilibili.com/video/BV1NF41147So?share_source=copy_pc

Original: https://blog.csdn.net/weixin_44878336/article/details/125981399
Author: Le0v1n
Title: [纯理论] YOLO v4: Optimal Speed and Accuracy of Object Detection

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/687750/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球