YOLO1:you only look once
注:本文为机翻,不提供源码,代码自己找。
摘要
我们提出了 YOLO,一种新的目标检测方法。 先前关于对象检测的工作将分类器重新用于执行检测。 相反,我们将对象检测框架为空间分离的边界框和相关类概率的回归问题。 单个神经网络在一次评估中直接从完整图像预测边界框和类别概率。 由于整个检测管道是一个单一的网络,因此可以直接在检测性能上进行端到端的优化。
我们的统一架构非常快。 我们的基础 YOLO 模型以每秒 45 帧的速度实时处理图像。 该网络的较小版本 Fast YOLO 每秒处理惊人的 155 帧,同时仍实现其他实时检测器的两倍 mAP。 与最先进的检测系统相比,YOLO 会产生更多的定位错误,但不太可能预测背景上的误报。 最后,YOLO 学习了对象的非常一般的表示。 当从自然图像推广到艺术品等其他领域时,它优于其他检测方法,包括 DPM 和 R-CNN。
1、简介
人类瞥一眼图像,立即知道图像中有哪些物体,它们在哪里,以及它们是如何相互作用的。 人类的视觉系统快速而准确,使我们能够执行复杂的任务,例如在没有意识的情况下驾驶。 快速、准确的物体检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时场景信息,并释放通用、响应式机器人系统的潜力。
当前的检测系统重新利用分类器来执行检测。 为了检测一个物体,这些系统对该物体进行分类,并在测试图像中的不同位置和尺度上对其进行评估。 可变形零件模型 (DPM) 等系统使用滑动窗口方法,其中分类器在整个图像上的均匀间隔位置运行 [10]。
R-CNN 等最近的方法使用区域提议方法首先在图像中生成潜在的边界框,然后在这些提议的框上运行分类器。 分类后,后处理用于细化边界框,消除重复检测,并根据场景中的其他对象对框进行重新评分[13]。 这些复杂的管道速度缓慢且难以优化,因为必须单独训练每个单独的组件。
我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。 使用我们的系统,您只需在图像上查看一次 (YOLO) 即可预测存在哪些对象以及它们在哪里。
YOLO 非常简单:见图 1。单个卷积网络同时预测多个边界框和这些框的类别概率。 YOLO 训练完整图像并直接优化检测性能。与传统的对象检测方法相比,这种统一的模型有几个好处。
首先,YOLO 非常快。由于我们将检测视为回归问题,因此我们不需要复杂的管道。我们只是在测试时在一张新图像上运行我们的神经网络来预测检测。我们的基础网络以每秒 45 帧的速度运行,在 Titan X GPU 上没有批处理,快速版本以超过 150 fps 的速度运行。这意味着我们可以实时处理流视频,延迟小于 25 毫秒。此外,YOLO 的平均精度是其他实时系统的两倍多。有关在网络摄像头上实时运行的系统演示,请参阅我们的项目网页:http://pjreddie.com/yolo/。
其次,YOLO 在进行预测时对图像进行全局推理。与基于滑动窗口和区域提议的技术不同,YOLO 在训练和测试期间看到整个图像,因此它隐式编码了关于类及其外观的上下文信息。 Fast R-CNN 是一种顶级检测方法 [14],它会将图像中的背景补丁误认为是对象,因为它无法看到更大的上下文。与 Fast R-CNN 相比,YOLO 产生的背景错误数量不到一半。
第三,YOLO 学习对象的可泛化表示。在对自然图像进行训练并在艺术品上进行测试时,YOLO 大大优于 DPM 和 R-CNN 等顶级检测方法。由于 YOLO 具有高度泛化性,因此在应用于新域或意外输入时不太可能发生故障。 YOLO 在准确度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的物体,但它很难精确定位一些物体,尤其是小物体。
我们在实验中进一步检查了这些权衡。 我们所有的训练和测试代码都是开源的。还可以下载各种预训练模型。

