感知算法工程师面试===目标检测===YOLO V4(改)
创始人
2024-03-21 05:12:39
0

感觉V3 到V4,YOLO的整体架构并没有重大的改进,只是增加了很多的trick

先展示一下V4的整体网络结构
在这里插入图片描述
↑\uparrow↑这个是对比V3的

如图可见,V4的结构依然是主干网络+金字塔+头部检测器,所有的改进都是为了更好更快的检测目标。

在这里插入图片描述
↑\uparrow↑这个是另一种风格的
在这里插入图片描述

↑\uparrow↑这个卷积块的角度看

然后,是V4的改进:

  • 主干网络:DarkNet-53 改为CSPDarkNet-53
  • 激活函数:LeakyReLU改为Mish
  • 金字塔:FPN改为PAN
  • SPP
  • DropBlock正则化
  • 数据增强:CutMix、马赛克(Mosaic)、
  • 自对抗训练
  • 标签平滑
  • 学习率:余弦退火衰减
  • 损失函数:IoU 改为 CIoU

首先,V5在训练之前加入了mosaic数据增强方法,提高小目标的检测性能,放上美女图。。。
在这里插入图片描述
mosaic数据增强方法仅仅是使用,并没有在进一步优化。这种方法在BN层计算特征的时候,会同时计算四张图片的数据,极大丰富了检测物体的背景。

1)CSPDarkNet作为主干网络,相比于DarkNet,虽然增加了大量卷积模块,但网络的推算算法却没有降低。首先,CSP全称Cross Stage Partial Network,翻译过来是跨阶段部分网络,意味着这种网络结构中存在一种可以跨越很多层传递特征的结构。

在这里插入图片描述
如上图所示,这里的Res指带的不是单个的残差块,而是YOLO中的堆叠残差结构
在这里插入图片描述
这种结构,会有大量的卷积运算,并且为了更好的提高模型对图像特征的提取能力,CSPDarknet-53还参考了DenseNet的密集链接,进一步加大了计算量也提高了性能。于是,为了提高速度,通过CSP结构,这种将Feature作为大残差边的方式,将输入Feature的拆成两份,一部分直接跨层传递,极大的减少了计算量。

这么做的合理性在于卷积网络中的feature map往往具有很大的冗余性,不同通道的特征图可能包含的信息是相似的。因此,无需处理全部的channel,只需处理一部分即可。

2)Mish激活函数
YOLOv4还将LeakyReLU全部换成了Mish
在这里插入图片描述
Mish是一种平滑的,非单调的激活函数,可以定义为:

Mish(x) = x・tanh(softmax(x)) ;其中softmax= ln(1 + e ^ x)

相比于LeakyReLU,Mish在(-oo,0)这个区间可以更好的保持较小的负值,使大多数深层神经元能得到有效更新,不过这个函数的计算时间要高于LeakyReLU,但是在性能上表现出了比他们都要好的效果,应用在CSPDarknet中确实提升了大幅性能,并且感谢CSP的跨层结构,Mish函数对整体的计算量负担不大。

3)SPP池化
SPP池化主要作用在于不增加下采样数量的条件下,扩大YOLO检测器的感受野。比如,一张512X512的图像,原始V3中13X13特征图对应的感受野为512x512,而加入了SPP后提高到725x725。它借鉴了SPPnet的结构,但也不是完全相同.具体结构如下图
在这里插入图片描述
这个结构由何凯明提出,用于物体的多分类任务。由于COCO数据集中,输入图像的尺寸总是改变,而分类网络,在网络最后一定有全连接层,这就需要所有图像转换到相同的尺寸。但这会扭曲原始的图像中的物体,因此为了很好的解决这样的问题, SPPNet使得任意大小的特征图都能够转换成固定大小的特征向量,送入全连接层。

但这个思路是针对于分类任务的,对于进行目标检测任务的YOLO v4而言,不需要在SPP这里设定全连接层进行分类,而是选取了SPP中,池化(下采样)部分来提取不同感受野的特征。
在这里插入图片描述
如图,通过3个并行池化模块,分别对特征图按照不同步长进行计算。这样,网络可以增大感受野,使模型更改好的检测大目标和小目标。
在这里插入图片描述

4)PANet
YOLOv4的第二处改进便是参考了PANet(Path Aggregation Network)论文的结构。原先的YOLOv3仅使用了top-down结构的FPN,而PAN是在此基础上加了bottom-up的结构。
在这里插入图片描述
假设输入图像为416X416像素,则C5是末端13X13的特征图,C4是26X26的,C3是52X52的特征图。可见,第一步,通过将特征上下融合,使得C3和C4特征图包含了更多的深层语义信息;第二步,再次下上融合,使得C5和C4特征图包含了更多的浅层纹理信息,提升了网络的检测性能。

5) 损失函数
Loss这里改动有3个,一个是定位,微调了中心点(x,y)的回归公式,另一个是置信度的判定由IoU改进为CIoU,再有一个就是Multi anchor策略

1))
在这里插入图片描述

在YOLOv3中,边界框的中心点回归公式如下:

cx=gridx+σ(tx)c_x =grid_x+\sigma(t_x)cx​=gridx​+σ(tx​)
cy=gridy+σ(ty)c_y =grid_y+\sigma(t_y)cy​=gridy​+σ(ty​)

简洁明了,但是这里存在一个隐患,那就是当物体的中心点恰好落在网格的右边界时,那么就需要σ(tx)\sigma(t_x)σ(tx​)输出为1。
但对于sigmoid函数,当且仅当输入为正无穷的时候,输出才是1,但显然让网络学一个这种正无穷是不现实的。同样,当物体中的中心恰好落在网格的左边界时,就需要 σ(tx)\sigma(t_x)σ(tx​)输出为0,而sigmoid函数只有输入负无穷时,才会得到0的输出,这显然也是不合适的。这一问题就被称为“grid sensitive”,问题的核心就在于目标的中心点可能会落在网格的边界上。

