文章目录
YOLOv4
YOLOv4 是一种高效且准确的目标检测模型,它在 YOLOv3 的基础上引入了多项改进,旨在提高模型的检测速度和精度,自诩为Optimal Speed and Accuracy of Object Detection(目标检测的最佳速度和最佳精度)
- YOLOv4 论文地址::【https://arxiv.org/pdf/2004.10934】
- YOLOv4 论文中文翻译地址:【https://blog.csdn.net/muye_IT/article/details/125294973】
1.改进点
YOLOv4 的设计思路是 在保证速度的前提下提升精度,它对 YOLOv3 的 Backbone、Neck、训练技巧等方面进行了全面优化。
(1)Backbone 改进
- YOLOv3:使用 Darknet-53 作为主干特征提取网络。
- YOLOv4:采用 CSPDarknet53,引入 CSPNet(Cross Stage Partial Network) 结构。
- 核心思想:分裂特征图的一部分进入跨阶段残差块,另一部分直接连接,最后再融合。
- 优势:减少计算量和显存占用,提升梯度流动性,增强特征表达能力。
(2)Neck 改进
YOLOv3 的 Neck 只使用了 FPN,YOLOv4 引入了更多模块:
- SPP(Spatial Pyramid Pooling)
- 多尺度池化( 1 × 1 , 5 × 5 , 9 × 9 , 13 × 13 1\times1, 5\times5, 9\times9, 13\times13 1×1,5×5,9×9,13×13)并行后拼接,增强感受野。
- FPN + PAN
- FPN:自顶向下传递语义信息;
- PAN:自底向上传递空间信息;
- 双向融合后,增强了多尺度特征,尤其是小目标检测效果更好。
(3)激活函数
- YOLOv3:采用 Leaky ReLU。
- YOLOv4:引入 Mish 激活函数,更平滑、可微分,梯度传递更稳定,训练更深网络时表现更好。
(4)数据增强
YOLOv4 大量引入新的数据增强策略:
- Mosaic 数据增强:一次拼接四张图片,使模型能学习更丰富的背景和目标尺度变化。
- CutMix:把两张图像混合,提高鲁棒性。
- 数据扰动(随机缩放、颜色抖动等),提高泛化能力。
(5)正则化与优化技巧
- DropBlock 正则化:相比 Dropout,更适合卷积结构,能随机“抹掉”特征块,提升鲁棒性。
- Class Label Smoothing:避免模型过度自信,提高泛化能力。
- CIoU Loss:替代原有的 IoU/GIoU,考虑距离、重叠和宽高比,更有利于收敛。
(6)训练加速与推理优化
- 支持 多 GPU 并行训练。
- 跨 mini-batch 正则化(Cross mini-Batch Normalization, CmBN)。
- 在保持精度的同时,推理速度依旧非常快,保证了实时性。
总结
YOLOv4 相比 YOLOv3 的提升可以概括为:
- Backbone 更强(CSPDarknet53)
- Neck 更强(SPP + FPN + PAN)
- 激活函数更优(Mish)
- 数据增强更丰富(Mosaic, CutMix)
- 正则化与损失函数改进(DropBlock, Label Smoothing, CIoU Loss)
2.数据增强策略
2.1 Bag of Freebies
- 通常情况下,传统的目标检测器的训练都是在线下进行的。因此, 研究者们总是喜欢利用纯线下训练的好处而研究更好的训练方法,使得目标检测器在不增加测试成本的情况下达到更好的精度。我们将这些只需改变训练策略或只增加训练成本的方法称为 bag of freebies。目标检测经常采用并符合这个定义的就是数据增强。数据增强的目的是增加输入图像的多样性,从而使设计的目标检测模型对来自不同环境的图片具有较高的鲁棒性
- 使用场景:Mosaic 数据增强、标签平滑、自对抗训练、损失函数 CIOU、CmBN
2.2 bags of specials
Bag of Specials 指的是 只会增加少量的推理成本的插入模块和后期处理方法,但能显著提升模型检测精度的策略。这些策略的计算开销通常集中在 训练阶段,并且它们主要针对模型结构、损失函数、优化等方面进行优化。
使用场景:Mish 激活函数、CSP 结构
2.3 CutMix 数据增强
CutMix 是一种非常创新的 数据增强 技巧,尤其在目标检测和分类任务中,它能显著提高模型的鲁棒性和泛化能力。与传统的数据增强方法(如旋转、缩放、平移等)不同,CutMix 通过对图片进行“切割”和“混合”来生成新的训练样本。
CutMix 的核心思想就是:
通过 裁剪一张图片的一部分,然后 将这部分替换为另一张图片的对应区域,并调整标签(即目标框)以适应新的图像内容。
这种方法从图像级别和像素级别引入了更强的随机性和噪声,同时保留了原始图像的结构信息和目标标签。
2.4 Mosaic数据增强
Mosaic 的核心思想是:
把 4 张不同的图片随机缩放、裁剪、拼接到同一张图像中,形成一张新的训练样本。
也就是说,一张增强后的图片里,会同时包含 4 张原始图片的不同区域和目标标注。
具体步骤:
- 随机选择 4 张图片(从训练集中随机采样)。
- 随机缩放:对 4 张图片做随机缩放,使它们的尺寸各不相同。
- 随机裁剪并拼接:以某个随机中心点,把这 4 张图拼接到一张大图的四个象限中。
- 左上:第 1 张图片
- 右上:第 2 张图片
- 左下:第 3 张图片
- 右下:第 4 张图片
- 标注框(Bounding Box)调整:
每个物体的标注框也要跟随缩放和拼接位置调整到新坐标。
注意:
基本的数据增强包括:翻转、缩放以及色域变化(明亮度、饱和度、色调)等操作
图示:先对单张图片做调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转等基本数据增强,后把 4 张图片拼接在一起
优点:
- 丰富背景
一张训练图像里包含多个场景,模型更鲁棒。 - 增加小目标数量
因为缩放和拼接,小目标更容易出现,提升小目标检测能力。 - 减少对大 batch size 的需求
一张 Mosaic 图像里其实已经包含了 4 张图片的信息,相当于“隐形大 batch”。 - 提升泛化能力
让模型更适应多样化的场景组合。
2.5 DropBlock
DropBlock 通过随机丢弃卷积特征图中的连续块(而不是单个神经元),可以有效增强网络的鲁棒性。它在 目标检测 和 小目标检测 中表现突出,工作原理如下:
- 选择丢弃块大小:DropBlock 会随机选择一个连续的区域(例如 7x7 或 5x5),并将该区域的所有神经元设为零。这些区域的大小通常是根据网络结构调整的。
- 丢弃区域的选择:在每个训练步骤中,DropBlock 会随机选择特征图中的一个位置来丢弃区域。丢弃的区域通常占特征图的 20%-50% 左右,这个区域的丢弃是 结构化的,即特征图的区域会同时丢弃,而不是单独丢弃每个神经元。
- 丢弃区域的位置和大小:DropBlock 的掩码在每次训练中都是随机的,它会在图像的各个区域内随机选择一个位置和大小的矩形区域进行丢弃,丢弃区域的大小和位置会随着训练过程不断变化。
- 标签调整:在进行目标检测时,DropBlock 还需要根据丢弃区域调整对应的 目标框(bounding boxes),以确保标签的准确性。这个过程需要根据丢弃区域的位置来修改目标框的坐标。
YOLOv4 中的 DropBlock 应用于以下几个方面:
- 局部特征丢弃:在训练过程中,DropBlock 会丢弃特征图中的 局部区域(而不是单个神经元),强制模型使用更多的上下文信息进行推理,避免依赖局部特征。
- 增强空间推理能力:DropBlock 通过丢弃特定区域的卷积特征,迫使网络在没有某些信息的情况下依然能够进行有效的空间推理,提升对目标位置和大小的准确性。
- 增强对小目标的检测能力:由于 DropBlock 会丢弃部分特征图区域,这样会迫使网络更加关注于全局特征,增强了网络对不同尺度目标,特别是小目标的适应能力。
【图示】:图(b) 表示 Dropout 、图(c)表示 DropBlock
2.6 Class label smoothing
YOLO 模型在目标检测任务中通常会使用 交叉熵损失,而在训练时,Class Label Smoothing标签平滑 可以有效减小模型对 某个类别目标框的过度自信,提高对背景类和小物体的检测能力。
在传统的训练过程中,目标标签通常是 硬标签,也就是 0 或 1 的离散值。例如,在多分类问题中,如果某个样本属于类别 2,标签可能是 [0, 1, 0]
,表示类别 2 是正确的类别。
而在 Class Label Smoothing 中,标签会被平滑化,通常是通过对目标标签进行 概率分布 的调整,使得每个类别的概率都不是完全的 0 或 1,而是稍微减小了对目标类别的信心。通过平滑标签,模型对小物体的检测更加稳定,避免过度依赖局部特征。
例如,假设类别数为 3,目标类别为 1(标签原本是 [0, 1, 0]
),经过平滑处理后可能变为 [0.1, 0.8, 0.1]
,这意味着模型对类别 1 的预测信心被适度降低,同时对其他类别也给出了些许的概率。
平滑标签的计算:
假设有 C 个类别,目标标签为 y_true,对于类别 k,经过平滑后的标签可以按以下公式计算:
- 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=(1−0.1)∗[1,0,0]+30.1=[0.9,0,0]+0.0333=[0.9333,0.0333,0.0333]
优点:
- 提高泛化能力:避免模型过度依赖单一类别,从而缓解过拟合。
- 减少过拟合:减小模型对训练数据中特定类别的过度信心。
- 避免极端预测:防止模型在某些类别上过于自信,提升稳定性。
- 提高鲁棒性:在数据存在噪声或类别分布不均衡时表现更好。
缺点:
- 计算开销增加:需要对标签进行额外的处理。
- 平滑因子敏感:因子过大可能导致标签信息丢失,影响精度。
- 并非适用于所有任务:在目标检测等需要精确类别信息的任务中,可能降低性能。
2.7 CmBN 交叉小批量归一化
传统的 Batch Normalization(批量归一化)方法在每个 mini-batch 内对数据进行标准化,确保每个 mini-batch 的数据均值为 0,方差为 1。这样做可以提高训练过程的稳定性,加速收敛。然而,当使用 多个 GPU 训练 时,每个 GPU 训练一个 mini-batch,可能会出现不同 GPU 上的 统计量(均值、方差)不一致 的问题,进而影响模型的训练稳定性和性能。
CmBN 是为了解决这一问题提出的,它将跨多个 mini-batch 进行归一化,从而 同步不同 GPU 上的统计量,使得训练过程更加一致和稳定。
跨 mini-batch 统计量共享:
在传统的 Batch Normalization 中,统计量(均值和方差)是在每个 mini-batch 内部计算的,而 CmBN 则是在多个 mini-batch 上进行计算。通过将多个 mini-batch 进行 合并,CmBN 计算的均值和方差可以跨越多个 mini-batch 共享,从而在多 GPU 训练时得到一致的统计量。
计算过程:
对每个 mini-batch 内的特征进行归一化时,CmBN 使用跨 mini-batch 汇总得到的 全局均值和方差,从而保证了不同 GPU 上的训练过程共享相同的统计信息。
优化效果:
通过同步不同 GPU 上的统计量,CmBN 有助于:
- 提高 训练的稳定性;
- 加速 收敛速度;
- 使得 训练结果更加一致,避免了由于每个 GPU 上的统计差异带来的问题。
2.8 Mish 激活函数
Mish 是一种连续、处处可导且曲线平滑的激活函数,形式为
M i s h ( x ) = x ⋅ tanh ( s o f t p l u s ( x ) ) , s o f t p l u s ( x ) = ln ( 1 + e x ) \mathrm{Mish}(x) = x \cdot \tanh(\mathrm{softplus}(x)), \quad \mathrm{softplus}(x)=\ln(1+e^x) Mish(x)=x⋅tanh(softplus(x)),softplus(x)=ln(1+ex)
等价写法:
M i s h ( x ) = x ⋅ tanh ( ln ( 1 + e x ) ) \mathrm{Mish}(x)=x\cdot\tanh(\ln(1+e^x)) Mish(x)=x⋅tanh(ln(1+ex))
关键直觉:
s o f t p l u s ( x ) \mathrm{softplus}(x) softplus(x) 是平滑版 ReLU,始终为正且随 x x x 增大缓慢增长。
tanh ( ⋅ ) \tanh(\cdot) tanh(⋅) 将其压到 ( − 1 , 1 ) (-1,1) (−1,1) 区间并保持平滑。
再乘以 x x x,使输出在正半轴近似线性,而在负半轴 保留小幅负值(非硬截断),从而让特征与梯度在负半轴也能 柔性流动。
Mish 函数和 ReLU 一样都是无正向边界的,可以避免梯度饱和
- 使用了Mish激活函数的 TOP-1 和 TOP-5 的精度比没有使用时都略高一些:
3. 损失函数
均方差 (MSE, Mean Squared Error)
衡量的是 每个预测值与真实值的平方误差的平均值。
MSE = 1 n ∑ i = 1 n ( y ^ i − y i ) 2 \text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (\hat{y}_i - y_i)^2 MSE=n1i=1∑n(y^i−yi)2
- 缺点:在早期阶段(损失越大,导数越大),随着导数越来越小, 训练速度变得越来越慢。也因此有学者提出了 IOU 一系列的损失函数
3.1 IoU Loss
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=1−∣B∪Bgt∣∣B∩Bgt∣
- B p B_p Bp: 预测框
- B g t B_{gt} Bgt: 真实框
解释:交并比,衡量预测框和真实框的重叠程度,值在 [ 0 , 1 ] [0,1] [0,1] 之间。
如果完全重叠,IoU=1;完全不相交,IoU=0。
问题:
无梯度问题:当预测框与真实框没有交集时,IoU=0,梯度无法更新。
忽略位置关系:IoU 只考虑面积重叠,不考虑中心点距离或框的形状。
优化困难:在训练早期,预测框往往与真实框差距较大,IoU=0,学习停滞。
情况 1 ,当预测框和目标框不相交时,IoU=0,无法反映两个框距离的远近,此时损失函数不可导
情况 2 和情况 3 的情况,当 2 个预测框大小相同,2 个 IoU 也相同,IOU Loss 无法区分两者位置的差异
3.2 GIoU Loss
IoU 只考虑 重叠区域的比率,当两框没有交集时,IoU=0,梯度消失。
GIoU 在 IoU 的基础上,引入 外接矩形差异项,即预测框与真实框的 覆盖情况。
- 图中最大外接矩形为 C,红色区域为差集 A(C-并集),那么给出 GIoU Loss 的表达式如下:
L G I o U = 1 − ∣ I o U ∣ + ∣ A ∣ ∣ C ∣ \mathcal{L}_{GIoU}=1-|IoU|+\frac{|A|}{|C|} LGIoU=1−∣IoU∣+∣C∣∣A∣
- 如果预测框和真实框重叠度低,GIoU 会根据它们在外接矩形中的相对位置给予 负惩罚。
- 这样即使 IoU=0,模型也能收到有效的优化信号。
优势
- 更鲁棒:解决了 IoU 在无交集情况下无法优化的问题。
- 训练早期有效:当预测框和真实框相距较远时,GIoU 能推动预测框逐步靠近真实框。
- 边界情况:
- 如果 B p = B g t B_p = B_{gt} Bp=Bgt,则 I o U = 1 \mathrm{IoU}=1 IoU=1,额外项为0,所以 G I o U = 1 \mathrm{GIoU}=1 GIoU=1。
- 如果两框不相交,IoU=0,GIoU 为负数,能区分预测框远近优劣。
局限性
- 下面 3 种情况差集均相等,这个时候 GIoU Loss 就退化为了 IoU Loss,GIoU Loss 也无法反映 3 种情况的好坏,即无法区分相对位置关系
3.3 DIoU Loss
DIoU 作者认为好的目标框回归函数应该考虑 3 个重要几何因素:重叠面积、中心点距离、长宽比
CIoU 在 IoU 的基础上,额外考虑了两个关键因素:
- 中心点距离:通过 ρ 2 c 2 \frac{\rho^2}{c^2} c2ρ2 惩罚预测框中心与真实框中心的距离,使预测框更快收敛到正确位置。
- 宽高比一致性:通过 v v v 项约束预测框与真实框的纵横比接近,避免出现“长条形预测框”或“宽胖预测框”之类的异常情况。
L D I o U = 1 − |DIoU| = 1 − |IoU| + ρ 2 ( B , B g t ) l c 2 ρ ( B , B g t ) 表示检测框中心点和真实框中点之间的欧式距离, l c 表示最小外接矩形的对角 线距离 \begin{aligned} &\mathcal{L}_{DIoU}=1-\text{|DIoU|}=1-\text{|IoU|}+\frac{\rho^2(B,B^{gt})}{l_c^2} \\ &\rho(B,B^{gt})\text{表示检测框中心点和真实框中点之间的欧式距离,}l_c\text{表示最小外接矩形的对角}\\&\text{线距离}\end{aligned} LDIoU=1−|DIoU|=1−|IoU|+lc2ρ2(B,Bgt)ρ(B,Bgt)表示检测框中心点和真实框中点之间的欧式距离,lc表示最小外接矩形的对角线距离
- 图示:
- 效果图:
- 缺点:
- 如下图所示的 3 种状态预测框和真实目标框的中心点距离是相同的,DIoU Loss 也退化成了 IoU Loss。如上面提到的目标检测回归函数需要考虑到的 3 种因素,DIoU Loss 没有引入长宽比的衡量
3.4 CIoU Loss
- 为了解决 DIoU 遇到的问题,CIoU(Complete loU) Loss 被提出来,CIoU 在 DIoU 基础上把目标框长宽比的相似程度考虑进去,利用惩罚因子进行约束
- YOLOv4 采用 CIoU Loss 做回归损失函数,而分类损失和目标损失都使用的是交叉熵损失。对于回归损失,其数学表达式如下:
L C I o U = 1 − ∣ C l o U ∣ = 1 − ∣ I o U ∣ + ρ 2 ( B , B g t ) l c 2 + α 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 ρ 2 ( B , B g t ) , l c 2 分别表示预测结果与标注结果中心点的欧氏距离和框的对角线距离, w 和 h 表示预测框的宽高 v 是衡量长宽比一致性的参数, w g t , h g t 为真实框的宽高, w p , h p 为检测框的宽高 α 是平衡因子,计算公式为 v ( 1 − I o U ) + v \begin{aligned} &\mathcal{L}_{CIoU}=1-|CloU|=1-|IoU|+\frac{\rho^2(B,B^{gt})}{l_c^2}+\alpha{v} \\ &v=\frac4{\pi^2}\left(arctan\frac{w^{gt}}{h^{gt}}-arctan\frac{w^p}{h^p}\right)^2 \\ &\rho^2(B,B^{gt}),l_c^2 分别表示预测结果与标注结果中心点的欧氏距离和框的对角线距离,w和h表示预测框的宽高 \\ &v\text{是衡量长宽比一致性的参数,}w^{gt},h^{gt}\text{为真实框的宽高,}w^p,h^p\text{为检测框的宽高}\\ &\alpha是平衡因子,计算公式为\frac{v}{(1-IoU)+v} \end{aligned} LCIoU=1−∣CloU∣=1−∣IoU∣+lc2ρ2(B,Bgt)+αvv=π24(arctanhgtwgt−arctanhpwp)2ρ2(B,Bgt),lc2分别表示预测结果与标注结果中心点的欧氏距离和框的对角线距离,w和h表示预测框的宽高v是衡量长宽比一致性的参数,wgt,hgt为真实框的宽高,wp,hp为检测框的宽高α是平衡因子,计算公式为(1−IoU)+vv
- CIoU Loss 将目标框回归函数应该考虑的 3 个重要几何因素都考虑进去了:重叠面积、中心点距离、长宽比
4. 网络结构
YOLOv4 可以分为三个部分:
- Backbone:CSPDarknet53(结合了 CSPNet 的 Darknet53 主干)
- Neck:SPP + PANet(在 FPN 基础上增强的特征融合模块)
- Head:YOLOv3 风格的多尺度预测层( 13 × 13 , 26 × 26 , 52 × 52 13\times13, 26\times26, 52\times52 13×13,26×26,52×52)
整体结构是 CSPDarknet53 → SPP → FPN+PAN → YOLO Head
4.1 CSPNet
YOLOv4 采用 CSPDarknet53 作为主干网络,这是在 Darknet53 基础上结合 CSPNet(Cross Stage Partial Network) 的改进版本。
CSPNet 的作者认为推理计算过高的问题是由于网络优化中的梯度信息重复导致的。因此采用 CSP(Cross Stage Partial)模块先将基础层的特征按照通道划分为两部分,一部分直接传递到下一个阶段,另一部分则通过一些卷积层进行处理后再传递到下一个阶段,然后通过跨阶段层次结构将它们合并,在减少了计算量的同时可以保证准确率
CSP 在论文《CSP:A New Backbone that can Enhance Learning Capability of CNN 》提出,把 CSP 应用到 ResNe(X)t,模型结构如下图所示:
Bottleneck 层通常由三个卷积层组成:
- 第一个 1×1 卷积层:用于降低输入的通道数,以减少后续卷积层的计算量
- 第二个 3×3 卷积层:在降维后的特征图上进行卷积操作,提取特征
- 第三个 1×1 卷积层:将通道数恢复到原始维度,以供下一层使用
- CSP 优点:
- 增强 CNN 的学习能力,使得在轻量化的同时保持准确性
- 降低计算成本、内存成本
4.2 YOLOV4 的 CSP
在 YOLOv4 中,CSP 被集成到了 CSPDarknet53 主干网络中。具体来说,YOLOv4 在 Darknet53 的基础上引入了 CSP 模块,形成了 CSPDarknet53:
通道划分(Split)
- 输入特征图的通道被平均分成两个部分(通常是 1: 1):
- Part A:不做任何处理,直接跳过当前模块,传递到最终的拼接层
- Part B:通过一系列卷积操作(如 Conv + Bottleneck)进行特征提取
- 输入特征图的通道被平均分成两个部分(通常是 1: 1):
特征处理(Transform)
Part B 会经过多个标准的 Darknet Bottleneck 模块(类似 ResNet 的残差块)
通常包括:
- 1×1 卷积降维
- 3×3 卷积提取特征
- 可选的残差连接(Residual)
跨阶段融合(Merge)
将 Part A 和 Part B 的输出 在通道维度上进行 拼接(Concatenate)
然后通过一个 1×1 卷积 进一步融合特征,输出到下一个阶段
4.3 SPPNet
SPPNet(Spatial Pyramid Pooling Network,空间金字塔池化网络) 是一个解决 不同尺寸输入 图像问题的网络结构,它的主要优势在于 无需固定输入尺寸,同时通过池化层增强对多尺度信息的表达能力,特别适用于目标检测任务。
在传统的卷积神经网络(CNN)中,通常要求输入图像尺寸一致,以便可以通过全连接层(FC层)进行处理。然而,目标检测中的图像大小往往不同,且 目标尺寸差异大。传统的 CNN 结构无法直接处理这些变化,通常需要对图像进行 裁剪或缩放,这会导致信息丢失,且无法同时处理多尺度的目标。
SPPNet 的提出,旨在通过 空间金字塔池化 来解决这一问题,即无需改变图像尺寸的前提下,能够 有效处理不同尺度的图像 和目标。
SPPNet 的核心思想是 在卷积层的特征图上做空间金字塔池化,也就是说,通过在特征图上 多尺度池化,从而提取不同尺度的特征。
YOLOv4 借鉴了 SPP 的思想,SPP 模块被集成在主干网络之后,用于增强模型对多尺度目标的感知能力。
将经过不同尺度池化后的特征图沿通道维度进行拼接。由于每个池化操作的结果都是 13×13×256,而我们进行了 4 次不同的池化操作(包括原特征图),最终得到的是一个 13×13×(4×256)=13×13×1024 的特征图,在这个过程中,虽然我们改变了特征图的处理方式,但我们并没有改变其空间分辨率(仍然是 13×13),而是增加了通道数(从 256 增加到 1024)。这样做可以有效地增加网络的感受野,并结合了不同尺度的信息,有助于提高模型对于各种大小目标的检测性能
SPPNet(空间金字塔池化网络)通过在卷积特征图上进行多尺度池化,能够有效 处理不同尺寸输入图像,同时增强模型对多尺度目标的检测能力。在 YOLOv4 中,SPP 提升了对 小目标和复杂背景 的适应能力,并增强了模型的 感受野 和 精度。
4.4 FPN + PAN(特征金字塔 + 路径聚合网络)
在 YOLOv4 中,PANet(Path Aggregation Network)是一种用于特征金字塔网络(Feature Pyramid Network, FPN)的改进版本,旨在增强特征的多尺度融合能力,从而提高目标检测的精度。PANet 通过自底向上的路径增强机制,进一步加强了特征图的跨尺度信息传递,这对于检测不同大小的目标尤其重要
YOLOV4 中的 PANet 主要由两部分组成:
- 自顶向下的路径(FPN):这部分与传统的 FPN 类似,从高层(语义信息丰富但空间信息较少)到低层(空间信息丰富但语义信息较少)逐步上采样,并与低层特征图进行融合,生成多尺度的特征图,作用就是负责将深层的强语义特征传递到底层特征图中,增强低层特征图的语义表达能力,有助于检测大目标
- 自底向上的路径(PAN):这是 PANet 相对于传统 FPN 的一个重要改进,它从低层到高层逐步下采样,并与高层特征图进行融合,进一步增强特征图的跨尺度信息传递,作用就是负责将浅层的精确定位特征传递到高层特征图中,增强高层特征图的定位能力,有助于检测小目标
改进:YOLOv4 在原始 PAN 结构的基础上进行了改进。原本的 PANet 网络的 PAN 结构中,特征层之间融合时是直接通过加法(addition)的方式进行融合的,而 YOLOv4 中则采用在通道方向上进行拼接(Concat)的方式进行融合