当前位置: 首页 > web >正文

5月19日复盘-YOLOV4

5月19日复盘

七、YOLOV4

​ 从YOLOV4开始就换作者了,不过原作者对YOLOV4是完全认可的。自诩为Optimal Speed and Accuracy of Object Detection(目标检测的最佳速度和最佳精度)。

论文地址:

​ https://arxiv.org/pdf/2004.10934.pdf

1. V4贡献

  • YOLOv4 主要涉及的改进内容如下:
    • 输入端改进:CutMix、Mosaic 数据增强
    • 主干网络:CSPDarknet53 为 backbone、 SPP 额外添加模块
    • 颈部网络:SPP(Spatial Pyramid Pooling)、PANet(Path Aggregation Network)
    • 检测头:YOLOv3(基于 anchor 的)
    • 损失函数:CIOU(Complete Intersection over Union )损失
    • 激活函数:Mish 激活函数
    • 样本匹配:增加了匹配样本的数量
  • YOLOV4 贡献主要内容如下:
    • 算力要求低,单 GPU 就能训练好
    • 从数据层面(数据增强等)和网络设计层面(网络结构)来进行改善
    • 融合各种神经网络论文的先进思想

2. 数据增强策略

2.1 调优手段汇总

2.1.1 Bag of freebies

​ 在离线训练阶段为了提升精度而广泛使用的调优手段,不会增加推断时间:Mosaic数据增强、标签平滑、自对抗训练、损失函数CIOU、标准化方法CmBN

2.1.2 Bag of specials

​ 在推断过程中增加些许成本但能换来较大精度提升的技巧:Mish激活函数、CSP结构。

2.2 数据增强

2.2.1 CutMix

数据增强:补充的知识点

  • 增强局部特征的学习:通过将不同图像的局部特征混合在一起,模型可以学习到更多的局部信息
  • 提高训练效率:高价值信息增多,提升训练效率,优化算法性能
  • 防止模型过拟合:通过引入更多样的训练样本,CutMix 能够提高模型的泛化能力,减少过拟合现象
  • 数据稳定:由于采用填充的形式,不会有图像混合后不自然的情形,能够提升模型分类的表现
2.2.2 Mosaic
  • Mosaic 数据增强则利用了 4 张图片,对 4 张图片进行拼接,每一张图片都有其对应的框,将 4 张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框,然后将这样一张新的图片传入到神经网络当中去学习,这极大丰富了检测物体的背景

  • Mosaic数据增强的具体步骤如下:

    • 首先随机取 4 张图片
    • 分别对 4 张图片进行基本的数据增强操作,并分别粘贴至与最终输出图像大小相等掩模的对应位置
    • 进行图片的组合和框的组合
  • 注意:

    • 基本的数据增强包括:翻转、缩放以及色域变化(明亮度、饱和度、色调)等操作
  • 图示:先对单张图片做调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转等基本数据增强,后把 4 张图片拼接在一起

优点:

  • 增加数据多样性:通过将多张图像混合在一起,生成更多不同的训练样本,丰富检测物体的背景
  • 提升模型的鲁棒性:模型在训练过程中见过更多样的图像组合,能够更好地应对不同场景下的目标检测任务
  • 减少过拟合:通过增加数据的多样性,有助于防止模型过拟合,提升泛化能力
  • 减少训练算力:由于一次性可以计算4张图片,所以Batch Size可以不用很大,也为YOLOv4在一张GPU卡上完成训练奠定了数据基础

2.3 自我对抗训练

SAT,Self-adversarial-training,自我对抗训练,通过引入噪音点来增加训练难度。

2.4 DropBlock

  • DropBlock是一种用于卷积神经网络的正则化技术,旨在防止过拟合。它通过在训练过程中随机丢弃特征图中的连续区域(块)来增加模型的泛化能力。与传统的Dropout不同,Dropout随机丢弃独立的神经元,而DropBlock丢弃的是特征图中的连续相邻区域,这样可以更有效地移除某些语义信息,从而提高正则化的效果
  • 图示:图(b) 表示 Dropout 、图(c)表示 DropBlock

