Yolov4整理

YOLOv4对深度学习中一些常用Tricks进行了大量的测试,最终选择了这些有用的Tricks:WRC、CSP、CmBN、SAT、 Mish activation、Mosaic data augmentation、CmBN、DropBlock regularization 和 CIoU loss。

基础知识:

CBL:由Conv+Bn+Leaky_relu激活函数三者组成。
CBM: Yolov4网络结构中的最小组件,由Conv+Bn+Mish激活函数三者组成。
DBL:代码中的Darknetconv2d_BN_Leaky,是yolo_v3的基本组件。就是卷积+BN+Leaky relu。
SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合.
CSP:CSPNet全称是Cross Stage Partial Networks,也就是跨阶段局部网络,CSPNet解决了其他大型卷积神经网络框架Backbone中网络优化的梯度信息重复问题,将梯度的变化从头到尾地集成到特征图中,因此减少了模型的参数量和FLOPS数值,既保证了推理速度和准确率,又减小了模型尺寸。
CSPX:借鉴CSPNet网络结构,由三个卷积层和X个Res unint模块Concate组成。
Res unit:则是一个经典的Resnet残差模块,一个输入分别经过2个DBL,和直连,再进行相加,这一经典的连接目前也大量应用到了各种网络中,让网络可以构建的更深,包括后面的YOLOV4也是在此基础上的衍生。
RESn:先经过一个DBL再+N个Res unit单元组成
Concat:张量拼接,维度会扩充,和Yolov3中的解释一样,对应于cfg文件中的route操作。
Add:张量相加,不会扩充维度,对应于cfg文件中的shortcut操作。

 Yolo v4的结构图和Yolo v3相比,多了CSP结构,PAN结构。
蓝色框中为网络中常用的几个模块:
CBM:Yolo v4网络结构中的最小组件,其由Conv(卷积)+ BN + Mish激活函数组成。
CBL:Yolo v4网络结构中的最小组件,其由Conv(卷积)+ BN + Leaky relu激活函数组成。
Res unit:残差组件,借鉴ResNet网络中的残差结构,让网络可以构建的更深。
CSPX:借鉴CSPNet网络结构,由三个CBM卷积层和X个Res unint模块Concat组成。
SPP:采用1×1,5×5,9×9,13×13的最大池化的方式,进行多尺度融合

张量拼接与张量相加
Concat:张量拼接,会扩充两个张量的维度,例如26×26×256和26×26×512两个张量拼接,结果是26×26×768。
Add:张量相加,张量直接相加,不会扩充维度,例如104×104×128和104×104×128相加,结果还是104×104×128。

Backbone中卷积层的数量:
每个CSPX中包含3+2×X个卷积层,因此整个主干网络Backbone中一共包含2+(3+2×1)+2+(3+2×2)+2+(3+2×8)+2+(3+2×8)+2+(3+2×4)+1=72。

1.2 YOLO V4的创新点

为了便于分析,将Yolov4的整体结构拆分成四大板块:

(1)输入端:这里指的创新主要是训练时对输入端的改进,主要包括Mosaic数据增强、cmBN、SAT自对抗训练。
(2)BackBone主干网络:将各种新的方式结合起来,包括:CSPDarknet53、Mish激活函数、Dropblock。
(3)Neck:目标检测网络在BackBone和最后的输出层之间往往会插入一些层,比如Yolov4中的SPP模块、FPN+PAN结构
(4)Prediction:输出层的锚框机制和Yolov3相同,主要改进的是训练时的损失函数CIOU_Loss,以及预测框筛选的nms变为DIOU_nms

1.2.1 输入端的创新

(1)Mosaic数据增强
Yolov4中使用的Mosaic是参考2019年底提出的CutMix数据增强的方式,但CutMix只使用了两张图片进行拼接,而Mosaic数据增强则采用了4张图片,随机缩放、随机裁剪、随机排布的方式进行拼接。根据论文所说其拥有一个巨大的优点是**丰富检测物体的背景!**且在BN计算的时候一下子会计算四张图片的数据!

1.2.1 BackBone的创新

(1)CSPDarknet53
CSPDarknet53是在Yolov3主干网络Darknet53的基础上,借鉴2019年CSPNet的经验,产生的Backbone结构,其中包含了5个CSP模块。

 每个CSP模块前面的卷积核的大小都是3×3,步长为2,因此可以起到下采样的作用。
因为Backbone有5个CSP模块,若输入图像是608608,则特征图变化的规律是:608->304->152->76->38->19
经过5次CSP模块后得到19
19大小的特征图。

完整的网络结构图如下:

 YOLOv4的网络结构是由 CSPDarknet53、 SPP、 PANet、YOLOv3头部等组成,下面对各部分逐一讲解:

Yolov4在主干网络Backbone采用CSPDarknet53网络结构,主要有三个方面的优点:
优点一:增强CNN的学习能力,使得在轻量化的同时保持准确性。
优点二:降低计算瓶颈
优点三:降低内存成本 

(2)Mish激活函数
Mish激活函数是2019年下半年提出的激活函数,和leaky_relu激活函数的图形对比如下:

Yolov4的Backbone中都使用了Mish激活函数,而后面的网络则还是使用Leaky_relu函数。

Yolov4作者实验测试时,使用CSPDarknet53网络在ImageNet数据集上做图像分类任务,发现使用了Mish激活函数的TOP-1和TOP-5的精度比没有使用时都略高一些。
因此在设计Yolov4目标检测任务时,主干网络Backbone还是使用Mish激活函数。

(3)Dropblock
Yolov4中使用的Dropblock,其实和常见网络中的Dropout功能类似,也是缓解过拟合的一种正则化方式。
传统的dropout对FC层效果更好,对conv层效果较差,原因可能是conv层的特征单元是空间相关的,使用dropout随机丢弃一些特征,网络仍旧能从相邻区域获取信息,因而输入的信息仍旧能够被送到下一层,导致网络过拟合。而DropBlock则是将在特征图上连续的信息一起丢弃
下图是一个简单示例。(a)为输入图像,狗的头、脚等区域具有相关性。(b)为以dropout的方式随机丢弃信息,此时能从临近区域获取相关信息(带x的为丢弃信息的mask)。c为DropBlock的方式,将一定区域内的特征全部丢弃。

Dropblock算法框架 

DropBlock有两个参数:block_size(drop块的大小),γ(伯努利分布的参数) 

猜你喜欢

转载自blog.csdn.net/wzhrsh/article/details/110533635