目标检测篇--YOLOv5原理篇

Yolov5算法详解

1. YOLO v5算法介绍

Yolov5是一种单阶段目标检测算法,主要算法思路如下:

  • 输入端:Mosaic增强、自适应锚框计算、自适应图片缩放
  • 基准网络:Focus结构与CSP结构(C3结构)
  • Neck网络:采用FPN+PAN结构
  • Head输出层:分类+定位于一体
  • 目标框回归
  • 正负样本匹配
  • 损失函数:分类损失+置信度损失+定位损失
    在这里插入图片描述

2输入端

输入端主要有三个数据处理:Mosaic数据增强、自适应锚框计算、自适应图片缩放

2.1 Mosaic数据增强

方法:Mosaic数据增强是在Cutmix数据增强的基础上改进而来。CutMix仅仅利用了两张图片拼接,Mosaic数据增强采用了4张图片,并且按照随机缩放、随机裁剪和随机排布的方式进行拼接。
优势:丰富数据集的同时极大的提升网络的训练速度,并且可以降低模型的内存需求。
在这里插入图片描述

2.2 自适应锚框

针对不同的数据集,都需要设定特定长宽的锚点框。在网络训练阶段,模型在初始锚点框的基础上输出对应地预测框,计算与GT框之间的差距,并执行反向更新操作,从而更新网络的参数,因此初始点锚框的设置也非常关键。
在v3,v4中,训练不同的数据集,都是通过单独的运行程度来获得初始锚点锚框。Yolov5将此功能嵌入到代码,每次训练时,根据数据集的名称自适应的计算出最优的锚点框。网络中对应的命令行为:parser.add_argument(‘–noautoanchor’, action=‘store_ true’, help=‘disable autoanchor check’),如果需要打开,只需要在训练代码时增加–noautoanch or选项即可。

2.3 自适应图片缩放

YOLO系列算法中常用的图片尺寸包括416*416, 608*608大小。由于实际使用的图片很多图片的长宽比例不同,因此在缩放填充后,两端都会有黑边,如果填充过多,则会存在大量信息冗余,从而影响整个算法的推理速度。

在yolov5中采用了一个新的方法,在图片中填充最少的黑边。
步骤1-根据原始图片与输入端网络图大小计算缩放比例
在这里插入图片描述
步骤2-使用最小的缩放比例对原始图片进行缩放
在这里插入图片描述
步骤3-计算黑边填充数值
在这里插入图片描述

3 Backbone

3.1 Focus结构

原理:Focus结构是图片进入Backbone前,对图片进行切片操作。具体操作是在一张图片中每隔一个像素拿到一个值,将图像缩小四倍(长宽各缩小两倍),这样一张图像就可以得到四张图像。例如,images大学为6086083,对图像进行slice操作后得到4*(3304304).
作用:降低参数量(后续理解透了还会再更新)
在这里插入图片描述
在这里插入图片描述

3.2 CSP结构

原理:通过分割梯度流,使梯度流经过不同的网络路径传播。然后对使用Concat再将不同的梯度流进行汇合。从下图中看到X0被分成两部分,一部分通过一个卷积操作,另一个部分直接被复制,然后通过concat操作对这两部分内容进行组合。
目的:为了保证模型识别精度不会下降的情况下,减少计算量,提高推理速度。
在这里插入图片描述

3.2 C3结构(V5.0中C3代替了CSP)

在新版的YOLOv5中,使用C3代替CSP结构。C3模块是Yolov5Backbone结构中一个重要的组成部分,其主要作用是增加网络的深度和感受野,提高特征提取的能力。C3模块的组成如下所示:
可以看到,在C3模块主干中包括3个Conv块,一个Bottleneck模块。
在这里插入图片描述
Conv模块中封装了三个模块包括:卷积Conv2d(stride=2),BN层和SiLU层。
在这里插入图片描述
在这里插入图片描述
可以看到BottleNeck模块是一个残差连接结构。先通过一个11卷积对通道数减半,然后,使用一个33结构将通道数量加倍,并获取特征,然后将特征直接输出。
在这里插入图片描述
C3模块利用了CSP结构的思想,即将特征图分为两部分处理。一部分直接通过卷积层进行前向传播,另一部分则通过一个更为复杂的结构后再与前者相加。
但是采用了与CSP不同的修正单元,可以看到,相较于BottleneckCSP模块,经过残差输出后的Conv模块被去掉了,Concat后的标准卷积模块中的激活函数也由LeakyRelu变成了SiLU。
在这里插入图片描述
在这里插入图片描述

3.4 SPPF模块(V6.0中新增)

原理:SPPF(空间金字塔),首先通过一个标准卷积将输入通道减半,然后分别做kernel-size为5,9,13的maxpooling(对于不同的核大小,padding是自适应的)。然后,对三次池化的结果与未进行池化的结果进行concat,最终channel数是原来的2倍。
作用:SPPF层通过在不同的空间尺度上应用池化操作来提取特征,这些池化操作被并行地应用,并且它们的输出被拼接起来,以保持空间信息的多样性。
在这里插入图片描述

4 Neck

YOLOv5Neck中采用了FPN+PAN结构。
FPN:是自顶向下结构,将高层特征通过上采样和低层特征做融合得到进行预测的特征图。
PAN:是自底向上结构。这样结合操作,FPN层自顶向下传达强语义特征,而特征金字塔则自底向上传达强定位特征,两两联手,从不同的主干层对不同的检测层进行参数聚合。
在这里插入图片描述
下面截图中插入的文本有错:网络输出的三种尺度分别是:76*76,38*38,19*19
在这里插入图片描述