2.5 标签平滑

  • 标签平滑(Label Smoothing)是一种正则化技术,用于减少模型在训练过程中对训练数据的过拟合,提高模型的泛化能力。标签平滑的基本思想是通过在训练过程中对标签进行平滑处理,减少模型对单一类别的过度自信,从而使得模型更加鲁棒

  • 独热编码(One-Hot Encoding)是一种将分类变量转换为二进制向量的编码方法,通过 One-Hot 编码,可以将分类变量转换为数值形式,假设有一个分类变量,它有 𝐾 个不同的类别。One-Hot 编码会将每个类别映射到一个长度为 𝐾 的二进制向量,其中只有一个位置为 1,其余位置为 0。这个位置对应于该类别的索引

  • 标签平滑的工作原理:

    • 在传统的分类任务中,标签通常是以 one-hot 编码的形式给出的。例如,对于一个三分类任务,标签可能是 [1, 0, 0][0, 1, 0][0, 0, 1]。标签平滑通过将这些硬标签平滑为软标签,使得每个类别的概率不再是 0 或 1,而是一个介于 0 和 1 之间的值
    • 公式:
      • y t r u e y_{true} ytrue是原始的 one-hot 编码标签
      • y s m o o t h e d y_{smoothed} ysmoothed是平滑后的标签
      • ϵ \epsilon ϵ是平滑系数,通常是一个较小的正数(例如 0.1)
      • K 是类别的总数

    y s m o o t h e d = ( 1 − ϵ ) ⋅ y t r u e + ϵ K y_{smoothed}=(1-\epsilon)·y_{true}+\frac{\epsilon}{K} ysmoothed=(1ϵ)ytrue+Kϵ

案例:假设我们有一个三分类任务,原始的 one-hot 编码标签是 [1, 0, 0],平滑系数 𝜖=0.1,类别总数 𝐾=3。那么平滑后的标签计算如下:
y 1 = ( 1 − 0.1 ) ∗ [ 1 , 0 , 0 ] + 0.1 3 = [ 0.9 , 0 , 0 ] + 0.0333 = [ 0.9333 , 0.0333 , 0.0333 ] \begin{aligned} &y_{1}=(1-0.1)*[1,0,0]+\frac{0.1}{3}=[0.9,0,0]+0.0333=[0.9333,0.0333,0.0333] \\ \end{aligned} y1=(10.1)[1,0,0]+30.1=[0.9,0,0]+0.0333=[0.9333,0.0333,0.0333]

3. 损失函数优化

3.1 IOU损失

3.1.1 损失函数定义

IOU损失定义如下:交集越大,损失越小,解决了大目标对小目标的影响
L I o U = 1 − ∣ B ∩ B g t ∣ ∣ B ∪ B g t ∣ \mathcal{L}_{IoU}=1-\frac{|B\cap B^{gt}|}{|B\cup B^{gt}|} LIoU=1BBgtBBgt

3.1.2 缺陷

不适合的情况:

情况1:两个框没有相交,loU=0,不能反映两者的距离大小,无法进行学习训练。

情况2和3: IOU无法精确的反映两者的重合度效果,比如这里的IOU相等但是效果是有差异的。

3.2 GIOU损失

GIOU是对IOU的改进版本,Generalized loU。
GIoU loss = 1 − GIoU = 1 − ∣ IoU ∣ + ∣ 差集 ∣ ∣ C ∣ \text{GIoU loss}=1-\text{GIoU}=1-|\text{IoU}|+\frac{|\text{差集}|}{|\text{C}|} GIoU loss=1GIoU=1IoU+C差集

差集 = C − ∣ B ∪ B g t ∣ , C 是两个框的最小闭包区域面积 差集=C-|B\cup B^{gt}|,C是两个框的最小闭包区域面积 差集=CBBgt,C是两个框的最小闭包区域面积

参考下图:

C:/Users/24857/AppData/Roaming/Typora/typora-user-images/image-20250519165342928.png

3.2.1 优点

