一、YOLOv4
1.1 改进(相较于YOLOv3)
(1)主干特征由DarkNet53改为CSPDarkNet53,主要在残差块进行了改进,引入了大残差块;
(2)加入了SPP和PANNnet网络,用来增加图像的特征提取量,反复提取特征,并且SPP网络也可以增大感受野。
(3)在激活函数方面:从Yolov3的Leaky_relu函数,在Yolov4使用新的Mish激活函数(Mish激活函数是一种自正则的非单调神经激活函数,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化。)。

1.2 YOLOv4网络结构及组件
1.2.1 基本组件
1、CBM:Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
2、CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
3、Res unit:借鉴Resnet网络中的残差结构,让网络可以构建的更深。
4、CSPX:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。
5、SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合。
1.2.2 网络结构
YOLOv4 网络的结构可分为四部分:输入端 、主干网络(Backbone) --主干特征提取网络、颈部网络(Neck) --加强特征提取网络和头部网络(Head)--用来预测(Prediction)

1.3 YOLOv4的网络结构的改进
1.3.1 输入端改进
1.3.1.1 Mosaic数据增强
Yolov4中使用的Mosaic是参考2CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。

为什么要进行Mosaic数据增强呢?
解决在整体的数据集中,小、中、大目标的占比并不均衡。-在平时项目训练时,小目标的AP一般比中目标和大目标低很多。而Coco数据集中也包含大量的小目标,但比较麻烦的是小目标的分布并不均匀。针对这种状况,Yolov4的作者采用了Mosaic数据增强的方式,使大、中、小目标分配更加均匀。
进行Mosaic数据增强的优点:
丰富数据集 : 随机使用4张图像,随机缩放后随机拼接,增加很多小目标,大大增加了数据多样性。
增强模型鲁棒性 : 混合四张具有不同语义信息的图片,可以让模型检测超出常规语境的目标。
加强批归一化(Batch Normalization)的效果: 当模型设置 BN 操作后,训练时会尽可能增大批样本总量(BatchSize),因为 BN 原理为计算每一个特征层的均值和方差,如果批样本总量越大,那么 BN 计算的均值和方差就越接近于整个数据集的均值和方差,效果越好。
有利于提升小目标检测性能: Mosaic 数据增强图像由四张原始图像拼接而成,这样每张图像会有更大概率包含小目标,从而提升了模型的检测能力。
1.3.1.2 Self-Adversarial Training--SAT自对抗训练
自对抗训练也是一种新的数据增强方法,可以一定程度上抵抗对抗攻击。其包括两个阶段,每个阶段进行一次前向传播和一次反向传播。
第一阶段,CNN通过反向传播改变图片信息,而不是改变网络权值。通过这种方式,CNN可以进行对抗性攻击,改变原始图像,造成图像上没有目标的假象。
第二阶段,对修改后的图像进行正常的目标检测。
通过引入噪音点进行数据增强:

1.3.1.3 cmBN
1、 BN: 无论每个batch被分割为多少个mini batch,其算法就是在每个mini batch前向传播后统计当前的BN数据(即每个神经元的期望和方差)并进行Nomalization,BN数据与其他mini batch的数据无关。
2、CBN: 每次iteration中的BN数据是其之前n次数据和当前数据的和(对非当前batch统计的数据进行了补偿再参与计算),用该累加值对当前的batch进行Nomalization。好处在于每个batch可以设置较小的size。
3、CmBN: 只在每个Batch内部使用CBN的方法,若每个Batch被分割为一个mini batch,则其效果与BN一致;若分割为多个mini batch,则与CBN类似,只是把mini batch当作batch进行计算,其区别在于权重更新时间点不同,同一个batch内权重参数一样,因此计算不需要进行补偿。
1.3.1.4 Label Smoothing类标签平滑
原因:对预测有100%的信心可能表明模型是在记忆数据,而不是在学习。如果训练样本中会出现少量的错误样本,而模型过于相信训练样本,在训练过程中调整参数极力去逼近样本,这就导致了这些错误样本的负面影响变大。
具体做法:标签平滑调整预测的目标上限为一个较低的值,比如0.9。它将使用这个值而不是1.0来计算损失。这样就缓解了过度拟合。说白了,这个平滑就是一定程度缩小label中min和max的差距,label平滑可以减小过拟合。所以,适当调整label,让两端的极值往中间凑凑,可以增加泛化性能。

1.3.2 主干网络创新(Backbone)
1.3.2.1 CSPDarknet53
CSPDarknet53是在Yolov3主干网络Darknet53的基础上,借鉴2019年CSPNet的经验,产生的Backbone结构,其中包含了5个CSP模块。
1.为什么采用CSP模块?
CSPNet全称是Cross Stage Paritial Network,主要从网络结构设计的角度解决推理中从计算量很大的问题。CSPNet的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。因此采用CSP模块先将基础层的特征映射划分为两部分,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率。因此Yolov4在主干网络Backbone采用CSPDarknet53网络结构
2.使用CSP模块优点
1.增强CNN的学习能力,使得在轻量化的同时保持准确性。
2.:降低计算瓶颈
3.:降低内存成本
1.3.2.2 Mish激活函数
图像如下:

