《零基础入门AI:YOLOv3、YOLOv4详解》
一、YOLOv3详解
论文资源
- YOLOv3 论文地址:https://arxiv.org/pdf/1804.02767
- YOLOv3 论文中文翻译:https://blog.csdn.net/yegeli/article/details/109751358
1. 网络结构
1.1 整体网络结构
YOLOv3 的网络结构由多个基础组件构成:
-
CBL(Convolutional + Batch Normalization + Leaky ReLU):网络中的最小组件,包含:
- 卷积层(Convolutional Layer)
- 批量归一化层(Batch Normalization Layer)
- Leaky ReLU 激活函数
-
**resunit:**含有多个 CBL,残差模块中含有一个或多个残差单元。输入通过两个 CBL 后,再与原输入进行 add;这是一种常规的残差单元。残差单元的目的是为了让网络可以提取到更深层的特征,同时避免出现梯度消失或爆炸
- 梯度消失是指在反向传播过程中,梯度值变得非常小,以至于权重更新几乎停滞不前
- 梯度爆炸是指在反向传播过程中,梯度值变得非常大,导致权重更新幅度过大,从而使模型的训练不稳定甚至发散
-
ResN:YOLOv3 中的大型组件,其中 N 表示包含的 ResUnit 数量。结构包括:
- 一个 Padding 层
- 一个 CBL 层
- N 个残差单元
-
**concat:**将 Darknet-53 的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的 add 操作是不一样的,拼接会扩充张量维度,而 add 直接相加不会导致张量维度的改变,例如 104×104×128 和 104×104×128 拼接,结果是 104×104×256
-
add:张量直接相加,不会扩充维度,例如 104×104×128 和 104×104×128 相加,结果还是 104×104×128
-
上采样(Upsampling):关键技术,用于实现多尺度特征融合,从而提高模型对不同尺度目标的检测能力
- 多尺度特征融合:YOLOv3 在多个尺度上进行目标检测,通过上采样将低分辨率的特征图放大到高分辨率,与更高分辨率的特征图进行融合,从而捕捉到更多的细节信息,有助于模型更好地检测不同尺度的目标,尤其是小目标
-
输出维度:255 = 3 × (4+1+80),其中 3 表示每个尺度的锚框数量,4 为边界框坐标,1 为置信度,80 为 COCO 数据集类别数。
网络最终输出三种尺度的检测结果,如图中蓝色立方体所示。
1.2 主干网络
YOLOv3 采用 Darknet-53 作为主干网络,其特点是不使用池化层和全连接层,尺寸变换通过调整卷积步长(stride)实现。
以 256×256 输入为例的网络流程:
- 经过 3×3×32 卷积 → 输出 256×256×32
- 经过 3×3×64 stride=2 卷积 → 输出 128×128×64
- 经过残差块 → 输出 128×128×64
- 经过 3×3×128 stride=2 卷积 → 输出 64×64×128
- 经过 2 个残差块 → 输出 64×64×128
- 经过 3×3×256 stride=2 卷积 → 输出 32×32×256
- 经过 8 个残差块 → 输出 32×32×256
- 经过 3×3×512 stride=2 卷积 → 输出 16×16×512
- 经过 8 个残差块 → 输出 16×16×512
- 经过 3×3×1024 stride=2 卷积 → 输出 8×8×1024
- 经过 4 个残差块 → 输出 8×8×1024
- 最终经过池化、全连接和 softmax 输出
1.3 特征输出
特征图尺寸越小,感受野越大,他们分别适配不同大小的目标:
-
52 × 52 感受野小,更适合检测小型目标
-
26 X26 感受野中等,更适合检测中小型目标
- 13 × 13 感受野大,更适合检测大型目标
1.4特征融合
1.4.1 FPN 思想
目标检测中不同尺度目标对特征提取的需求不同:
- 大目标:需要高层语义信息(类别、整体形状)
- 小目标:需要低层细节信息(边缘、纹理)
传统的单尺度特征提取网络(如 YOLOv2)往往只使用最后一层特征图进行预测,对小目标检测效果较差
FPN(Feature Pyramid Network),就是特征金字塔网络,目标是:融合多尺度特征,使每个尺度的特征图都具备丰富的语义信息,从而提升对不同尺度目标的检测能力,尤其是小目标
FPN 的主要思想如下:
-
特征提取:使用骨干网络(如 ResNet、Darknet-53 等)提取不同尺度的特征图。这些特征图通常有不同的分辨率,例如 13x13、26x26 和 52x52
-
自顶向下路径:从最高层的特征图开始,逐层进行上采样,并与下一层的特征图进行拼接,通过 CBL 模块对拼接后的特征图进行进一步处理,作用是将高层语义信息“传递”到低层,增强低层特征的语义表达能力
-
横向连接:在每个尺度上,将自顶向下路径的特征图与同尺度的骨干网络输出特征图进行通道拼接(Concatenate),作用是融合低层的细节信息 + 高层的语义信息,提升多尺度检测能力
-
特征融合:在每个尺度的横向连接后,使用一个 CBL 模块(Conv + BN + Leaky ReLU) 或普通卷积层,对拼接后的特征图进行进一步处理,通常使用 3×3 卷积进行特征融合,作用是增强特征表达能力,减少信息冗余
-
观察下面四张图:
图 a:特征化图像金字塔
-
当我们要检测不同的尺度目标时,需要把图像送入不同的尺度
-
需要根据不同的尺度图片一次进行预测
-
需要多少个不同尺度就需要预测多少次,效率较低
图 b:单特征映射
-
得到一个特征图并进行预测
-
特征丢失,对于小目标效果不好
图 c:金字塔特征层次结构
-
把图像传给 backbone,在传播的过程中分别进行预测
-
相互之间独立,特征没有得到充分利用
图 d:特征金字塔网络
- 不是简单的在不同特征图上进行预测
- 会对不同的特征图进行融合后再进行预测
1.4.2 FPN 融合
和前面描述的一样,为了进一步降低模型的复杂度进而提升速度,YOLOv3 选择了重用主干网络所提取的不同尺寸的特征图,主要是 8 倍、16 倍以及 32 倍下采样的特征图,同时采用了 FPN 的设计思想,分别对 16 倍、32 倍以及各自上采样后的结果进行了融合,但是也对其进行了一定的改进,在传统的 FPN 中,特征图通常是通过 加法(Add) 来进行融合的。但在 YOLOv3 中,作者选择使用 通道拼接(Concatenate) 来代替加法操作,这是为了:
- 增加特征图的通道数:使得模型能够捕捉到更多的信息
- 避免信息丢失:加法操作可能会导致某些重要信息被掩盖,而拼接则保留了所有原始信息
1×1 卷积完成通道的一致性
2×up(上采样)完成尺寸的一致性
1.4.3 上采样融合
特征融合更有利于检测各种尺寸的物体,下图是特征融合架构图:
2. 多尺度预测
对于 416×416×3 输入,YOLOv3 产生三个尺度的特征图:13×13、26×26、52×52,对应总网格数为 13×13+26×26+52×52。每个网格对应 3 个锚框,共产生 (13×13+26×26+52×52)×3=10647 个预测框,利用阈值过滤掉置信度低于阈值的预选框,每个网格同样最终只预测一个结果,取置信度最大的。
COCO 数据集使用 9 种不同形状的锚框,分配到三个尺度:
- 13×13:大目标(感受野大)
- 26×26:中等目标
- 52×52:小目标(分辨率高)
对于每个网格,其都对应一个 85 维度的 Tensor(80 + 5)
- 5=4+1:中心点坐标、宽、高,置信度
- 80:80 个类别的类别概率(COCO数据集的类别是80个)
3. 类别预测
在有的数据集中,一个目标可能同时具有多个标签(如“女性”和“人”)。使用 softmax 会隐式地假设每个边界框只属于一个类别,而现实中这种情况并不总是成立。因此,多标签分类的方式更符合实际数据分布,能够更好地建模多类别共存的场景
YOLOv3 使用独立的逻辑回归分类器代替 softmax,采用多标签分类方式处理类别预测,这种设计更适合现实场景中目标类别重叠的情况,提升了模型对复杂任务的适应能力
4. 损失函数
YOLOv3 损失函数包含三部分:
- 定位误差损失(Localization Loss):对于每一个与真实边界框(ground truth)匹配的先验框(anchor box),YOLOv3 会计算其在位置(x, y)和尺寸(w, h)上的预测误差。该部分损失采用**均方误差(Mean Squared Error, MSE)**进行计算。需要注意的是,YOLOv3 仅对负责预测目标的 anchor box 计算定位损失,其余框不参与该部分损失的计算
- 置信度误差损失(Confidence Loss):YOLOv3 使用**二元交叉熵损失(Binary Cross Entropy, BCE)**来计算置信度损失。该损失分为两个部分:
- 对于负责预测目标的 anchor box,置信度的目标值为预测框与真实框之间的 IOU
- 对于不负责预测的 anchor box,目标值为 0。 这种设计有助于模型学习区分包含目标与不包含目标的边界框
- 分类误差损失(Classification Loss):与早期版本不同,YOLOv3 放弃了使用 softmax 的多类分类方式,转而采用独立的二元分类器,并对每个类别使用二元交叉熵损失(Binary Cross-Entropy Loss)。这种多标签分类的设计允许一个边界框同时属于多个类别,从而更好地建模现实世界中复杂的标签重叠情况
5. 性能对比
性能评估指标:
- AP50:IoU=0.5 时的 AP 值
- AP75:IoU=0.75 时的 AP 值
- APs:小目标 AP 值
- APm:中等目标 AP 值
- APL:大目标 AP 值
二、YOLOv4详解
论文资源
- YOLOv4 论文地址:https://arxiv.org/pdf/2004.10934
- YOLOv4 论文中文翻译:https://blog.csdn.net/muye_IT/article/details/125294973
1. 改进内容
YOLOv4 主要改进包括:
- 输入端:CutMix、Mosaic 数据增强【丰富训练数据集】
- 主干网络:CSPDarknet53 + SPP 模块
- 颈部网络:SPP + PANet
- 检测头:基于锚框的 YOLOv3
- 损失函数:CIOU(Complete Intersection over Union )损失
- 激活函数:Mish 激活函数
- 样本匹配:增加了匹配样本的数量
YOLOv4 贡献主要内容如下:
- 算力要求低,单 GPU 就能训练好
- 从数据层面(数据增强等)和网络设计层面(网络结构)来进行改善
- 融合各种神经网络论文的先进思想
2、数据增强策略
2.1 Bag of freebies
通常情况下,传统的目标检测器的训练都是在线下进行的。因此, 研究者们总是喜欢利用纯线下训练的好处而研究更好的训练方法,使得目标检测器在不增加测试成本的情况下达到更好的精度。我们将这些只需改变训练策略或只增加训练成本的方法称为 bag of freebies。目标检测经常采用并符合这个定义的就是数据增强。数据增强的目的是增加输入图像的多样性,从而使设计的目标检测模型对来自不同环境的图片具有较高的鲁棒性
使用场景:Mosaic 数据增强、标签平滑、自对抗训练、损失函数 CIOU、CmBN
2.2 Bag of specials
对于那些只会增加少量的推理成本的插入模块和后期处理方法, 但可显著提高目标检测的准确性,我们称其为 Bag of specials。一 般来说,这些插入模块是用来增强模型的某些属性的,如扩大感受野、 引入注意力机制、增强特征整合能力等,而后处理是一种筛选模型预测结果方法
使用场景:Mish 激活函数、CSP 结构
2.3 CutMix 数据增强(重点)
- 增强局部特征的学习:通过将不同图像的局部特征混合在一起,模型可 以学习到更多的局部信息
- 提高训练效率:高价值信息增多,提升训练效率,优化算法性能
- 防止模型过拟合:通过引入更多样的训练样本,CutMix 能够提高模型的泛化能力,减少过拟合现象
- 数据稳定:由于采用填充的形式,不会有图像混合后不自然的情形,能够提升模型分类的表现
2.4 Mosaic 数据增强(重点)
Mosaic 数据增强则利用了 4 张图片,对 4 张图片进行拼接,每一张图片都有其对应的框,将 4 张图片拼接之后就获得一张新的图片,同时也获得这张图片对应的框,然后将这样一张新的图片传入到神经网络当中去学习,这极大丰富了检测物体的背景
Mosaic数据增强的具体步骤如下:
- 首先随机取 4 张图片
- 分别对 4 张图片进行基本的数据增强操作,并分别粘贴至与最终输出图像大小相等掩模的对应位置
- 进行图片的组合和框的组合
注意:
- 基本的数据增强包括:翻转、缩放以及色域变化(明亮度、饱和度、色调)等操作
图示:先对单张图片做调整亮度、对比度、色调、随机缩放、剪切、翻转、旋转等基本数据增强,后把 4 张图片拼接在一起
优点:
- 增加数据多样性:通过将多张图像混合在一起,生成更多不同的训练样 本
- 提升模型的鲁棒性:模型在训练过程中见过更多样的图像组合,能够更 好地应对不同场景下的目标检测任务
- 减少过拟合:通过增加数据的多样性,有助于防止模型过拟合,提升泛化能力
- 减少训练算力:由于一次性可以计算 4 张图片,所以 Batch Size 可以不用 很大,也为 YOLOv4 在一张 GPU 卡上完成训练奠定了数据基础
2.5 DropBlock 正则化
- DropBlock 是一种用于卷积神经网络的正则化技术,旨在防止过拟合。它通过在训练过程中随机丢弃特征图中的连续区域(块)来增加模型的泛化能力。与传统的 Dropout 不同,Dropout 随机丢弃独立的神经元,而 DropBlock 丢弃的是特征图中的连续相邻区域,这样可以更有效地移除某些语义信息,从而提高正则化的效果
- 图示:图(b) 表示 Dropout 、图(c)表示 DropBlock
2.6 标签平滑(Label Smoothing)
标签平滑(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 之间的值公式:
- ytruey_{true}ytrue是原始的 one-hot 编码标签
- ysmoothedy_{smoothed}ysmoothed是平滑后的标签
- ϵ\epsilonϵ是平滑系数,通常是一个较小的正数(例如 0.1)
- K 是类别的总数
ysmoothed=(1−ϵ)⋅ytrue+ϵKy_{smoothed}=(1-\epsilon)·y_{true}+\frac{\epsilon}{K} ysmoothed=(1−ϵ)⋅ytrue+Kϵ
案例:假设我们有一个三分类任务,原始的 one-hot 编码标签是 [1, 0, 0]
,平滑系数 𝜖=0.1,类别总数 𝐾=3。那么平滑后的标签计算如下:
y1=(1−0.1)∗[1,0,0]+0.13=[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
交叉小批量归一化(Cross mini-Batch Normalization,CmBN)会跨多个小批量对均值和方差进行积累和计算,逐渐形成一个全局的均值和方差,从而提升了统计量的稳定性和准确性,减少训练震荡
2.7 Mish 激活函数
与 ReLU 等非平滑激活函数相比,Mish 具有更好的平滑性,平滑的激活函数能够让模型获得更好的非线性,从而得到更好的准确性和泛化,Mish 激活函数的数学表达式为:
Mish(x)=x∗tanh(ln(1+ex))Mish(x)=x*tanh(ln(1+e^x)) Mish(x)=x∗tanh(ln(1+ex))
Mish 函数和 ReLU 一样都是无正向边界的,可以避免梯度饱和
使用了Mish激活函数的 TOP-1 和 TOP-5 的精度比没有使用时都略高一些:
3、损失函数
MSE Loss 主要问题就是导数变化不稳定,尤其是在早期阶段(损失越大,导数越大),随着导数越来越小, 训练速度变得越来越慢。也因此有学者提出了 IOU 一系列的损失函数,IOU 损失函数演变的过程如下:IOU => GIOU => DIOU =>CIOU 损失函数,每一种损失函数都较上一种损失函数有所提升
3.1 IoU Loss
IoU 损失定义如下:交集越大,损失越小
LIoU=1−∣B∩Bgt∣∣B∪Bgt∣\mathcal{L}_{IoU}=1-\frac{|B\cap B^{gt}|}{|B\cup B^{gt}|} LIoU=1−∣B∪Bgt∣∣B∩Bgt∣
不适合的情况:
- 情况 1 ,当预测框和目标框不相交时,IoU=0,无法反映两个框距离的远近,此时损失函数不可导
- 情况 2 和情况 3 的情况,当 2 个预测框大小相同,2 个 IoU 也相同,IOU Loss 无法区分两者位置的差异
3.2 GIoU Loss
GIoU(Generalized loU)是对 IoU 的改进版本
图中最大外接矩形为 C,红色区域为差集 A(C-并集),那么给出 GIoU Loss 的表达式如下:
优点:
- 在 GIoU 不仅关注重叠区域,还关注其他的非重合区域,能够更好的反映两者的重合度,即添加了惩罚因子,缓解了 IoU Loss 不可导的问题
缺点:
- 下面 3 种情况差集均相等,这个时候 GIoU Loss 就退化为了 IoU Loss,GIoU Loss 也无法反映 3 种情况的好坏,即无法区分相对位置关系
3.3 DIoU Loss
- 为了解决 GIoU 遇到的问题,DIoU(Distance loU)就诞生了。DIoU 作者认为好的目标框回归函数应该考虑 3 个重要几何因素:重叠面积、中心点距离、长宽比
- 针对 IoU 和 GIoU 存在的问题,DIoU 作者从两个方面进行考虑
- 如何最小化预测框和目标框之间的归一化距离?
- 如何在预测框和目标框重叠时,回归的更准确?
- 针对第一个问题,提出了 DIoU Loss(Distance IoU Loss),DIoU Loss 考虑了重叠面积和中心点距离,当目标框包裹预测框的时候,直接计算 2 个框的距离,因此 DIoU Loss 收敛的更快
- 公式:
LDIoU=1−|DIoU|=1−|IoU|+ρ2(B,Bgt)lc2ρ(B,Bgt)表示检测框中心点和真实框中点之间的欧式距离,lc表示最小外接矩形的对角线距离\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 做回归损失函数,而分类损失和目标损失都使用的是交叉熵损失。对于回归损失,其数学表达式如下:
LCIoU=1−∣CloU∣=1−∣IoU∣+ρ2(B,Bgt)lc2+αvv=4π2(arctanwgthgt−arctanwphp)2ρ2(B,Bgt),lc2分别表示预测结果与标注结果中心点的欧氏距离和框的对角线距离,w和h表示预测框的宽高v是衡量长宽比一致性的参数,wgt,hgt为真实框的宽高,wp,hp为检测框的宽高α是平衡因子,计算公式为v(1−IoU)+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、网络结构
4.1 整体网络结构
YOLOv4 采用了称为 CSPDarknet-53 的新的主干网络结构,它基于 Darknet-53,并通过使用 CSP(Cross Stage Partial)模块来提高特征表示的能力
YOLOv4 = CSPDarknet53(骨干) + SPP 附加模块 PANet 路径聚合(颈) + Yolov3(检测头)
4.2 CSPNet
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.3 YOLOV4 的 CSP
- CSPNet 通过通道划分与跨阶段融合机制,有效减少了冗余计算,提升了模型的学习能力与推理效率,是现代高性能目标检测模型(如 YOLOv4 及其后续版本)中广泛采用的主干网络设计思想
-
通道划分(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.4 SPPNet
**空间金字塔池化网络(Spatial Pyramid Pooling Network,SPPNet)**主要目的是解决图像在输入到卷积神经网络时尺寸不一的问题。通过将不同大小的输入映射到固定长度的输出,SPP 模块使得神经网络能够处理任意大小的输入,从而大大提高了模型的灵活性和泛化能力
YOLOv4 借鉴了 SPP 的思想,SPP 模块被集成在主干网络之后,用于增强模型对多尺度目标的感知能力。
将经过不同尺度池化后的特征图沿通道维度进行拼接。由于每个池化操作的结果都是 13×13×256,而我们进行了 4 次不同的池化操作(包括原特征图),最终得到的是一个 13×13×(4×256)=13×13×1024 的特征图,在这个过程中,虽然我们改变了特征图的处理方式,但我们并没有改变其空间分辨率(仍然是 13×13),而是增加了通道数(从 256 增加到 1024)。这样做可以有效地增加网络的感受野,并结合了不同尺度的信息,有助于提高模型对于各种大小目标的检测性能
4.5 FPN+PAN
- 路径聚合网络(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)的方式进行融合
5、模型性能
5.1 数据增强性能影响
- 选型:CutMix + Mosaic + Label Smoothing + Mish