与loU只关注重叠区域不同,GloU不仅关注重叠区域,还关注其他的非重合区域,能更好的反映两者的重合度。

3.2.2 缺点

无法区分相对位置关系

3.3 DIOU损失

Distance loU
DIoU loss = 1 − DIoU = 1 − ∣ IoU ∣ + ρ 2 ( B , B g t ) l c 2 \text{DIoU loss}=1-\text{DIoU}=1-|\text{IoU}|+\frac{\rho^2(B,B^{gt})}{l_c^2} DIoU loss=1DIoU=1IoU+lc2ρ2(B,Bgt)

ρ ( B , B g t ) 表示检测框中心点和真实框中点之间的欧式距离, l c 表示最小外接矩形的对角 线距离。 \begin{aligned}&\rho(B,B^{gt})\text{表示检测框中心点和真实框中点之间的欧式距离,}l_c\text{表示最小外接矩形的对角}\\&\text{线距离。}\end{aligned} ρ(B,Bgt)表示检测框中心点和真实框中点之间的欧式距离,lc表示最小外接矩形的对角线距离。

3.3.1 DIOU效果

3.3.2 优点

直接最小化两个目标框的距离,所以收敛快,并可以在已有的NMS方法中替代IoU

3.3.3 缺点

没有考虑不同长宽比的情况

3.4 CIOU

Complete lOU,在DIOU基础上把目标框长宽比的相似程度考虑进去,利用惩罚因子进行约束。

损失函数考虑三个几何因素:重叠面积,中心点距离,长宽比
C I o U l o s s = 1 − C I o U = 1 − ( ∣ I o U ∣ − ρ 2 ( B , B g t ) l c 2 − v 2 ( 1 − I o U ) + v ) v = 4 π 2 ( a r c t a n w g t h g t − a r c t a n w p h p ) 2 CIoUloss=1-CIoU=1-(|IoU|-\frac{\rho^2(B,B^{gt})}{l_c^2}-\frac{v^2}{(1-IoU)+v})\\v=\frac4{\pi^2}\left(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w^p}{h^p}\right)^2 CIoUloss=1CIoU=1(IoUlc2ρ2(B,Bgt)(1IoU)+vv2)v=π24(arctanhgtwgtarctanhpwp)2

v 是衡量长宽比一致性的参数, w g t , h g t 为真实框的宽高, w p , h p 为检测框的宽高 v\text{是衡量长宽比一致性的参数,}w^{gt},h^{gt}\text{为真实框的宽高,}w^p,h^p\text{为检测框的宽高} v是衡量长宽比一致性的参数,wgt,hgt为真实框的宽高,wp,hp为检测框的宽高

动态权重机制
惩罚项的分母 (1−IoU) + v 是一个动态调整因子:

  • 当 IoU 较小时(如目标框与预测框重叠度低),1−IoU1−IoU 较大,分母增大,导致惩罚项权重降低。这是为了防止在重叠不足时长宽比差异主导梯度更新。
  • 当 IoU 较大时,分母趋近于 vv,此时长宽比差异的惩罚更显著,促使模型精细调整形状。

通过将 v 2 {v}^{2} v2 除以动态权重,该项实现了对长宽比差异的自适应惩罚,使模型在优化过程中同时关注长宽比一致性(形状匹配)。

4. CmBN

4.1 BN

​ 使用BN的原因其实就是因为深度神经网络在做非线性变换前的激活函数输入值(y=wx+b,x为输入值),随着网络深度的加深或者在训练过程中,其分布逐渐发生偏移或者变动,一般是整体分布逐渐往非线性函数(激活函数)的取值区间的上下限两端靠近(对于sigmod函数来说,它的输入值,即y是大的负值或正值),这样会导致反向传播时,低层神经网络的梯度消失,这就是训练深度神经网络收敛越来越慢的原因。