公式为:

1.为什么采用 Mish激活函数 ?
作者实验测试时,使用CSPDarknet53 网络在ImageNet数据集 上做图像分类任务,发现使用了Mish激活函数的TOP-1 和TOP-5的精度比没有使用时都略高一些。
2.采用 Mish激活函数 优点:
(1)从图中可以看出该激活函数,在负值时并不是完全截断,而允许比较小的负梯度流入从而保证了信息的流动
(2)Mish激活函数无边界,这让他避免了饱和(有下界,无上界)且每一点连续平滑且非单调性,从而使得梯度下降更好。
1.3.2.3 Dropblock
DropBlock是谷歌在2018年提出的一种用于卷积神经网络(CNN)的正则化方法。这是一种用于解决过拟合问题的技术,在训练神经网络时非常有用。过拟合问题是指在训练集上表现很好,但在测试集上表现不佳的问题。 相比于传统的Dropout技术,DropBlock不是随机屏蔽掉一部分特征(注意是对特征图进行屏蔽),而是随机屏蔽掉多个部分连续的区域。这种方法有助于减少神经网络中的冗余连接,从而提高模型的泛化能力。
DropBlock技术在称为块的相邻相关区域中丢弃特征。Dropblock方法的引入是为了克服Dropout随机丢弃特征的主要缺点,Dropout主要作用在全连接层,而Dropblock可以作用在任何卷积层之上。这样既可以实现生成更简单模型的目的,又可以在每次训练迭代中引入学习部分网络权值的概念,对权值矩阵进行补偿,从而减少过拟合。
之前的Dropout是随机选择点(b),现在随机选择一个区域:

1.3.3 颈部网络(neck)的创新
1.3.3.1 SPP模块
SPP-Net是何凯明《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》中提出的一种网络结构,可以不用考虑图像大小,输出图像固定长度,并且在图像变形情况下表现稳定。这种方法在速度上比R-CNN快24-102倍,并且在不同的数据集上面得到验证。
SPP Net的第一个贡献就是在最后一个卷积层后,接入了金字塔池化层,保证传到下一层全连接层的输入固定。在普通的CNN机构中,输入图像的尺寸往往是固定的(比如224*224像素),输出则是一个固定维数的向量。SPP Net在普通的CNN结构中加入了ROI池化层(ROI Pooling),使得网络的输入图像可以是任意尺寸的,输出则不变,同样是一个固定维数的向量。

1.3.3.2 FPN+PAN
Yolov4中Neck这部分除了使用FPN外,还在此基础上使用了PAN结构。和Yolov3的FPN层不同,Yolov4在FPN层的后面还添加了一个自底向上的特征金字塔,其中包含两个PAN结构。
FPN+PAN借鉴的是18年CVPR的PANet,PAN其具体结构由反复提升特征的意思。当时主要应用于图像分割领域,但Alexey将其拆分应用到Yolov4中,进一步提高特征提取的能力。

上图为原始的PANet的结构,可以看出来其具有一个非常重要的特点就是特征的反复提取 。
在(a)里面是传统的特征金字塔结构,在完成特征金字塔从下到上的特征提取后 ,还需要实现(b)中从上到下的特征提取。
而在YOLOV4当中,其主要是在三个有效特征层上使用了PANet结构。

1.3.3.3 CBAM
CBAM(Convolutional Block Attention Module)是一种针对深度神经网络的注意力机制模块,用于提高模型在分类、检测和分割等任务中的表现。它结合了通道注意力和空间注意力,几乎可以嵌入任何CNN网络中,在稍微增加一点计算量和参数量的情况下,可以大大增强模型性能。

1.3.4 非极大值抑制改进
1.3.4.1 SOFT-NMS
原因:传统的NMS存在一定的问题:如果一个物体在另一个物体重叠区域出现,即当两个目标框接近时,分数更低的框就会因为与之重叠面积过大而被删掉,从而导致对该物体的检测失败并降低了算法的平均检测。
SOFT-NMS:
将当前检测框得分乘以一个权重函数,该函数会衰减与最高得分检测框M有重叠的相邻检测框的分数,越是与M框高度重叠的检测框,其得分衰减越严重,为此选择高斯函数为权重函数,从而修改其删除检测框的规则。(δ通常取0.3)。

1.2.4.2 DIoU-NMS
DIOU-NMS和原始的NMS不同,DIoU-NMS不仅考虑了IoU的值,还考虑了两个Box中心点之间的距离,使用了新的公式决定一个Box是否被删除:
其中M是表示置信度最高的候选框,Bi表示遍历各个框和高置信度的重合面积。

其中,RDIoU是两个Box中心点之间的距离,用下面的公式表示:


1.3.5 损失函数的改进(CIOU)