2. 统一检测
我们将目标检测的独立组件统一到单个神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还同时预测图像的所有类别中的所有边界框。这意味着我们的网络对完整图像和图像中的所有对象进行全局推理。 YOLO 设计可实现端到端训练和实时速度,同时保持较高的平均精度。
我们的系统将输入图像划分为 S x S 网格。如果一个对象的中心落入一个网格单元,则该网格单元负责检测该对象。
每个网格单元预测 B 个边界框和这些框的置信度分数。这些置信度分数反映了模型对盒子包含对象的信心以及它认为盒子预测的准确度。正式地,我们将置信度定义为 Pr(Object) x IOU。如果该单元格中不存在对象,则置信度分数应为零。否则,我们希望置信度分数等于预测框和地面实况之间的交集(IOU)。
每个边界框由 5 个预测组成:x、y、w、h 和置信度。 (x, y) 坐标表示相对于网格单元边界的框的中心。相对于整个图像预测宽度和高度。最后,置信度预测表示预测框与任何地面实况框之间的 IOU。
每个网格单元还预测 C 个条件类概率,Pr(Classi, Object)。这些概率取决于包含对象的网格单元。我们只预测每个网格单元的一组类别概率,而不考虑框 B 的数量。
在测试时,我们将条件类概率和单个框置信度预测相乘,从而为每个框提供特定于类的置信度分数。这些分数既编码了该类出现在框中的概率,也编码了预测的框与对象的匹配程度。


S * S * (B * 5 + C) tensor.
为了在 PASCAL VOC 上评估 YOLO,我们使用 S = 7,B = 2。PASCAL VOC 有 20 个标记类,因此 C = 20。我们的最终预测是 7 * 7 * 30 的张量。
2.1 网络设计
我们将该模型实现为卷积神经网络,并在 PASCAL VOC 检测数据集 [9] 上对其进行评估。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
我们的网络架构受到用于图像分类的 GoogLeNet 模型的启发 [34]。我们的网络有 24 个卷积层,后跟 2 个全连接层。我们没有使用 GoogLeNet 使用的初始模块,而是简单地使用 1*1 缩减层,然后使用 3*3 卷积层,类似于 Lin 等人 [22]。完整的网络如图 3 所示。
我们还训练了一个快速版本的 YOLO,旨在突破快速目标检测的界限。 Fast YOLO 使用的神经网络具有更少的卷积层(9 个而不是 24 个)和这些层中更少的过滤器。除了网络的大小之外,YOLO 和 Fast YOLO 之间的所有训练和测试参数都是相同的。
我们网络的最终输出是 7 * 7 * 30 的预测张量。

2.2 训练
我们在 ImageNet 1000 类竞赛数据集 [30] 上预训练我们的卷积层。对于预训练,我们使用图 3 中的前 20 个卷积层,然后是平均池化层和全连接层。我们对这个网络进行了大约一周的训练,在 ImageNet 2012 验证集上实现了 88% 的单次裁剪 top-5 准确率,与 Caffe 的 Model Zoo [24] 中的 GoogLeNet 模型相当。我们使用 Darknet 框架进行所有训练和推理 [26]。
然后我们将模型转换为执行检测。任等人。表明将卷积层和连接层添加到预训练网络可以提高性能 [29]。按照他们的示例,我们添加了四个卷积层和两个具有随机初始化权重的全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从 224 * 224 提高到 448 * 448。
我们的最后一层预测类概率和边界框坐标。我们通过图像的宽度和高度对边界框的宽度和高度进行归一化,使其介于 0 和 1 之间。我们将边界框的 x 和 y 坐标参数化为特定网格单元位置的偏移量,因此它们也介于 0 和 1 之间.
我们对最后一层使用线性激活函数,所有其他层使用以下泄漏校正线性激活。
我们针对模型输出中的平方和误差进行了优化。我们使用平方和误差是因为它很容易优化,但它并不完全符合我们最大化平均精度的目标。它将定位误差与分类误差同等加权,这可能并不理想。此外,在每个图像中,许多网格单元不包含任何对象。这会将这些细胞的“置信度”分数推向零,通常会压倒确实包含物体的细胞的梯度。这可能导致模型不稳定,导致训练早期出现分歧。
为了解决这个问题,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。我们设置了 5。
平方和误差也同样加权大框和小框的错误。我们的错误度量应该反映大盒子中的小偏差比小盒子中的小偏差更重要。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO 预测每个网格单元的多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们分配一个预测器来“负责”预测一个对象,根据该预测与基本事实的当前 IOU 最高。这导致边界框预测器之间的专业化。每个预测器都能更好地预测某些尺寸、纵横比或对象类别,从而提高整体召回率。
在训练期间,我们优化了以下多部分损失函数:

