论文地址:
《YOLOv4: Optimal Speed and Accuracy of Object Detection》
读完论文的感受就像是一篇目标检测tricks综述,疯狂叠buff就完事了。
先来论文tricks的截图:
Backbones-Neck-Heads的tricks:
Activations、bbox回归、数据增强、正则化、归一化、跨域连接的tricks:
YOLOv4:
除了输入,一般one-stage
的目标检测算法通常由提取特征的backbone
、传输到检测网络的Neck
部分和负责检测的Head
部分。而two-stage
的算法通常还包括空间预测部分;
作为one-stage
的YOLO
网络主要由三个主要组件组成:
Backbone -在不同图像细粒度上聚合并形成图像特征的卷积神经网络;
Neck:一系列混合和组合图像特征的网络层,并将图像特征传递到预测层;
Head:对图像特征进行预测,生成边界框和并预测类别;
yolo v4作为yolo系列的网络改进,也是基于上述几个方面进行改进的,作者对目标检测的tricks进行了简单介绍,并改进了部分buff,形成了最终的yolo v4网络;
Input:
trick1:Mosaic数据增强
Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接:
Mosaic数据增强将4
张训练图像合并成一张进行训练的数据增强方法(而不是CutMix
中的2
张)。这增强了对正常背景(context
)之外的对象的检测,丰富检测物体的背景;此外,每个小批包含一个大的变化图像(4
倍),因此,减少了估计均值和方差的时需要大mini-batch
的要求,降低了训练成本;
trick2:自对抗训练(SAT)
SAT为一种新型数据增强方式。在第一阶段,神经网络改变原始图像而不是网络权值。通过这种方式,神经网络对其自身进行一种对抗式的攻击,改变原始图像,制造图像上没有目标的假象。在第二阶段,训练神经网络对修改后的图像进行正常的目标检测。
Self-Adversarial Training是在一定程度上抵抗对抗攻击的数据增强技术。CNN计算出Loss, 然后通过反向传播改变图片信息,形成图片上没有目标的假象,然后对修改后的图像进行正常的目标检测。需要注意的是在SAT的反向传播的过程中,是不需要改变网络权值的。 使用对抗生成可以改善学习的决策边界中的薄弱环节,提高模型的鲁棒性。因此这种数据增强方式被越来越多的对象检测框架运用。
BackBone:
trick1:CSPDarknet53
YOLOv3中特征提取网络使用的是Darknet53,YOLOv4借鉴了CSPNet,其全称是Cross Stage Partial Networks,即跨阶段局部网络;
CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸;CSPNet如下:
trick2:Mish激活函数
Mish是一个平滑的曲线,平滑的激活函数允许更好的信息深入神经网络,从而得到更好的准确性和泛化;在负值的时候并不是完全截断,允许比较小的负梯度流入。实验中,随着层深的增加,ReLU激活函数精度迅速下降,而Mish激活函数在训练稳定性、平均准确率(1%-2.8%)、峰值准确率(1.2% - 3.6%)等方面都有全面的提高;
主干网络为什么要用Mish,那当然是炼丹有效果啦。
trick3:Dropblock
传统的dropout对FC层效果更好,对conv层效果较差,因为卷积层通常是:卷积+激活+池化层,池化层本身就是对相邻单元起作用,而且即使随机丢弃,卷积层仍然可以从相邻的激活单元学习到相同的信息;因此,在全连接层上效果很好的Dropout在卷积层上效果并不好,输入的信息仍旧能够被送到下一层,导致网络过拟合;而DropBlock则是将在特征图上去掉一部分相邻的整片的区域(比如头和脚),网络就会去注重学习狗的别的部位的特征,来实现正确分类,从而表现出更好的泛化;
Neck
trick1:SPP(Spatial Pyramid Pooling Networks)
使用k={1×1,5×5,9×9,13×13}的最大池化的方式,再将不同尺度的特征图进行Concat操作,采用SPP模块的方式,比单纯的使用k×k最大池化的方式,极大地增加感受野,显著的分离了最重要的上下文特征;
trick2:PANet
(Path Aggregation Network
)
PANet
论文中融合的时候使用的方法是Add
,YOLOv4
算法将融合的方法由add改为Concate,这是改进的一种
特征图融合方式 ;
Prediction
使用yolo v3的head
other tricks:
trick1:类标签平滑
对于分类特别是多分类问题,常常把标签转换成one-hot向量类别标签,对于损失函数,我们需要用预测概率去拟合真实概率,而拟合one-hot的真实概率函数会带来两个问题:
对预测有100%的信心可能表明模型只是在记忆训练数据,而不是在进行学习:标签平滑处理调整预测的目标上限为一个较低的值,比如0.995。即对分类准确做了一点惩罚,让模型不可以分类的太准确,它将使用这个值而不是1.0来计算loss,这种方法缓解了过拟合;
标签平滑就是一定程度缩小label中min和max的差距,label平滑可以减小过拟合,所以,适当调整label,让两端的极值往中间凑,以增加泛化性能。
trick2:CmBN
传统BN(batch normalization)是仅利用当前迭代时刻信息进行归一化操作,而CBN(cross batch normalization)在计算当前时刻统计量时候会考虑前k个时刻的统计量,从而实现扩大batch size操作;同时CBN操作不会引入比较大的内存开销,训练速度不会影响很多,但是训练时候会慢一些;
CmBN是CBN的改进版本,把大batch内的4个mini batch当做一个整体,对外隔离;CBN在第t时刻,也会考虑前3个时刻的统计量进行汇合,而CmBN操作不会,不再滑动cross,其仅仅在mini batch内部进行汇合操作,保持BN一个batch更新一次可训练参数;
BN:无论每个batch被分割为多少个mini batch,其算法就是在每个mini batch前向传播后统计当前的BN数据(即每个神经元的期望和方差)并进行Normalization,BN数据与其他mini batch的数据无关;
CBN:每次iteration中的BN数据是其之前n次数据和当前数据的和(对非当前batch统计的数据进行了补偿再参与计算),用该累加值对当前的batch进行Normalization,好处在于每个batch可以设置较小的size;
CmBN:只在每个Batch内部使用CBN的方法,如果每个Batch被分割为一个mini batch,则其效果与BN一致;若分割为多个mini batch,则与CBN类似,只是把mini batch当作batch进行计算,其区别在于权重更新时间点不同,同一个batch内权重参数一样,因此计算不需要进行补偿;
trick3:学习率循环余弦衰减
学习率会先上升再下降,上升的时候使用线性上升,下降的时候模拟cos函数下降,循环执行多次;
trick4:改进的SAM(空间注意力机制)
空间注意力机制在深度学习
中被广泛采用,Convolutional Block Attention Module (CBAM) 表示卷积模块的注意力机制模块,是一种结合了空间(spatial)和通道(channel)的注意力机制模块;
在SAM
中,最大值池化和平均池化分别用于输入feature map
,创建两组feature map
。结果被输入到一个卷积层,接着是一个Sigmoid
函数来创建空间注意力;在YOLOv4
中,使用修改后的SAM
而不应用最大值池化和平均池化;
trick5:DIoU-NMS
nms主要用于预测框的筛选,常用的目标检测算法中,一般采用普通的nms的方式;而Yolo v4将其中计算IOU的部分替换成DIOU的方式:
DIOU被用作非最大值抑制(
NMS
)的一个因素,该方法在抑制冗余框的同时,采用IoU
和两个边界盒中心点之间的距离,这使得它在有遮挡的情况下更加健壮;
关于DIOU等loss的总结,这里可以看看大佬的博客:
关于SIoU的原理和代码实现(回顾IoU、GIoU、DIoU、CIoU)
trick6:遗传算法优化超参
遗传算法如何模拟大自然的进化?
还有一些tricks这里没有全部提到,大家可以看看下面的参考;
小结
YOLO-v4算法是在原有YOLO目标检测架构的基础上,采用了之前CNN领域中最优秀的优化策略,从数据处理、主干网络、网络训练、激活函数、损失函数等各个方面都有着不同程度的优化;
作者把训练的方法分成了两类:
Bag of freebies:只改变训练策略或者只增加训练成本,比如数据增强;
Bag of specials:插件模块和后处理方法,它们仅仅增加一点推理成本,但是可以极大地提升目标检测的精度;
参考文献
通道注意力
目标检测loss
深度学习中的规范化
目标检测算法YOLOv4详解
YOLO V4 — 网络结构和损失函数解析
推荐一个大佬的代码实现(keras、tf2与torch):
Bubbliiiing:https://blog.csdn.net/weixin_44791964/category_9408229.html?spm=1001.2014.3001.5482
仅为学习记录,侵删!