原文:
YOLO9000: Better, Faster, Stronger
引言
YOLOv2 的产生是为了克服 YOLOv1 的局限性,同时在速度、准确性和灵活性之间取得更好的平衡。通过对网络结构、边界框预测、训练方法等多方面的改进,YOLOv2 成为了当时最先进的实时目标检测系统之一,在多种标准数据集(如 PASCAL VOC 和 COCO)上的表现超越了许多其他方法,如 Faster R-CNN 和 SSD,同时显著提高了处理速度。
YOLOv1 存在的问题:
- 定位不准确:YOLOv1 在预测物体的边界框时,经常会出现定位误差。这是因为 YOLOv1 直接预测边界框的坐标,而不是基于先验框进行调整,因此对于形状和大小多变的物体难以准确定位。
- 召回率低:YOLOv1 的召回率(Recall)低于基于区域提案的检测方法,如 Faster R-CNN。这意味着它可能会漏掉一些物体检测。
- 类间错误较多:由于 YOLOv1 将类别预测与位置预测紧密绑定,容易在复杂背景下出现类别混淆,尤其是当物体类别较多时。
- 输入分辨率固定:YOLOv1 只能在固定的输入分辨率(448×448)下工作,这限制了其在不同应用场景中的灵活性。
YOLOv2的改进:
- 提升定位精度:通过引入锚框(Anchor Boxes),YOLOv2 不再直接预测边界框的坐标,而是基于多个预定义的锚框进行调整,从而提高了定位准确性和模型的稳定性。
- 增加召回率:通过采用维度聚类(Dimension Clusters)技术为锚框选择更合适的尺寸,并优化网络结构,YOLOv2 提升了检测的召回率,同时减少了漏检现象。
- 提高分类准确性:YOLOv2 采用高分辨率分类器进行预训练,同时使用 Batch Normalization 来加速模型收敛和防止过拟合。这提高了模型在不同场景下的分类准确度。
- 多尺度训练:YOLOv2 引入了多尺度训练方法,使得同一模型可以在不同尺寸的输入图像下运行,从而在速度和准确性之间灵活权衡。这一特性使其在实际应用中更加灵活。
- 实时性能:在保持实时检测速度的基础上,YOLOv2 进一步优化了网络结构(如引入 Darknet-19),减少了计算复杂度,使其在更低的硬件要求下仍能实现较高的检测性能。
一.Better
1.1 Batch Normalization—批量归一化
批量归一化导致收敛性的显著改善,同时消除了对其他形式的规范化的需求[7]。通过在YOLO的所有卷积层上添加批量归一化,我们在mAP上得到了超过2%的改善。批量规范化也有助于规范化模型。有了批归一化,我们可以在不过拟合的情况下去除模型中的dropout。
1. 为什么需要批量归一化?
在深度神经网络中,数据分布的变化会影响模型的训练。具体表现为:
- 激活值分布变化:在神经网络的每一层,输入数据的分布会随着前一层参数的变化而改变。这意味着每次参数更新后,后续层需要重新适应新的数据分布,从而导致训练变慢。
- 梯度消失或爆炸:随着网络层数的增加,如果数据分布不稳定,反向传播时梯度可能会逐渐消失或爆炸,导致网络难以收敛。
批量归一化通过对每一层的输入数据进行归一化处理,减少了内部协变量偏移的问题,从而加速了模型的训练,并提高了收敛速度和稳定性。
2. 批量归一化的原理
批量归一化的核心思想是,在每一层神经网络中,对 mini-batch 的输入数据进行标准化,使得每一层的输入具有零均值和单位方差,然后再对数据进行适当的缩放和偏移。这一过程可以描述为以下步骤:
假设我们有一个 mini-batch,记为
,其中
是 mini-batch 的样本数。
步骤 1:计算 mini-batch 的均值
步骤 2:计算 mini-batch 的方差
步骤 3:对输入数据进行标准化
其中,
是一个很小的常数,用于防止分母为零。
步骤 4:缩放和平移
批量归一化在标准化后引入了两个可学习的参数:缩放系数和偏移量