​ 而BN就是通过一定的归一化方法,把每层神经网络任意神经元的输入值的分布强行拉回到均值为0方差为1的标准正态分布,其实就把越来越偏的分布拉回来,这样使得激活函数的输入值落在激活函数比较敏感的区域,这样输入的小变化就会导致损失函数较大的变化,即让梯度变大,避免梯度消失问题产生,而且梯度变大意味着学习收敛速度快,能大大加快训练速度。

​ 总之一句话:对于每个隐含层的神经元,把逐渐向激活函数取值区间极限饱和区(大的负值或正值)靠近的输入分布强制拉回均值为0方差为1的标准正态分布,使得激活函数的输入值落在比较敏感的区域,以此避免梯度消失或爆炸的问题这也解释了为啥BN通常在激活函数之前的原因。


4.2 CBN

​ 在文中,作者针对BN在小批量的问题,利用多个最近迭代的样本的来提高数据估计的质量,但是由于在迭代过程中网络权重不断变化,来自不同迭代的网络激活不能相互比较,因此作者提出一种基于泰勒多项式的技术来补偿迭代之间网络权值变化,从而有效利用之前迭代的样本来改进批量归一化,这种方法就是交叉迭代的批量归一化(CBN)。

​ 说简单点,CBN就是一种通过补偿迭代之间网络权值的变化而有效的利用之前的迭代样本来改进批量归一化的方法

在这里插入图片描述

(2)Cross-Iteration Batch Normalization

C:/Users/24857/Desktop/华清培训/yolo/media/fcb540a918cbd65b10fa8f60eb21fc58.jpeg

CBN的工作方式如上图所示:将最近k-1次迭代的统计量与当前迭代t统计量相加,得到CBN中的使用统计量,然后在计算出当前层的BN参数,计算方式如下

C:/Users/24857/Desktop/华清培训/yolo/media/affa4a41-447f-4ad9-b4e2-105be9abff05.png

​ 这里需要注意的是,在有效统计时,上述式子是一直都会满足,但是利用泰勒展开估算就不一定能满足条件,所以上述式中使用了max函数来保证这一点。

​ 最后,CBN的更新方式与BN一样,但是对于CBN,用于计算当前迭代统计量的有效样本数是原始BN的k倍。

CBN优缺点

​ (1)优点

​ a. 提高了BN的稳定性,CBN通过累积统计信息来减少批次内样本数量的影响,从而提高了归一化的准确性和稳定性;

​ b. 加速训练收敛:由于CBN利用了之前迭代的统计信息,可以更快地收敛到较好的模型;

​ c. 减少了对大批量训练的依赖:传统BN在小批量下训练时可能不稳定,需要较大的批量大小才能获得较好的效果。而CBN通过使用最近的迭代信息,可以在小批量训练时获得更好的性能。

​ (2)缺点

​ a. 内存占用较大:由于每个迭代需要计算数据、偏导数等,所以会导致计算开销和内存占用增加;

​ b. 训练速度较慢:由于每个迭代都需要累积统计最近的信息和进行归一化,所有CBN的训练速度相对较慢。

4.3 CmBN

​ CmBN(Cross mini-Batch Normalization)是CBN的修改版。CBN主要用来解决在Batch-Size较小时,BN的效果不佳问题。CBN连续利用多个迭代的数据来变相扩大Batch-Size从而改进模型的效果(每次迭代时计算包括本次迭代的三个迭代后统一计算整体BN)。而CmBN是独立利用多个mini-batch内的数据进行BN操作。(每四个迭代后统一计算一次整体BN

5. Mish 激活函数

Mish 激活函数是一种自带正则的非单调激活函数,平滑的激活函数能够让模型获得更好的非线性;从而得到更好的准确性和泛化,Mish 激活函数的数学表达式为:
M i s h ( x ) = x ∗ t a n h ( l n ( 1 + e x ) ) Mish(x)=x*tanh(ln(1+e^x)) Mish(x)=xtanh(ln(1+ex))

  • 图像:
    • Mish 函数和 ReLU 一样都是无正向边界的,可以避免梯度饱和

在这里插入图片描述

  • 使用了Mish激活函数的 TOP-1 和 TOP-5 的精度比没有使用时都略高一些:

6. 网络结构

YOLOV4采用了新的主干结构CSPdarknet-53

6.1 CSPNet

Cross Stage Partial Network:跨阶段局部网络。

下图展示了基于ResNe(X)t的CSPResNe(X)t模块:

6.2 YOLOV4的CSP

这是V4的CSP结构:

6.3 SPPNet

空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet),多尺度池化。