5 目标框回归

在训练过程中,采用中心点+宽高,即(x,y w,h)的表示形式。
在这里插入图片描述
YOLOv4在目标边界框回归过程中,当预测中心点位于左上红点时, t x , t y t_x, t_y tx,ty趋于∞才能靠近目标框中心点(蓝色点)。并且宽高的预测不稳定(指数函数的表示),很容易导致梯度失控。
在这里插入图片描述
YOLOv5对此进行了改进,对于中心点预测,作者放宽了值域的上下限,使 t x , t y t_x, t_y tx,ty预测变得更加稳定、快速。

同时也修改了预测宽高的函数,将预测框与目标匹配的倍数限制在4倍以内。
在这里插入图片描述
在这里插入图片描述

6 正负样本匹配

YOLOv5的每个检测层上的每个网格都预设9个大小、宽高比都不同预设框。但不是每个网格中都存在目标,也并不是每个Anchor都适合用来回归当前目标,因此**需要对这些anchor先验框进行过滤筛选。**筛选过程中包括根据宽高比筛选和跨网格扩充。

宽高比筛选Anchors的大致过程如下:

  • 对于每一个Ground Truth(人工标注的真实框),分别计算它与9种不同anchor的宽与宽的比值(w1/w2, w2/w1)和高与高的比值(h1/h2, h2/h1)。
  • 找到Ground Truth与anchor的宽比(w1/w2, w2/w1)和高比(h1/h2, h2/h1)中的最大值,作为该Ground Truth和anchor的比值。
  • 若Ground Truth和anchor的比值小于设定的比值阈值(超参数中默认为anchor_t = 4.0),那么这个anchor就负责预测这个Ground Truth,即这个anchor所回归得到的预测框就被称为正样本,剩余所有的预测框都是负样本。

在这里插入图片描述
筛选出来的框,大多数都是负样本,为了扩充正样本,YOLOv5会考虑上下左右四个格子Anchors, 靠近GT中心点的两个格子也会参与边界框的回归和预测,即:

  • 如果点(xg,yg)在格子的左上角,则取左边、上方的两个格子;
  • 如果点(xg,yg)在格子的右上角,则取右边、上方的两个格子;
  • 如果点(xg,yg)在格子的左下角,则取左边、下方的两个格子;
  • 如果点(xg,yg)在格子的右下角,则取右边、上下方的两个格子

在这里插入图片描述

7 损失函数

yolov5的损失函数包括:分类损失+定位损失+置信度损失。
先看总损失: L = A ∗ L c l a s s + B ∗ L r e c t + C ∗ L o b j L=A*L_{class}+B*L_{rect}+C*L_{obj} L=ALclass+BLrect+CLobj
由于YOLOv5是在三个尺度的特征图上进行检测,所以需要对每个尺度的特征图都要求损失,最后的总损失是每个特征图的分类损失+定位损失+置信度损失。
在这里插入图片描述
分类损失: 通常对于分类任务,输出的标签往往是互斥的。此时会用到softmax函数将N个类别的预测值总和转换为总和为1的概率值,并分类为概率最高的一类。
y i = S o f t m a x ( x i ) = e x i ∑ n = 1 N e x n y_i = Softmax(x_i)=\frac{e^{x_i}}{\sum_{n=1}^Ne^{x_n}} yi=Softmax(xi)=n=1Nexnexi
L c l a s s = − ∑ n = 1 N y n ∗ l o g ( y n ) L_{class}=-\sum_{n=1}^Ny^*_nlog(y_n) Lclass=n=1Nynlog(yn)
在v3之后,考虑到一个目标可能同时属于多个类别(输出“概率”总和>1),在v3之后,则对每个类别做二元交叉熵损失,并对预测概率 y i y_i yi进行sigmoid映射。
y i = S i g m o i d ( x i ) = 1 1 + e − x i y_i = Sigmoid(x_i)=\frac{1}{1+e^{-x_i}} yi=Sigmoid(xi)=1+exi1
L c l a s s = − ∑ n = 1 N y i ∗ l o g ( y i ) + ( 1 − y i ) l o g ( 1 − y i ) L_{class} = -\sum_{n=1}^Ny^*_ilog(y_i)+(1-y_i)log(1-y_i) Lclass=n=1Nyilog(yi)+(1yi)log(1yi)
定位损失(预测框与GT框之间的误差):用于衡量预测框与真实框之间的匹配程度。在YOLOv5中定位损失采用了CIOU损失,即:
C I O U = I O U − α . D C I − β . V A CIOU=IOU-\alpha . D_{CI}-\beta . V_A CIOU=IOUα.DCIβ.VA
V A = 4 π ( a r c t a n w g t h g t − a r c t a n w h ) 2 V_A=\frac{4}{\pi}(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w}{h})^2 VA=π4(arctanhgtwgtarctanhw)2
其中,IOU表示预测框与真实框的交并比; D C I D_{CI} DCI表示预测框与真实框之间的中心点之间的距离,用于衡量预测框与真实框中心点的偏移; V A V_A VA表示预测框与真实框比例的插值归一化。
置信度损失:关注的是“对象的存在性”和“定位准确性”。
在这里插入图片描述

  1. 每个框预测置信度是网络直接得到的
  2. 每个框的置信度标签是由预测框与真实框的CIOU得到

参考资料

yolov5-v6.0详细解读
YOLOv5网络详解

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值