请注意,损失函数仅在该网格单元中存在对象时才惩罚分类错误(因此前面讨论了条件类概率)。如果该预测器对地面实况框“负责”(即具有该网格单元中任何预测器的最高 IOU),它也只会惩罚边界框坐标错误。
我们在 PASCAL VOC 2007 和 2012 的训练和验证数据集上对网络进行了大约 135 个 epoch 的训练。在 2012 年进行测试时,我们还包括 VOC 2007 测试数据进行训练。在整个训练过程中,我们使用 64 的批大小、0:9 的动量和 0:0005 的衰减。
我们的学习率时间表如下:对于第一个 epoch,我们慢慢地将学习率从 10^-3 提高到 10^-2。如果我们从高学习率开始,我们的模型通常会由于不稳定的梯度而发散。我们继续用 10^-2 训练 75 个 epoch,然后 10^-3 训练 30 个 epoch,最后 10^-4 训练 30 个 epoch。
为了避免过度拟合,我们使用 dropout 和广泛的数据增强。在第一个连接层之后,速率 = .5 的 dropout 层可防止层之间的共同适应 [18]。对于数据增强,我们引入了高达原始图像大小 20% 的随机缩放和平移。我们还在 HSV 颜色空间中将图像的曝光和饱和度随机调整高达 1:5。
2.3 推理
就像在训练中一样,预测测试图像的检测只需要一次网络评估。 在 PASCAL VOC 上,网络预测每个图像的 98 个边界框和每个框的类别概率。 YOLO 在测试时非常快,因为它只需要一次网络评估,这与基于分类器的方法不同。
网格设计在边界框预测中强制执行空间多样性。 通常很清楚一个对象落入哪个网格单元,并且网络只为每个对象预测一个框。 但是,一些大物体或靠近多个单元格边界的物体可以被多个单元格很好地定位。 可以使用非最大抑制来修复这些多重检测。 虽然对 R-CNN 或 DPM 的性能并不重要,但非最大抑制在 mAP 中增加了 2-3%。
2.4 YOLO 的局限性
YOLO 对边界框预测施加了很强的空间约束,因为每个网格单元只能预测两个框并且只能有一个类别。 这种空间约束限制了我们的模型可以预测的附近物体的数量。 我们的模型与成群出现的小物体作斗争,例如成群的鸟。
由于我们的模型学习从数据中预测边界框,它很难泛化到具有新的或不寻常的纵横比或配置的对象。 我们的模型还使用相对粗略的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。
最后,当我们训练一个近似于检测性能的损失函数时,我们的损失函数对小边界框和大边界框的错误处理相同。 大盒子中的小错误通常是良性的,但小盒子中的小错误对 IOU 的影响要大得多。 我们的主要错误来源是不正确的本地化。
3. 与其他检测系统的比较
目标检测是计算机视觉的核心问题。检测管道通常首先从输入图像中提取一组鲁棒特征(Haar [25]、SIFT [23]、HOG [4]、卷积特征 [6])。然后,分类器 [36, 21, 13, 10] 或定位器 [1, 32] 用于识别特征空间中的对象。这些分类器或定位器在整个图像上以滑动窗口方式运行,或者在图像中的某些区域子集上运行 [35,15,39]。我们将 YOLO 检测系统与几个顶级检测框架进行了比较,突出了关键的异同。
可变形零件模型。可变形零件模型 (DPM) 使用滑动窗口方法进行对象检测 [10]。 DPM 使用不相交的管道来提取静态特征、分类区域、预测高分区域的边界框等。我们的系统用单个卷积神经网络替换所有这些不同的部分。该网络同时执行特征提取、边界框预测、非极大值抑制和上下文推理。网络不是静态特征,而是在线训练特征并针对检测任务对其进行优化。我们的统一架构带来了比 DPM 更快、更准确的模型。
R-CNN。 R-CNN 及其变体使用区域提议而不是滑动窗口来查找图像中的对象。选择性搜索 [35] 生成潜在的边界框,卷积网络提取特征,SVM 对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂管道的每个阶段都必须独立精确地调整,并且生成的系统非常慢,在测试时每张图像需要超过 40 秒 [14]。
YOLO 与 R-CNN 有一些相似之处。每个网格单元提出潜在的边界框并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元提议施加了空间限制,这有助于减轻对同一对象的多次检测。我们的系统还提出了更少的边界框,每张图像只有 98 个,而 Selective Search 大约有 2000 个。最后,我们的系统将这些单独的组件组合成一个单一的、联合优化的模型。
其他快速检测器 Fast and Faster R-CNN 专注于通过共享计算和使用神经网络来提出区域而不是选择性搜索来加速 R-CNN 框架 [14] [28]。虽然它们在 R-CNN 上提供了速度和准确性的改进,但两者仍然没有达到实时性能。
许多研究工作集中在加速 DPM 管道 [31] [38] [5]。它们加速 HOG 计算、使用级联并将计算推送到 GPU。然而,只有 30Hz DPM [31] 真正实时运行。
YOLO 没有尝试优化大型检测管道的各个组件,而是完全抛弃了管道,并且设计速度很快。
像人脸或人这样的单一类别的检测器可以高度优化,因为它们必须处理的变化要少得多 [37]。 YOLO 是一种通用检测器,可以学习同时检测各种物体。
深度多框。与 R-CNN 不同,Szegedy 等人。训练卷积神经网络来预测感兴趣区域 [8],而不是使用选择性搜索。 MultiBox 还可以通过将置信度预测替换为单个类别预测来执行单个对象检测。然而,MultiBox 不能执行一般的对象检测,并且仍然只是更大检测管道中的一部分,需要进一步的图像块分类。 YOLO 和 MultiBox 都使用卷积网络来预测图像中的边界框,但 YOLO 是一个完整的检测系统。
OverFeat。 Sermanet 等人。训练一个卷积神经网络来执行定位并调整该定位器来执行检测[32]。 OverFeat 有效地执行滑动窗口检测,但它仍然是一个不相交的系统。 Over-Feat 优化定位,而不是检测性能。与 DPM 一样,定位器在进行预测时只看到本地信息。 OverFeat 无法推理全局上下文,因此需要大量的后处理来产生连贯的检测。
多抓。我们的工作在设计上与 Redmon 等人 [27] 的抓握检测工作相似。我们的边界框预测网格方法基于用于回归到抓取的 MultiGrasp 系统。然而,抓取检测比物体检测要简单得多。 MultiGrasp 只需要为包含一个对象的图像预测单个可抓取区域。它不必估计对象的大小、位置或边界或预测它的类别,只需找到适合抓取的区域。 YOLO 预测图像中多个类别的多个对象的边界框和类别概率。
4. 实验
首先,我们在 PASCAL VOC 2007 上将 YOLO 与其他实时检测系统进行比较。为了了解 YOLO 和 R-CNN 变体之间的差异,我们探讨了 YOLO 和 Fast R-CNN 的 VOC 2007 上的错误,这是性能最高的版本之一 R-CNN [14]。 基于不同的错误配置文件,我们表明 YOLO 可用于对 Fast R-CNN 检测进行重新评分并减少背景误报的错误,从而显着提升性能。 我们还展示了 VOC 2012 结果,并将 mAP 与当前最先进的方法进行了比较。 最后,我们展示了 YOLO 在两个艺术品数据集上比其他检测器更好地泛化到新领域。
4.1 与其他实时系统的比较
目标检测方面的许多研究工作都集中在快速实现标准检测流程。 [5] [38] [31] [14] [17] [28] 但是,只有 Sadeghi 等人。实际上产生了一个实时运行的检测系统(每秒 30 帧或更好)[31]。我们将 YOLO 与他们以 30Hz 或 100Hz 运行的 DPM 的 GPU 实现进行比较。虽然其他努力没有达到实时里程碑,但我们还比较了它们的相对 mAP 和速度,以检查对象检测系统中可用的准确性-性能权衡。
Fast YOLO 是 PASCAL 上最快的目标检测方法;据我们所知,它是现存最快的物体检测器。凭借 52:7% 的 mAP,它的准确度是之前实时检测工作的两倍多。 YOLO 将 mAP 推至 63:4%,同时仍保持实时性能。
我们还使用 VGG-16 训练 YOLO。这个模型比 YOLO 更准确,但也明显慢得多。它对于与依赖 VGG-16 的其他检测系统进行比较很有用,但由于它比实时慢,因此本文的其余部分将重点放在我们更快的模型上。
最快的 DPM 在不牺牲太多 mAP 的情况下有效地加速了 DPM,但它仍然错过了 2 倍的实时性能 [38]。与神经网络方法相比,它还受到 DPM 相对较低的检测精度的限制。
R-CNN 减去 R 用静态边界框提议 [20] 替换选择性搜索。虽然它比 R-CNN 快得多,但它仍然缺乏实时性,并且由于没有好的建议而严重影响了准确性。
Fast R-CNN 加快了 R-CNN 的分类阶段,但它仍然依赖于选择性搜索,每张图像可能需要大约 2 秒来生成边界框建议。因此它具有高 mAP,但在 0:5 fps 时仍远非实时。
最近的 Faster R-CNN 用神经网络代替选择性搜索来提出边界框,类似于 Szegedy 等人。 [8] 在我们的测试中,他们最准确的模型达到 7 fps,而更小、不太准确的模型以 18 fps 运行。 Faster R-CNN 的 VGG-16 版本比 YOLO 高 10 mAP,但也比 YOLO 慢 6 倍。 Zeiler-Fergus Faster R-CNN 仅比 YOLO 慢 2.5 倍,但也不太准确。