为了更好满足不同输入大小,训练的时候要改变输入数据的大小,SPP其实就是用最大池化来满足最终输入特征尺寸一致即可。

YOLOv4 借鉴了 SPP 的思想,在主干网络尾部使用了 SPP 结构实现了局部特征和全局特征的融合,扩大了感受野,丰富最终特征图的表达能力,进而提高 mAP.

6.4 PANet

  • 路径聚合网络(Path Aggregation Network,PAN),在 FPN 的基础之上进一步优化而来,用于在不同尺度的特征图之间进行信息传递和融合,以获取更好的多尺度特征表示
  • 在 YOLOv4 中,PANet(Path Aggregation Network)是一种用于特征金字塔网络(Feature Pyramid Network, FPN)的改进版本,旨在增强特征的多尺度融合能力,从而提高目标检测的精度。PANet 通过自底向上的路径增强机制,进一步加强了特征图的跨尺度信息传递,这对于检测不同大小的目标尤其重要
  • YOLOV4 中的 PANet 主要由两部分组成:
    • 自顶向下的路径(FPN):这部分与传统的 FPN 类似,从高层(语义信息丰富但空间信息较少)到低层(空间信息丰富但语义信息较少)逐步上采样,并与低层特征图进行融合,生成多尺度的特征图,作用就是负责将深层的强语义特征传递到底层特征图中,增强低层特征图的语义表达能力,有助于检测大目标
    • 自底向上的路径(PAN):这是 PANet 相对于传统 FPN 的一个重要改进,它从低层到高层逐步下采样,并与高层特征图进行融合,进一步增强特征图的跨尺度信息传递,作用就是负责将浅层的精确定位特征传递到高层特征图中,增强高层特征图的定位能力,有助于检测小目标
  • 改进:YOLOv4在原始PAN结构的基础上进行了改进。原本的PANet网络的PAN结构中,特征层之间融合时是直接通过加法(addition)的方式进行融合的,而YOLOv4中则采用在通道方向上进行拼接(Concat)的方式进行融合

6.5 YOLOV4整体结构

整体结构如下:

7. 检测头策略

YOLOv4 的检测头策略在 YOLOv3 的基础上进行了多方面的改进,包括 Anchor-based 检测、FPN+PAN 的多尺度特征融合、CIoU 损失优化、Mish 激活函数的引入等。这些改进使得 YOLOv4 在保持高速的同时,进一步提高了目标检测的精度和鲁棒性。

  • 使用yolov3的检测头
  • 将1个anchor负责一个GroundTruth,变为多个anchor负责一个GT,只要anchor的loU大于阈值就可以负责GT
  • 相当于anchor数量没变,选择的正样本比例增加了,提升了检测的鲁棒性和泛化能力
  • 减少漏检

8. 边界框回归优化

参考图如下:

公式如下:
b x = 1.1 ⋅ σ ( t x ) + c x b y = 1.1 ⋅ σ ( t y ) + c y b w = p w e t w b h = p h e t h \begin{aligned} &b_{x} =1.1 · \sigma\left(t_x\right)+c_x \\ &b_{y} =1.1 · \sigma\left(t_y\right)+c_y \\ &b_{w} =p_we^{t_w} \\ &b_{h} =p_he^{t_h} \end{aligned} bx=1.1σ(tx)+cxby=1.1σ(ty)+cybw=pwetwbh=pheth
因为sigmoid值域是(0,1),所以前面乘一个略大于1的系数。

