目标检测长期以来一直是计算机视觉中的一项基石任务。我们需要的模型不仅能告诉我们图像中有什么,还要告诉我们它在哪里。多年来,技术的进步意味着一种权衡: 你可以选择一个高精度的模型,或者一个速度足够快能用于实时应用的模型——但很少能两者兼得。而且,即使是最好的检测器也受限于一个很小的词汇量,它们所训练的数据集只有几十个,最多几百个物体类别。
如果我们能打破这种权衡呢?构建一个在速度和准确性上都达到顶尖水平的检测器?并且突破典型检测数据集的有限词汇量,能够识别数千种不同的物体呢?
这就是 Joseph Redmon 和 Ali Farhadi 在论文 《YOLO9000: Better, Faster, Stronger》 中所要解决的宏伟目标。这项工作不仅介绍了一个模型,而是两个:
- YOLOv2: 对原始 YOLO 的一个显著改进版本,为实时检测设立了新标准。
- YOLO9000: 一个开创性的框架,利用海量分类数据集来检测超过 9000 个物体类别。
让我们来解析一下作者是如何让他们的检测器变得更好、更快,并最终更强的。
起点: 为什么 YOLO 需要升级
最初的 YOLO (You Only Look Once) 是一项突破: 它将目标检测构建为一个单一的回归问题——直接从图像像素到边界框坐标和类别概率——这使得它速度极快。但与像 Faster R-CNN 这样的两阶段检测器相比,YOLO 存在更多的定位误差 (边界框不够紧密) 和更低的召回率 (会漏掉更多物体) 。
通往 YOLO9000 的旅程始于系统性地解决这些弱点,以创建一个更优的基线模型: YOLOv2。其方法并非推倒重来,而是叠加了一系列成熟与新颖的技术,以在不牺牲速度的前提下提升性能。
更好: 从 YOLO 到 YOLOv2 的演进之路
Redmon 和 Farhadi 提供了一份清晰的路线图,展示了将原始 YOLO 逐步改进为 YOLOv2 的过程。每一步都为平均精度均值 (mAP) ——检测准确性的标准度量——带来了可观的提升。
1. 批量归一化 (Batch Normalization)
在所有卷积层后添加批量归一化,使 mAP 提升了超过 2%。批量归一化可以稳定训练过程、加速收敛,并起到正则化的作用——这使得研究者可以移除 YOLO 之前用于防止过拟合的 dropout 层。
2. 高分辨率分类器
大多数检测器都始于一个在 ImageNet 上用 224×224
图像预训练的主干网络。原始 YOLO 直接从 224px 预训练跳到 448×448
检测训练,这迫使网络必须同时学习检测任务并适应更高的分辨率。
YOLOv2 增加了一个中间步骤: 在进行检测训练之前,先在 448×448
的 ImageNet 图像上对分类器进行 10 个周期的微调。这让滤波器有时间适应更高分辨率的输入,带来了近 4% 的 mAP 提升。
3. 使用锚框的卷积预测
借鉴 Faster R-CNN,YOLOv2 用一种全卷积的方法取代了全连接的边界框预测器,该方法预测的是相对于预定义锚框的偏移量。这一改变将定位问题重构为调整锚框以适应物体——这是一个比直接坐标回归更简单的学习任务。
最初 mAP 略有下降,但召回率从 81% 跃升至 88%——意味着检测器找到了更多的物体,即便定位还不够完美。
4. 维度聚类: 更智能的锚框
手动挑选的锚框并非最优。YOLOv2 对训练集中的边界框维度进行 k-means 聚类,并使用一种基于 IOU 的自定义距离度量:
\[ d(\text{box}, \text{centroid}) = 1 - \text{IOU}(\text{box}, \text{centroid}) \]使用 \(k = 5\) 在复杂度和召回率之间取得了很好的平衡。
仅使用 5 个聚类先验框,YOLOv2 就取得了比 Faster R-CNN 中使用的 9 个手动挑选锚框更高的平均 IOU。
5. 直接位置预测
Faster R-CNN 中的锚框使用无约束的偏移量,这会导致不稳定性——边界框可能会偏离其所在的网格单元很远。
YOLOv2 通过将中心坐标参数化为相对于单元格的位置来约束预测,并使用 sigmoid 函数将值限制在 0 与 1 之间。这使得训练更加稳定,网络也更容易学习。
将维度聚类与直接位置预测相结合,mAP 提升了近 5%。
6. 小物体的细粒度特征
YOLOv2 的 13×13
最终特征图对大物体效果很好,但对小物体来说过于粗糙。一个“passthrough”层引入了来自早期层的 26×26
特征,经过重塑后与最终特征拼接,为小物体提供了更好的定位 (+1% mAP) 。
7. 多尺度训练
由于是全卷积结构,YOLOv2 可以处理任意尺寸的图像。在训练期间,每 10 个批次,输入维度会在 320×320
与 608×608
(32 的倍数) 之间随机切换。
这迫使网络具备尺度鲁棒性,并允许在推理时灵活权衡: 同一个训练好的模型既可以用较小输入获得高速,也可以用较大输入获得最高准确率。
更快: Darknet-19 主干网络
检测速度在很大程度上取决于主干网络。许多检测器使用的 VGG-16,在 224×224
分辨率下每次前向传播需要超过 300 亿 次浮点运算 (FLOPs) 。
YOLOv2 引入了 Darknet-19:
- 19 个卷积层,5 个最大池化层
- 主要使用
3×3
滤波器 (VGG 风格) ,并用1×1
滤波器进行压缩 (Network-in-Network 风格) - 采用批量归一化以提高稳定性
- 在分类前使用全局平均池化
其计算量仅 55.8 亿 FLOPs,却能在 448×448
分辨率下于 ImageNet 上取得 76.5% 的 top-1 准确率。
这种精简的架构是 YOLOv2 保持实时速度的核心原因。
YOLOv2 成果: 速度 + 准确性
YOLOv2 比以往的检测器更快、更准确。
在高分辨率下,YOLOv2 在准确性上超过了 Faster R-CNN + ResNet 和 SSD512,同时运行速度显著更快。在低分辨率下,它的速度超过 90 FPS,mAP 与 Fast R-CNN 相当。
更强: 飞跃至 YOLO9000
像 COCO 这样的检测数据集大约有 80 个类别,而像 ImageNet 这样的分类数据集有数万个。绘制边界框的成本远高于提供类别标签。
YOLO9000 弥合了这一差距: 它在检测数据 (COCO) 和海量分类数据 (ImageNet) 上进行联合训练,从检测图像中学习定位能力,并从分类图像中扩展其类别词汇。
挑战: 合并数据集
对所有类别使用 softmax 假设它们互斥——这在合并 COCO 的“狗”与 ImageNet 的“诺福克梗”或“西伯利亚哈士奇”时会造成问题。
解决方案: WordTree
作者利用 WordNet 的语言层次结构,构建了一个名为 WordTree 的精简视觉概念树。
- 在每个节点预测子节点的条件概率。
- 要得到“诺福克梗”的概率,需沿着从根节点开始的路径相乘:
合并 COCO + ImageNet
将每个数据集的标签映射到 WordTree 的节点,从而将它们统一起来。
联合训练
- 检测图像: 反向传播完整的 YOLOv2 检测损失 (定位 + 物体性 + 分类) 。
- 分类图像: 找到对该标签预测概率最高的边界框,沿其在 WordTree 中的路径反向传播分类损失,并施加适度的物体性损失 (假设 IOU 匹配度约为 0.3) 。
最终的 YOLO9000 模型在 COCO 与 ImageNet 前 9000 个类别的组合上训练,可检测 9418 个类别。
YOLO9000 实战
在 ImageNet 检测任务上的评估结果:
- 在 200 个类别中,只有 44 个与 COCO 检测数据重叠。
- 其余 156 个类别,YOLO9000 从未见过任何边界框标签——仅有分类数据。
结果:
- 总体 mAP 为 19.7
- 对于没有任何检测监督的类别,mAP 为 16.0。
它在新的动物物种上表现优异 (与 COCO 中的动物共享物体性) ,但在 COCO 标注框缺失的衣物/装备类别上表现不佳。
结论: 检测的新范式
YOLO9000: 更好、更快、更强 名副其实:
- 更好: 系统性改进造就了比以往顶尖模型更准确的 YOLOv2。
- 更快: Darknet-19 和单阶段架构带来了无与伦比的速度/准确性平衡。
- 更强: 基于 WordTree 的联合训练将检测范围扩展到超过 9000 个类别——实现了跨越式提升。
这项工作不仅仅是一次算法更新——它证明了将异构数据集合并为统一的通用视觉系统是可行的。联合训练的理念与分层标签统一的方法,为新一代大规模检测器的发展指明了方向,这类检测器能够从不同数据源学习,从而更全面地建模视觉世界。