4.2 VOC 2007 误差分析
为了进一步检查 YOLO 和最先进检测器之间的差异,我们查看了 VOC 2007 上结果的详细分类。我们将 YOLO 与 Fast RCNN 进行比较,因为 Fast R-CNN 是 PASCAL 上性能最高的检测器之一,并且它的检测结果是公开的。
我们使用 Hoiem 等人的方法和工具。 [19] 对于测试时的每个类别,我们查看该类别的前 N 个预测。每个预测要么是正确的,要么根据错误类型进行分类:
正确:正确的类和 IOU > .5
本地化:正确的类,.1 < IOU < .5
相似:类相似,IOU > .1
其他:类错误,IOU > .1
背景:任何对象的 IOU < .1
图 4 显示了所有 20 个类的平均每个错误类型的细分。
YOLO 努力正确定位对象。定位错误占 YOLO 错误的比例比所有其他来源的总和还要多。 Fast R-CNN 的定位错误少得多,但背景错误多得多。 13.6% 的顶级检测是不包含任何对象的误报。 Fast R-CNN 预测背景检测的可能性几乎是 YOLO 的 3 倍。

4.3 结合Fast RCNN和YOLO
YOLO 的背景错误比 Fast R-CNN 少得多。通过使用 YOLO 消除 Fast R-CNN 的背景检测,我们的性能得到了显着提升。对于 R-CNN 预测的每个边界框,我们检查 YOLO 是否预测了类似的框。如果是这样,我们会根据 YOLO 预测的概率和两个框之间的重叠来提高该预测。

