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块的大小),γ(伯努利分布的参数) 

 

 

  • 4
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
YOLOv4是一种高效的目标检测算法,其训练数据主要包括图像和标签信息。 YOLOv4的训练数据准备首先需要收集大量的图像数据,这些图像要包含目标物体的各种形态和不同环境下的表现。同时,需要对这些图像进行标注,标注的方式一般是使用矩形框来框定出目标物体的位置,并标注出类别信息。 在收集和标注完图像数据后,需要对图像数据进行预处理。预处理的步骤包括图像的尺寸调整、归一化(将像素值调整到0-1之间)等。这一步是为了在训练过程中提高算法的效率和准确性。 接下来,需要将预处理后的图像数据和对应的标签信息整理成适合训练的格式,一般是将它们转化为特定的数据结构,比如TFRecord或COCO格式。 训练数据准备完成后,就可以开始训练YOLOv4模型了。训练过程中,会通过反向传播算法不断调整模型的参数,使其能够更准确地对目标物体进行检测。为了提高训练效果,可以采用一些技巧,比如数据增强(如随机裁剪、旋转、缩放等)来增加数据多样性,以及使用预训练模型来提供初始参数。 在训练过程中,需要设置一些超参数,如学习率、迭代次数等。这些超参数的设置需要根据实际情况进行调整,以达到最佳的训练效果。 最后,训练完成后可以对模型进行评估,评估指标包括精确率、召回率和平均精确率等。如果评估结果满足需求,则可以将训练好的模型用于目标检测任务。如果不满足需求,可以调整相关参数,重新进行训练。 总而言之,YOLOv4的数据训练过程包括数据收集和标注、数据预处理、数据整理、模型训练、超参数调整和模型评估等步骤,通过这些步骤可以获得一个准确有效的目标检测模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值