首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

YOLO v4:速度效果双提升

YOLO V4算法分析

1.1 网络结构图

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模块后得到1919大小的特征图。

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

2~4:若处于推理模式,则不丢弃任何特征。

5:生成mask M,每个点均服从参数为γ的伯努利分布(伯努利分布,随机变量x以概率γ和1-γ取1和0)。需要注意的是,只有mask的绿色有效区域内的点服从该分布,如下图a所示,这样确保步骤6不会处理边缘区域。

6:对于M中为0的点,以该点为中心,创建一个长宽均为block_size的矩形,该矩形内所有值均置0。如上图b所示。

7:将mask应用于特征图上:A=AM

8 对特征进行归一化:A=Acount(M)/count_ones(M)。此处count指M的像素数(即特征图的宽*高),count_ones指M中值为1的像素数。

具体细节

block_size:所有特征图的block_size均相同,文中为7时大部分情况下最好。

γ:并未直接设置γ,而是从keep_prob来推断γ,这两者关系如下(feat_size为特征图的大小):

\gamma =\frac^}}\frac^}}{{{(feat\_size-block\_size+1)}^}}γ=block_size21−keep_prob(feat_size−block_size+1)2feat_size2

keep_prob:固定keep_prob时DropBlock效果不好,而在训练初期使用过小的keep_prob会又会影响学习到的参数。因而随着训练的进行DropBlock将keep_prob从1线性降低到目标值(如0.9)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210226A02EW200?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券