优点

  • 扩大边界框以更好地覆盖目标

    在实际场景中,模型预测的边界框可能会略小于目标物体的真实边界框,导致 IoU(交并比)较低,进而影响检测精度。

  • 缓解锚框与真实框不匹配的问题

    如果目标物体的真实框与锚框的形状不完全匹配,预测的边界框可能会出现偏差。乘以 1.1 可以在一定程度上缓解这种偏差,使得预测框更接近真实框。

  • 提升小目标检测性能

    小目标物体在图像中占据的像素较少,预测它们的边界框时更容易出现误差

    对边界框进行适度放大,有助于提高小目标的检测效果,因为小目标的真实框通常更难完全对齐。

9. 模型性能

9.1 数据增强性能影响

效果有提升

9.2 增强对检测的效果

  • S: Spatial Pyramid Pooling (SPP)
  • M: Mosaic Data Augmentation
  • IT: Iterative Bounding Box Refinement 是一种技术,旨在通过多次迭代来逐步优化预测的边界框的位置和大小,从而提高目标检测的准确性。
  • GA: Gradient Accumulation 而梯度累积则是在多个小批次上分别计算梯度,但并不立即应用这些梯度来更新权重;而是将这些梯度累积起来,直到达到预设的大批次大小后,再一次性应用累积的梯度来更新模型参数
  • LS: Label Smoothing
  • CBN: Cross Batch Normalization
  • CA: CoordAtt Module (坐标注意力模块)是一种注意力机制,旨在通过利用特征图的空间信息来增强模型的表现
  • DM: DropBlock
  • OA: Other Augmentations,其他数据增强方法
  • SAM(Spatial Attention Module)指的是空间注意力模块

9.3 Back bone性能影响

Backbone network,即主干网络,是目标检测网络最为核心的部分;

BOF包括了一系列数据增强和训练技巧。

注意观察Mish激活函数。

9.4 mini-batch性能影响

9.5 推理时间和精度

阈值30代表可以支持实时检测的值。

9.6 COCO 数据集性能对比

http://www.xdnf.cn/news/7394.html

相关文章:

  • 采用CDN技术时域名解析流程
  • Java-List集合类全面解析
  • DAY 30 模块和库的导入
  • 扫描网络内所有设备的IP地址
  • 专题讨论3:基于图的基本原理实现走迷宫问题
  • (二十二)Java File类与IO流全面解析
  • 第 1 章:数字 I/O 与串口通信(GPIO UART)
  • LeetCode 1306. 跳跃游戏 III(中等)
  • 4.【Linux】Linux工具(2)
  • 小白的进阶之路-人工智能从初步到精通pytorch的基本流程详解-1
  • 树莓派系列教程第八弹:结合 ESP32-CAM 实现远程摄像头监控
  • 14款项目管理工具点评:PingCode、TAPD等哪款更好?
  • Django框架的前端部分使用Ajax请求一
  • bisheng系列(二)- 本地部署(前后端)
  • SpringBoot 中文转拼音 Pinyin4j库 拼音转换 单据管理 客户管理
  • 电脑A和电脑B都无法ping通电脑C网络,电脑C可以ping通电脑A和B,使用新系统测试正常,排除硬件问题。
  • 【漫话机器学习系列】268. K 折交叉验证(K-Fold Cross-Validation)
  • CAD看图王三维功能升级能解决哪些问题?
  • vulfocus漏洞学习——redis 未授权访问 (CNVD-2015-07557)
  • CSS提高性能的方法有哪些
  • @RequestParam 和 @RequestBody、HttpServletrequest 与HttpServletResponse
  • 解析:新能源汽车芯片主要玩家及技术发展
  • 从秒开到丝滑体验!WebAssembly助力ZKmall商城重构 B2B2C 商城性能基线
  • 四:操作系统cpu调度之调度算法
  • PyQt5绘图全攻略:QPainter、QPen、QBrush与QPixmap详解
  • uniapp运行到微信开发者工具报错“更改appid失败touristappidError:tourist appid”
  • Spring Bean 生命周期中设计模式的应用与解析
  • 通过vcpkg交叉编译grpc:构建Arm64平台的Docker化开发环境
  • 掌握Git:版本控制与高效协作指南
  • 【C++】哈希的概念与实现