日期:2024年08月04日
前言
YOLOv3是一个 one-stage 的目标检测网络。YOLOv3 作为 one-stage 方法的代表,其设计目标是实现实时的高效目标检测,在一次前向传播中直接输出检测结果。
One-stage 方法 : 如 YOLO (You Only Look Once) 系列和 SSD (Single Shot MultiBox Detector)。这些方法在一次前向传播中直接从输入图像中预测出目标的类别和位置。这类方法通常速度较快,因为它们省去了中间的候选区域生成步骤。
Two-stage 方法 : 如 R-CNN 系列(Faster R-CNN, Mask R-CNN)。这些方法首先生成一组候选区域(Region Proposals),然后对这些候选区域进行进一步的分类和定位。这类方法通常精度较高,但计算开销较大,处理速度相对较慢。
论文名称:YOLOv3: An Incremental Improvement
论文链接:[1804.02767] YOLOv3: An Incremental Improvement (arxiv.org)
论文摘要
" 我们对 YOLO 进行了若干更新!我们做了一些小的设计改进,使其变得更好。我们还训练了一个新的网络,效果非常不错。虽然它比之前稍大一些,但准确性更高。不过别担心,它依然很快。在 320 × 320 分辨率下,YOLOv3 以 28.2 mAP 的准确度在 22 毫秒内运行,与 SSD 的准确度相当,但速度快了三倍。当我们采用旧的 .5 IOU mAP 检测指标时,YOLOv3 的表现非常出色。在 Titan X 上,它在 51 毫秒内达到了 57.9 的 AP50,而 RetinaNet 在 198 毫秒内达到了 57.5 的 AP50,性能相似,但 YOLOv3 的速度快了 3.8 倍。和往常一样,所有代码都可以在 YOLO: Real-Time Object Detection 在线获取。"
网络架构
Backbone
YOLOv3 的主干网络(backbone)是 Darknet-53。Darknet-53 是 YOLOv3 中用于特征提取的卷积神经网络。
Darknet-53的特点如下:
1. 53 层深度:Darknet-53 的名称中的“53”指的是网络的层数,它由 53 层卷积层和其他网络组件构成。
2. Residual Blocks:Darknet-53 采用了残差块(Residual Blocks)的设计,这有助于提高网络的训练效率和性能。这种设计灵感来自于 ResNet(残差网络)。
3. 高效性:Darknet-53 相比于以前的 Darknet-19 有更多的层和更复杂的结构,这使得它能提取更丰富的特征,并在速度和准确性之间达到了良好的平衡。
Residual Blocks 的结构图
Feature Pyramid Networks(FPN)
在 YOLOv3 中并没有直接使用 FPN(Feature Pyramid Networks)。然而,YOLOv3 使用了一种类似于特征金字塔的方法来处理多尺度目标。
YOLOv3主要通过一下方式实现这种功能:
1. 多尺度特征输出:在网络的三个不同尺度上进行检测,这三个尺度是从主干网络(Darknet-53)的不同层提取的特征图。这种做法类似于特征金字塔的思想,但没有使用 FPN 的具体机制。
2. 特征融合:YOLOv3 使用了跳跃连接(skip connections)来结合来自不同尺度的特征图。这些特征图在不同层级上被处理,以捕捉不同尺度的目标。虽然 YOLOv3 没有使用 FPN 的上采样和加权融合机制,但其跳跃连接和多尺度检测的策略在某种程度上实现了类似的目标。
YOLOv3 在网络的三个不同层次上生成预测,分别对应于小、中、大目标的检测。这些层次分别是网络中较浅的卷积层和较深的卷积层。每个尺度都独立生成预测结果,最终将这些预测结果进行合并。
自定义的锚点框(Anchor Boxes)
概念:锚点框(Anchor Boxes)是目标检测网络中用于预测目标位置和大小的预定义边界框。每个锚点框的形状和尺寸被设计为与实际目标的潜在尺度和形状相匹配。
YOLOv3 中的锚点框:
预定义的锚点框:YOLOv3 使用了 9 个锚点框,这些锚点框在训练过程中根据数据集中的目标大小进行调整。这些锚点框的尺寸和比例被选择为能够覆盖不同尺度的目标。
尺度和层次:在 YOLOv3 中,这些锚点框被分配到网络的三个不同尺度的特征图上,分别处理小、中、大目标。每个尺度特征图使用不同的锚点框,能够更准确地检测不同大小的目标。
锚点框的预测:网络预测每个锚点框的偏移量、目标的类别和置信度分数。通过锚点框,网络可以直接预测边界框的位置、大小和目标类别,从而提高检测的准确性。
优势:
提高精度:自定义的锚点框能够更好地适应数据集中目标的实际尺寸和形状,从而提高检测的精度。
处理不同尺度的目标:通过在不同尺度的特征图上使用锚点框,YOLOv3 可以处理各种尺度的目标,提升多尺度检测能力。
损失函数
YOLOv3 的损失函数:
分类损失:用于衡量模型预测的目标类别与实际类别之间的差距。YOLOv3 使用了交叉熵损失(cross-entropy loss)来计算分类误差。
定位损失:用于衡量预测边界框的位置和尺寸与实际边界框之间的差距。YOLOv3 采用了均方误差(mean squared error, MSE)来计算边界框坐标和尺寸的误差。具体来说,它计算了边界框中心坐标、宽度和高度的误差。
置信度损失:用于衡量预测的置信度(即目标存在的概率)与实际目标是否存在之间的差距。置信度损失包括了两个方面:目标置信度(即目标存在的概率)和背景置信度(即目标不存在的概率)。YOLOv3 通过交叉熵损失来计算这部分误差。
特点:
平衡损失权重:YOLOv3 对不同损失项的权重进行了调整,以确保在训练过程中各个损失项对最终损失的贡献是平衡的。这种权重调整有助于提高模型的检测性能。
处理小目标:改进的损失函数在处理小目标时更加精准,因为 YOLOv3 使用了更细粒度的锚点框和更高分辨率的特征图来捕捉小目标。
总结
我认为YOLOv3最重要的特征是多尺度预测,这样可以使得网络捕捉更加细致全面的特征。