为了解决这一问题,YOLOv4便在σ(tx)\sigma(t_x)σ(tx​)函数前面乘以一个大于1的系数:

当中心点处在右边界的时候,s∗σ(tx)s*\sigma(t_x)s∗σ(tx​)输出为1,那么仅需σ(tx)\sigma(t_x)σ(tx​)输出为1/s<11/s<11/s<1,从而避免正无穷的问题。但是,这种做法并不会解决s∗σ(tx)s*\sigma(t_x)s∗σ(tx​)输出0的问题,仍旧有负无穷的问题存在。于是,增加了常数项(s−1)/2(s-1)/2(s−1)/2解决了中心点落到左边界的问题。

cx=gridx+(s∗σ(tx)+(s−1)/2)c_x =grid_x+(s*\sigma(t_x)+(s-1)/2)cx​=gridx​+(s∗σ(tx​)+(s−1)/2)
cy=gridy+(s∗σ(ty)+(s−1)/2)c_y =grid_y+(s*\sigma(t_y)+(s-1)/2)cy​=gridy​+(s∗σ(ty​)+(s−1)/2)

在这里插入图片描述
2))CIoU

IOU Loss:考虑检测框和目标框重叠面积。
GIOU Loss:在IOU的基础上,解决边界框不重合时的问题。
DIOU Loss:在IOU的基础上,考虑边界框中心距离的信息。
CIOU Loss:在DIOU的基础上,考虑边界框宽高比的尺度信息。

因此,CIoU可以说考虑到了各种情况,嗯。。。很完美,可以说V4,使用CIoU提高了网络对于正样本的学习数量,并优化了对小目标的检测能力。
在这里插入图片描述
注意一点
V4的损失函数中,LosslocLoss_{loc}Lossloc​的计算方式不同于V3直接使用xywh计算,而是使用了CIoU来计算,也就是说需要通过xywh反算出整个包围框之后在于真实的标签框计算CIoU,然后带入LosslocLoss_{loc}Lossloc​
在这里插入图片描述
在这里插入图片描述

3))Multi anchor策略
V3中正样本的判定机制是:当预测中心点与存在真正有物体中心点,处于同一网格中时,进行IoU的计算,并且当IoU>0.7时的最大的那个(三个检测器同时算的,每个网络2个框,共6个,是6选1)才算正样本,并为了更进一步提高正样本的权重,V3通过加入系数λcoord\lambda_{coord}λcoord​,这种固定的方式强行提高,比如当网格中有真实物体,这里的λcoord=5.0\lambda_{coord}=5.0λcoord​=5.0,负样本的λcoord=0.5\lambda_{coord}=0.5λcoord​=0.5。

这种匹配机制导致正样本过少,产生正负样本不均匀的问题。毕竟网格比较少,尤其是小目标的情况。于是,V4将单个网格的范围从[0,1]图上绿色框阔大到了[-0.5,1.5]红色框,这样即便预测框的中心点处于另一个网格中,也会计算IoU,提高了正样本的数量,并且设定一个阈值,只要预测框的iou大于这个阈值则判定为正样本(三个检测器同时算每个网络2个框,共6个,有可能6个全要)。
在这里插入图片描述

6)标签平滑
为了防止分类过拟合,使用了标签平滑Label Smoothing的技巧。
在这里插入图片描述
在分类任务中,某个样本的one-hot(二进制串)标签为

[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0]

二分类,认为样本为正样本,标注为1,过于绝对,容易过拟合;好比一个人,过于自信,就是自负,一旦自负,迟早判断失误!将上述的(0, 1)定义为(0.05, 0.95),这样标签变得平滑,有种将离散变量转为连续变量的意思,类似于“像素插值”。

在训练过程中,模型习惯于对其预测结果“过于自信”,这会增加过拟合风险。另外,数据集中可能包含标注错误的数据,所以模型在训练过程中需要对标签持有怀疑态度。为此,可以在训练中引入一种标签平滑方法,将hard标签转换为soft标签(即1 → 1 - 平滑因子),来降低模型对标签的信心。

在这里插入图片描述

相关内容

热门资讯

汽车油箱结构是什么(汽车油箱结... 本篇文章极速百科给大家谈谈汽车油箱结构是什么,以及汽车油箱结构原理图解对应的知识点,希望对各位有所帮...
美国2年期国债收益率上涨15个... 原标题:美国2年期国债收益率上涨15个基点 美国2年期国债收益率上涨15个基...
嵌入式 ADC使用手册完整版 ... 嵌入式 ADC使用手册完整版 (188977万字)💜&#...
重大消息战皇大厅开挂是真的吗... 您好:战皇大厅这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...
盘点十款牵手跑胡子为什么一直... 您好:牵手跑胡子这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游...
senator香烟多少一盒(s... 今天给各位分享senator香烟多少一盒的知识,其中也会对sevebstars香烟进行解释,如果能碰...
终于懂了新荣耀斗牛真的有挂吗... 您好:新荣耀斗牛这款游戏可以开挂,确实是有挂的,需要了解加客服微信8435338】很多玩家在这款游戏...
盘点十款明星麻将到底有没有挂... 您好:明星麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【5848499】很多玩家在这款游戏...
总结文章“新道游棋牌有透视挂吗... 您好:新道游棋牌这款游戏可以开挂,确实是有挂的,需要了解加客服微信【7682267】很多玩家在这款游...
终于懂了手机麻将到底有没有挂... 您好:手机麻将这款游戏可以开挂,确实是有挂的,需要了解加客服微信【8435338】很多玩家在这款游戏...