论文:https://arxiv.org/pdf/1506.02640.pdf
人类看一眼图像就能立即识别出目标:它是什么,它们在哪儿,它在做什么交互。人类的视觉系统非常快速和准确,允许我们执行复杂任务,比如开车,快速、准确的目标检测算法也可以让计算机做无人驾驶。
目前的检测系统重新利用分类器来执行检测。为了检测一个目标,这些系统对目标使用了一个分类器,并在测试图像的不同位置和尺度上对其进行评估。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,其中分类器在整个图像的均匀间隔位置运行。
最近的研究中,如 R-CNN 使用区域检测方法,首先在图像中生成潜在的 bounding box,然后在这些框上运行一个分类器。分类后,通过后处理对边界框进行细化,消除重复检测,并根据场景中的其他对象对边界框进行修复。这些复杂的管道速度缓慢且难以优化,因为每个单独的组件都必须单独训练。
我们将目标检测重构为一个单一的回归问题,直接从图像像素到bounding box 的坐标和类概率。使用我们的系统,You only look once(YOLO),就可以预测出哪些对象出现了,以及它们在哪里。
YOLO 非常简单:请参见图 1。一个单一的卷积网络同时预测多个 bounding box 和这些 box 的类别概率。YOLO训练全图像,直接优化检测性能。与传统的目标检测方法相比,这种统一的模型有几个优点。
首先,YOLO 非常快。由于我们将帧检测作为一个回归问题,我们不需要一个复杂的管道。我们只需在测试时对新图像运行神经网络来预测检测结果。我们的基础网络在 Titan X GPU 上以 45 fps 的速度运行,而快速版本的运行速度超过了 150 fps。这意味着我们可以实时处理流媒体视频延迟小于 25 ms。此外,YOLO 的平均精度是其他实时系统的 2 倍以上。关于我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/。
其次,YOLO 在进行预测时,会对图像进行全面的分析。与滑动窗口(sliding window)和基于区域选择(region proposal-based)的技术不同,YOLO 在训练和测试期间可以看到整个图像,因此它隐式地编码相关类别的上下文信息以及它们的外观。Fast R-CNN 是一种顶部检测方法,它会因为看不到更大的背景而将图像中的背景块误当成物体。与 Fast R-CNN 相比,YOLO 产生的背景错误不到一半。
第三,YOLO 有较好的泛化。在对自然图像进行训练和对艺术品进行测试时,YOLO 的检测效果远远优于 DPM 和 R-CNN 等顶级检测方法。由于 YOLO 具有高度的泛化性,它在应用于新域或意外输入时不太会崩溃。
YOLO 在精确度方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的物体,但它很难精确定位一些物体,特别是小的物体。我们在实验中进一步研究了这些权衡。
我们所有的培训和测试代码都是开源的。还可以下载各种经过训练的模型。
我们将目标检测的独立组件统一为一个单一的神经网络。我们的网络使用整个图像的特征来预测每个 bounding box。它还可以同时预测图像中所有类的所有 bounding box。这意味着我们的网络对整个图像和图像中的所有对象进行全局推理。YOLO 设计实现端到端训练和实时速度,同时保持较高的平均精度。
我们的系统将输入图像划分为一个 S × S S × S S×S 网格。如果一个对象的中心落在一个网格单元中,该网格单元负责检测该对象。
每个网格单元预测了 B B B bounding box 和这些 box 的置信度。这些置信度分数反映了该 box 中包含一个对象的确信程度,以及它 box 预测的准确性。我们将置信度定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)∗IOU^{truth}_{pred} Pr(Object)∗IOUpredtruth。如果该单元格中不存在对象,则置信度得分应为0。否则,置信度等于预测框与标注框之间的 IOU。
每个边界框由 5 个预测组成:x,y,w,h 和置信度。(x, y) 坐标表示框的中心相对于网格单元格的边界。相对于整个图像,预测宽度和高度。最后,置信度预测表示预测框与标注框之间的 IOU。
每个网格单元还预测了 C C C 条件类概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Classi |Object) Pr(Classi∣Object)。这些概率决定了网格单元包含的对象。我们只预测每个网格单元的一组类概率,无论 box B B B 的数量是多少。
在测试时,我们将条件类概率和对应 box 置信度相乘,
P r ( C l a s s i ∣ O b j e c t ) ∗ P r ( O b j e c t ) ∗ I O U p r e d t r u t h = P r ( C l a s s i ) ∗ I O U p r e d t r u t h Pr(Classi|Object) ∗ Pr(Object) ∗ IOU^{truth}_{ pred} = Pr(Classi) ∗ IOU^{truth}_{ pred} Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth
这给了我们每个盒子的特定类别的置信度。这个置信度的编码包含了目标框中类别的概率,和目标框与标注框的吻合程度。
在以上的输出层中,通常使用 S = 7 S=7 S=7, B = 2 B=2 B=2,有 20 20 20 个类别那么 C = 20 C=20 C=20,所以最终的输出 tenseor 尺寸为 7 × 7 × 30 7\times 7 \times 30 7×7×30。
我们将该模型作为一个卷积神经网络来实现,并在 PASCAL VOC 数据集上对其进行评估。网络的初始卷积层从图像中提取特征,全连接层预测输出概率和坐标。
我们的网络架构是受 GoogLeNet 的启发,我们的网络有 24 层卷积,后面跟了 2 层全连接。与 GoogLeNet 使用的 inception 模块不同,我们简单地使用了 1 × 1 和 3 × 3 卷积层,类似于Lin et a。完整的网络如图3所示。
我们在 ImageNet 1000 类竞赛数据集上对卷积层进行预训练。对于预训练,我们使用图3中的前 20 个卷积层,然后是平均池化层和全连接层。我们对这个网络进行了大约一周的训练,并在 ImageNet 2012 验证集上获得了 88% 的 top 5 准确率,可以与 Caffe 的 Model Zoo 中的 GoogLeNet 模型相比较。我们使用 DarkNet 框架进行所有的训练和推理。
然后我们转换模型来做检测。Ren et al. 等人的研究表明,在预训练的网络中同时添加卷积层和连接层可以提高性能。在他们的例子之后,我们添加了四个卷积层和两个随机初始化权值的完全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从 224 × 224 提高到 448 × 448。
我们的最后一层预测了类别的概率和 bounding box。我们通过图像的宽度和高度对 bounding box 的宽度和高度进行归一化,使它们落在 0 和 1 之间。我们将 bounding box 的 x 和 y 坐标参数化为特定网格单元位置的偏移量,因此它们也被限制在 0 和 1 之间。
我们在最后一层使用线性激活函数,其他所有层使用下面的 leaky 激活函数:
我们优化了模型输出的 sum-squared error。我们使用 sum-squared error 是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它将 定位误差
与 分类误差
同等加权,而分类误差可能并不理想。此外,在每个图像中,许多 grid cell 不包含任何对象,这会将 cell 的置信度推向 0,通常会抑制所包含目标的单元格的梯度。这可能会导致模型不稳定,导致训练在早期出现偏差。
为了弥补这一点,我们增加了边界框坐标预测的损失,并减少了不包含目标的 box 的置信度的损失。我们使用 λ c o o r d λ_{coord} λcoord 和 λ n o o b j λ_{noobj} λnoobj 两个参数来实现这一点。设 λ c o o r d = 5 λ_{coord} = 5 λcoord=5, λ n o o b j = . 5 λ_{noobj} = .5 λnoobj=.5。
sum-squared 误差也同样加权了大框和小框的误差。我们的误差度量应该反映大框的小偏差比小框的小偏差更重要。为了解决这个问题,我们预测边界框的宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测每个 grid cell 有多个 box。在训练时,我们只希望一个 bounding box 预测器对每个目标负责。我们指定预测框和标注框IOU最高的那个预测器来 “负责” 预测一个对象。这使得了 bounding box 预测器之间的专门化。每个预测器都能更好地预测物体的大小、纵横比或类别,从而提高整体召回率。
在训练过程中,我们优化了以下多部分损失函数:
在上面的式子中, 1 i o b j \mathbb{1}^{obj}_{i} 1iobj 表示如果 obj 出现在第 i 个 cell 中, 1 i j o b j \mathbb{1}^{obj}_{ij} 1ijobj 表示如果目标出现在第 i 个 cell 的第 j 个 bounding box 预测器中。
注意,只有当 grid cell 中存在一个目标时,loss 函数才会惩罚分类错误(这就是前面讨论的条件类概率)。它也只会惩罚 bounding box 坐标误差,如果该预测器对 bounding box “负责”(即该网格单元中所有预测器 IOU 最高的那个)。
我们使用 PASCAL VOC 2007 年和 2012 年的训练和验证数据集对该网络进行了大约 135 次的培训。在 2012 年的测试中,我们还将 VOC 2007 的测试数据用于培训。在整个训练过程中,我们使用的 batch size 为 64,momentum 为 0.9,decay 为 0.0005。
我们的 learning rate 计划如下:对于第一个 epoch,我们慢慢地将 learning rate 从 0.001 提高到 0.01。如果我们以较高的学习率开始,我们的模型通常会因为不稳定的梯度而发散。我们继续用0.01 来训练 75 个 epoch,然后是 0.001 来训练 30 个 epoch,最后是 0.0001 来训练 30 个 epoch。
为了避免过拟合,我们使用了 dropout 和广泛的扩充数据。第一个连接层之后速率为 0.5 的 dropout 层阻止了层之间的协同适应。对于扩充数据,我们引入了高达原始图像大小 20% 的随机缩放和平移。我们还随机调整曝光和饱和度的图像高达 1.5 倍的 HSV 颜色空间。
和训练一样,预测只需要一次网络评估。在 PASCAL VOC 上,网络预测了每幅图像的 98 个 bounding box 以及每个 box 的类概率。YOLO 在测试时非常快,因为它只需要一个网络评估,而不像基于分类器的方法。
网格设计加强了 bounding box 预测中的空间多样性。通常,一个物体落在哪个网格单元中是很清楚的,而网络只能为每个物体预测一个 box。然而,一些大型目标或靠近多个 cell 边界的目标可以被多个 cell 很好地定位。非最大抑制可用于修复这些多重检测。虽然这不是关键的性能,因为它是 R-CNN 或 DPM,非最大抑制增加2- 3%的mAP。
YOLO对边界盒预测施加了很强的空间约束,因为每个网格单元只能预测两个盒子,并且只能有一个类。这种空间限制限制了我们的模型可以预测的附近物体的数量。我们的模型很难处理成群出现的小对象,比如鸟群。
因为我们的模型学会了从数据中预测边界框,所以它很难推广到新的或不寻常的纵横比或配置的对象。我们的模型也使用相对粗糙的特征来预测边界盒,因为我们的架构从输入图像有多个下采样层。
最后,当我们训练一个接近检测性能的损失函数时,我们的损失函数在小边界框和大边界框中对待错误是一样的。大盒子里的小错误通常是良性的,但小盒子里的小错误对借据的影响要大得多。错误的主要来源是不正确的本地化。