最好的 Fast R-CNN 模型在 VOC 2007 测试集上实现了 71.8% 的 mAP。与 YOLO 结合使用时,其 mAP 提升 3.2% 至 75.0%。我们还尝试将顶级 Fast R-CNN 模型与其他几个版本的 Fast R-CNN 结合起来。这些合奏产生了 0.3% 到 0.6% 之间的 mAP 小幅增长,详见表 2。
YOLO 的提升不仅仅是模型集成的副产品,因为组合不同版本的 Fast R-CNN 几乎没有什么好处。相反,正是因为 YOLO 在测试时犯了不同类型的错误,它才如此有效地提升了 Fast R-CNN 的性能。
不幸的是,这种组合并没有从 YOLO 的速度中受益,因为我们分别运行每个模型然后组合结果。然而,由于 YOLO 速度如此之快,与 Fast R-CNN 相比,它不会增加任何显着的计算时间。

4.4 VOC 2012 年结果
在 VOC 2012 测试集上,YOLO 的 mAP 得分为 57.9%。 这低于当前最先进的水平,更接近于使用 VGG-16 的原始 R-CNN,见表 3。与最接近的竞争对手相比,我们的系统在处理小物体时遇到了困难。 在瓶子、羊和电视/显示器等类别上,YOLO 的得分比 R-CNN 或 Feature Edit 低 8-10%。 然而,在 cat 和 train 等其他类别上,YOLO 实现了更高的性能。
我们组合的 Fast R-CNN + YOLO 模型是性能最高的检测方法之一。 Fast R-CNN 通过与 YOLO 的结合获得了 2.3% 的改进,在公共排行榜上提升了 5 位。
4.5 泛化性:艺术品中的人物检测
用于对象检测的学术数据集从同一分布中提取训练和测试数据。在现实世界的应用程序中,很难预测所有可能的用例,并且测试数据可能与系统之前看到的不同 [3]。我们将 YOLO 与 Picasso 数据集 [12] 和 People-Art 数据集 [3] 上的其他检测系统进行比较,这两个数据集用于测试艺术品上的人物检测。
图 5 显示了 YOLO 与其他检测方法的性能对比。作为参考,我们在所有模型仅在 VOC 2007 数据上训练的人身上给出了 VOC 2007 检测 AP。 Picasso 模型使用 VOC 2012 进行训练,而 People-Art 模型使用 VOC 2010 进行训练。
R-CNN 在 VOC 2007 上具有很高的 AP。但是,当应用于艺术品时,R-CNN 会大幅下降。 R-CNN 对边界框建议使用选择性搜索,该建议针对自然图像进行了调整。 R-CNN 中的分类器步骤只看到小区域,需要好的建议。

