文章目录
- 一、YOLOV3
- 1、网络结构
- 1.1 整体结构
- 1.2 主干网络
- 1.3 特征输出
- 1.4 特征融合
- FPN(Feature Pyramid Networks)
- FPN 融合
- 上采样融合
- 2、多尺度预测
- 3、损失函数
- 4、性能对比
一、YOLOV3
YOLOv3(You Only Look Once v3)是YOLO系列中的第三代版本,旨在提高目标检测的精度和速度。YOLOv3通过一些创新和改进使得其在速度和精度上有显著提升。
- YOLOv3 论文地址:【https://arxiv.org/pdf/1804.02767】
- YOLOv3 论文中文翻译地址:【https://blog.csdn.net/yegeli/article/details/109751358】
- YOLOv3 最显著的改进就是在 3 个尺度上以相同的方式进行目标的检测,每种 3 个锚框,共 9 个。这使其可以检测到不同规模的目标
1、网络结构
1.1 整体结构
-
输入层:输入图像尺寸为 416×416×3,表示输入的是一个RGB图像,大小为416x416像素。
- 416×416×3:
416
是图像的高度和宽度,3
是颜色通道(RGB)。
- 416×416×3:
-
Darknet53:是YOLOv3的特征提取网络,相比于YOLOv2使用的Darknet19,它更加深度,包含了 53个卷积层,并且去除了全连接层(FC层)。
-
- 主要通过 残差连接(residual connections) 来防止梯度消失。
- 这一部分负责提取图像的高层特征。
-
-
CBL(卷积+批归一化+激活函数)
- CBL = Conv + Batch Normalization + Leaky ReLU
- Conv:卷积层,用于提取局部特征。
- Batch Normalization:标准化每一层的输入,减少训练时的协方差偏移,提高训练稳定性。
- Leaky ReLU:作为激活函数,Leaky ReLU可以避免ReLU激活函数中出现的“死亡神经元”问题,允许有小的负值输出。
- CBL = Conv + Batch Normalization + Leaky ReLU
-
resunit(残差单元):由 CBL 和 Add 操作组成。
- Add 操作:实现了残差连接,将输入特征直接与输出特征相加,避免信息丢失,保持深层网络训练的有效性。
- 该部分帮助网络通过跳跃连接学习残差,从而增强梯度传播,解决深层网络中梯度消失的问题。
- Add 操作:实现了残差连接,将输入特征直接与输出特征相加,避免信息丢失,保持深层网络训练的有效性。
-
resn(残差模块):resn 是 Yolov3 中的大组件,n 表示这个 Res-block 里含有多少个 Res-unit,组成如下:
- 一个 padding
- 一个 CBL
- N 个残差组件
-
concat(拼接操作)
- 将 Darknet-53 的中间层和后面的某一层的上采样进行张量拼接,达到多尺度特征融合的目的。这与残差层的 add 操作是不一样的,拼接会扩充张量维度,而 add 直接相加不会导致张量维度的改变,例如 104×104×128 和 104×104×128 拼接,结果是 104×104×256
-
上采样:上采样(Upsampling)是一个关键的技术,用于实现多尺度特征融合,从而提高模型对不同尺度目标的检测能力
- 多尺度特征融合:YOLOv3 在多个尺度上进行目标检测,通过上采样将低分辨率的特征图放大到高分辨率,与更高分辨率的特征图进行融合,从而捕捉到更多的细节信息,有助于模型更好地检测不同尺度的目标,尤其是小
-
多尺度输出
- 网络在三个不同尺度上进行目标检测:
- 13×13×255:高层特征图,适用于检测大物体。
- 26×26×255:中层特征图,适用于中等尺寸的物体。
- 52×52×255:低层特征图,适用于检测小物体。
- 每个特征图的输出大小为
H×W×(B×5 + C)
,其中H×W
是特征图的大小,B
是每个格子上的预测框数,5
是每个框的属性(中心点坐标、宽高和置信度),C
是类别数。
- 网络在三个不同尺度上进行目标检测:
1.2 主干网络
- 输入层
- 输入尺寸:
416×416×3
,表示输入的是一个416x416的RGB图像。 - 卷积层 1:第一个卷积层有 32个3x3的滤波器,该层的输出尺寸为
256×256
,也就是图像经过卷积处理后的尺寸。
- 特征提取(多层卷积)
- 第二层卷积:输入尺寸
208×208×64
,进行卷积操作后输出尺寸为128×128
。 - 第3层卷积:接着进行一个 1x1卷积,输出
128×128
。 - 残差块(Residual):接下来,应用了一个 3x3的卷积,通过残差连接(skip connection)优化特征图的传递,输出仍为
128×128
。
- 更深层的卷积块
- 通过多次卷积块的堆叠,网络逐步提取图像的高层特征。
104×104×128
经过3x3卷积
和1x1卷积
后输出64×64
。- 重复类似的操作,输出逐步减小,特征图的深度逐渐增大。
- 中间特征提取
- 特征图尺寸:
- 通过更深的网络,特征图进一步缩小到
52×52×256
和26×26×512
。
- 通过更深的网络,特征图进一步缩小到
- 在这个阶段,网络继续通过卷积层提取更多抽象的特征,并通过 残差单元(Residual Unit) 来加深网络。
- 输出特征图
- 在输出阶段,YOLOv3会通过三个不同尺度的特征图进行目标检测:
- Scale 1: 对应
13×13×1024
特征图,适合检测大物体。 - Scale 2: 对应
26×26×512
特征图,适合检测中等物体。 - Scale 3: 对应
52×52×256
特征图,适合检测小物体。
- Scale 1: 对应
- YOLO Detection
- 最后的输出层包括 卷积操作(
Conv
),用于生成最终的预测框和类别概率。 - Softmax层:用于归一化类别的输出,确保输出的概率和为1。
1.3 特征输出
。YOLOv3采用了 多尺度检测(Multi-Scale Detection),通过三个不同尺寸的特征图来捕捉不同大小的物体。
Scale 3 — 大物体检测(52×52×255
)
- 输出尺寸:
52×52×255
,即每个格子(52x52
)上有 255 个值,包含 4个坐标(bounding box位置)、1个置信度(bounding box是否包含物体)、和 80个类别的概率。 - 适用于检测 小物体,尤其是在较高层的特征图中。
Scale 2 — 中物体检测(26×26×255
)
- 输出尺寸:
26×26×255
,这个特征图对应较小的物体,包含与Scale 3类似的信息。 - 用于检测中等大小的物体,网络在这里提取到的特征较为复杂,但分辨率较低。
Scale 1 — 小物体检测(13×13×255
)
- 输出尺寸:
13×13×255
,这个特征图是最小的,适用于检测 大物体。 - 适用于捕捉较大物体的特征,因为其分辨率最低,但每个格子对应的区域较大,能够涵盖更大的物体。
- 特征融合的方式:
- 在YOLOv3中,不同尺度的特征图被 逐层融合。这通过将较小特征图的高分辨率特征与较大特征图的深层次特征进行结合,增强了网络对不同尺度目标的敏感性。
1.4 特征融合
在目标检测任务中,不同尺度的目标(如远处的小人和近处的大车)对特征提取的要求不同:
- 小物体检测: 小物体的特征通常较为细节化,并且位于图像的较低层次。低分辨率的特征图无法充分表达这些细节,因此需要将高分辨率的特征图与低分辨率特征图融合,才能更好地捕捉小物体的特征。
- 大物体检测: 大物体通常占据较大的区域,因此低分辨率的特征图能够更好地捕捉大物体的信息。通过融合较高层次的特征(如13×13的特征图)与层次的细节特征(如52×52的特征图),可以显著提升对大物体的检测精度。
FPN(Feature Pyramid Networks)
是一种常用的特征融合技术,它通过利用从不同深度网络层次提取的特征来增强网络的多尺度特征表达能力。FPN 主要用于 从浅层到深层 融合特征,以更好地检测各种尺度的物体。
FPN 的主要目标是通过 自上而下的路径 和 自下而上的路径 来融合不同尺度的特征图。这一过程有助于提升检测小物体和大物体的能力。
- 自上而下(Top-down)路径
- 自上而下路径通过对高层特征图进行 上采样,将其逐渐恢复到较低层次的尺寸(高分辨率),使得它们能够与较低层的特征图结合。
- 这个过程通常通过 转置卷积(Deconvolution) 或 上采样(Upsampling) 来完成。
- 这样高层的抽象特征可以被引入到低层的具体特征中,增加对小物体的敏感性。
- 自下而上(Bottom-up)路径
- 自下而上路径是通过 卷积操作 来提取低层的特征图,使其逐步变得更加抽象,增强对大物体的表达能力。
- 低层特征图的尺寸较大,但在细节上更为丰富,适合检测小物体。自下而上的路径逐渐减少特征图的空间尺寸并增加通道数。
- 融合(融合上下层的特征)
- 自上而下路径和自下而上的路径相结合时,FPN通过 特征拼接 或 加法操作,将来自不同层次的信息融合在一起。
- 这种融合的目的是整合浅层的高分辨率细节和深层的抽象信息,从而形成更具辨识度和多尺度特征表达的特征图。
- 卷积层和检测
- 在每个融合后的特征图上,FPN通常会执行卷积操作,以进一步提取多尺度的信息。
- 最终,这些特征图会送入检测头进行目标检测任务,生成边界框和类别预测。
在YOLOv3中:
- 三尺度输出:YOLOv3在三个不同尺度的特征图上进行目标检测,这和FPN的目标非常相似。
- 特征融合:在YOLOv3中,较高层次的特征图会进行上采样,然后与低层次的特征图进行拼接,以便融合不同层次的特征信息。
观察下面四张图:
-
图 a:特征化图像金字塔
-
当我们要检测不同的尺度目标时,需要把图像送入不同的尺度
-
需要根据不同的尺度图片一次进行预测
-
需要多少个不同尺度就需要预测多少次,效率较低
-
-
图 b:单特征映射
-
得到一个特征图并进行预测
-
特征丢失,对于小目标效果不好
-
-
图 c:金字塔特征层次结构
-
把图像传给 backbone,在传播的过程中分别进行预测
-
相互之间独立,特征没有得到充分利用
-
-
图 d:特征金字塔网络
- 不是简单的在不同特征图上进行预测
- 会对不同的特征图进行融合后再进行预测
FPN 融合
- 和前面描述的一样,为了进一步降低模型的复杂度进而提升速度,YOLOv3 选择了重用主干网络所提取的不同尺寸的特征图,主要是 8 倍、16 倍以及 32 倍下采样的特征图,同时采用了 FPN 的设计思想,分别对 16 倍、32 倍以及各自上采样后的结果进行了融合,但是也对其进行了一定的改进,在传统的 FPN 中,特征图通常是通过 加法(Add) 来进行融合的。但在 YOLOv3 中,作者选择使用 通道拼接(Concatenate) 来代替加法操作,这是为了:
- 增加特征图的通道数:使得模型能够捕捉到更多的信息
- 避免信息丢失:加法操作可能会导致某些重要信息被掩盖,而拼接则保留了所有原始信息
- 1×1 卷积完成通道的一致性
- 2×up(上采样)完成尺寸的一致性
上采样融合
- 特征融合更有利于检测各种尺寸的物体,下图是特征融合架构图:
2、多尺度预测
在传统的目标检测任务中,网络往往在一个固定尺度上进行预测。但实际应用中,目标的尺寸差异很大,因此,如果只在一个尺度的特征图上进行预测,可能无法准确检测到小物体或大物体。多尺度预测(Multi-Scale Prediction)通过在多个尺度的特征图上同时进行预测,解决了这一问题。多尺度预测可以让网络在不同的特征图上做出预测,从而能够同时捕捉到不同尺寸物体的特征。
在YOLOv3中,多尺度预测 是通过在不同尺度的特征图上同时进行目标检测来实现的。具体来说,YOLOv3有三个不同尺寸的特征图,每个特征图都会进行目标检测预测。这种设计使得YOLOv3能够在处理不同大小的物体时表现得更加精确和高效。
YOLOv3的多尺度预测流程:
- 特征提取:YOLOv3首先通过Darknet-53提取特征,得到多个尺寸的特征图(例如:
52x52x256
、26x26x512
、13x13x1024
)。 - 上采样:较高层(低分辨率)特征图通过上采样操作增大其尺寸,以便与较低层(高分辨率)的特征图进行融合。
- 拼接:将不同尺度的特征图进行拼接(concatenate),将细节信息和高层抽象信息结合在一起,从而获得更丰富的特征表示。
- 预测:在三个不同尺度的特征图上,网络分别进行目标检测预测,包括边界框、类别、置信度等。
- 13×13×255:用于大物体的检测。
- 26×26×255:用于中物体的检测。
- 52×52×255:用于小物体的检测。
多尺度预测的输出:
YOLOv3的每个尺度的输出形状为 H×W×(B×5 + C)
,其中:
H×W
是特征图的空间尺寸。B
是每个网格(grid)单元中预测的边界框数量(YOLOv3中通常是3个框)。- 每个框包含 4个位置参数(
x, y, w, h
),1个置信度(bounding box是否包含物体),以及 C个类别概率(每个物体类别的概率,YOLOv3使用80个类别)。
3、损失函数
在目标检测任务中,损失函数 是用于评估模型预测与真实标签之间差异的重要指标。对于YOLOv3模型来说,损失函数的设计要同时考虑物体的定位(位置损失)、置信度(置信度损失)以及类别(类别损失)的预测。YOLOv3的损失函数是由三部分组成的:定位损失、置信度损失和类别损失。
- 定位损失(Localization Loss)
- 置信度损失(Confidence Loss)
- 类别损失(Classification Loss)
1.定位损失是指预测的边界框和真实边界框之间的差异。它反映了模型对物体位置的预测误差。
- 计算方式: YOLOv3使用 均方误差(MSE) 来衡量预测框与真实框之间的差距。具体来说,定位损失包括以下四个部分:
- 中心点误差:预测框的中心点(
x
,y
)与真实框的中心点之间的误差。 - 宽度误差:预测框的宽度(
w
)与真实框的宽度之间的误差。 - 高度误差:预测框的高度(
h
)与真实框的高度之间的误差。 - IoU损失(Intersection over Union):YOLOv3还通过 IoU损失 来计算预测框与真实框的重叠度,作为定位损失的一个重要组成部分。
- 中心点误差:预测框的中心点(
2.置信度损失衡量了模型对每个边界框是否包含物体的预测能力。YOLOv3会预测每个格子是否包含目标物体(置信度)。置信度损失是基于 二元交叉熵 来计算的,包含两种情况:
- 物体存在时的置信度:如果该框中有物体,模型应该预测较高的置信度。
- 物体不存在时的置信度:如果该框没有物体,模型的置信度应该接近0。
3.类别损失衡量了模型预测的物体类别与真实类别之间的差异。YOLOv3采用 交叉熵损失(cross-entropy loss)来计算预测的类别概率与真实类别标签之间的差异。
4、性能对比
- AP50:IoU 阈值为 0.5 时的 AP 测量值
- AP75:IoU 阈值为 0.75 时的 AP 测量值
- APs:对于小目标的 AP 值
- APm:对于中等目标的 AP 值
- APL:对于大目标的 AP 值