DPM 在应用于艺术品时可以很好地保持其 AP。先前的工作理论上认为 DPM 表现良好,因为它具有对象形状和布局的强大空间模型。虽然 DPM 不会像 R-CNN 那样退化,但它是从较低的 AP 开始的。

YOLO 在 VOC 2007 上具有良好的性能,并且在应用于艺术品时,其 AP 降级低于其他方法。与 DPM 一样,YOLO 对对象的大小和形状以及对象之间的关系以及对象通常出现的位置进行建模。艺术品和自然图像在像素级别上非常不同,但它们在对象的大小和形状方面相似,因此 YOLO 仍然可以预测良好的边界框和检测。
5. 野外实时检测
YOLO 是一种快速、准确的物体检测器,非常适合计算机视觉应用。 我们将 YOLO 连接到网络摄像头并验证它是否保持实时性能,包括从摄像头获取图像和显示检测结果的时间。
由此产生的系统是互动的和引人入胜的。 虽然 YOLO 单独处理图像,但当连接到网络摄像头时,它的功能就像一个跟踪系统,在物体移动和外观变化时检测它们。 该系统的演示和源代码可以在我们的项目网站上找到:http://pjreddie.com/yolo/。
6. 结论
我们介绍了 YOLO,一个统一的目标检测模型。 我们的模型构造简单,可以直接在完整图像上进行训练。 与基于分类器的方法不同,YOLO 是在与检测性能直接对应的损失函数上训练的,整个模型是联合训练的。
Fast YOLO 是文献中最快的通用目标检测器,YOLO 推动了实时目标检测的最新技术。 YOLO 还可以很好地推广到新领域,使其成为依赖快速、稳健的对象检测的应用程序的理想选择。