You Only Look Once: Unified, Real-Time Object Detection
Abstract
我们提出了YOLO,一种检测物体的新方法。之前关于物体检测的工作重新利用分类器来进行检测。相反,我们把物体检测看作是一个回归问题,通过回归直接得到空间上分离的边界框和相关的类别概率。一个单一的神经网络在一次评估中直接从完整的图像中预测出边界框和类别概率。由于整个检测管道是一个单一的网络,它可以直接对检测性能进行端到端的优化。
我们的统一架构是非常快的。我们的基本YOLO模型以每秒45帧的速度实时处理图像。该网络的一个较小的版本,即快速YOLO,每秒处理惊人的155帧,同时仍然实现了其他实时检测器的两倍的mAP。与最先进的检测系统相比,YOLO会出现更多的定位错误,但在背景上预测假阳性的可能性较小。最后,YOLO学习了非常普遍的物体表征。当从自然图像泛化到艺术品等其他领域时,它优于其他检测方法,包括DPM和R-CNN。
1. 介绍
人类看一眼图像,就能立即知道图像中的物体是什么,它们在哪里,以及它们如何互动。人类的视觉系统是快速和准确的,使我们能够在几乎没有意识的情况下完成复杂的任务,如驾驶。快速、准确的物体检测算法将使计算机能够在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时场景信息,并释放出通用的、反应灵敏的机器人系统的潜力。
目前的检测系统重新利用分类器来进行检测。为了检测一个物体,这些系统采用了该物体的分类器,并在测试图像的不同位置和比例上对其进行评估。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,在整个图像上以均匀间隔的位置运行分类器[10]。
很多最近的方法例如R-CNN使用region proposal的方法来首先在图像中生成潜在的边界框,然后在这些边界框上运行一个分类器。在分类之后,通过后处理来重新定义边界框,消除重复检测,并根据场景中的其他物体对盒子重新评分[13]。这些复杂的管道很慢,而且很难优化,因为每个单独的组件都必须单独训练。
我们将物体检测重塑为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率。使用我们的系统,你只需看一次(YOLO)图像,就可以预测有哪些物体存在,它们在哪里。
YOLO简单得令人耳目一新:见图1。一个卷积网络同时预测多个边界框和这些框的类别概率。YOLO在完整的图像上进行训练,直接优化检测性能。与传统的物体检测方法相比,这种统一的模型有几个好处。
首先,YOLO的速度非常快。由于我们把检测看作是一个回归问题,所以我们不需要一个复杂的管道。我们只需在测试时在新图像上运行我们的神经网络来预测检测结果。我们的基本网络在Titan X GPU上以每秒45帧的速度运行,没有批量处理,快速版本的运行速度超过150帧。这意味着我们可以实时处理流媒体视频,延迟时间不到25毫秒。此外,YOLO达到了其他实时系统平均精度的两倍以上。关于我们的系统在网络摄像头上实时运行的演示,请看我们的项目网页:http://pjreddie.com/yolo/
其次,YOLO在做出预测时对全局图像进行推理,与滑动窗口和基于region proposal的技术不同,YOLO在训练和测试期间可以看到整个图像,因此它隐含地编码了关于类别和外观的上下文信息。Fast R-CNN是一种顶级的检测方法[14],它把图像中的背景斑块误认为是物体,因为它不能看到更大的背景。与Fast R-CNN相比,YOLO的背景错误数量不到一半。
第三,YOLO学习了物体的通用性表征。当在自然图像上进行训练并在艺术品上进行测试时,YOLO在很大程度上超过了DPM和R-CNN等顶级检测方法。由于YOLO具有高度的通用性,它在应用于新领域或意外输入时不太可能崩溃。
YOLO在准确性方面仍然落后于最先进的检测系统。虽然它能快速识别图像中的物体,但却难以精确地定位一些物体,特别是小物体。我们在实验中进一步研究这些权衡。
我们所有的训练和测试代码都是开源的。各种预训练的模型也可供下载
2. 统一定位
我们将物体检测的独立组件统一到一个神经网络中。我们的网络使用全局图像特征来预测每个边界框。它还同时预测一个图像的所有类别的所有边界框。这意味着我们的网络对整个图像和图像中的所有物体进行全局推理。YOLO设计实现了端到端的训练和实时速度,同时保持了高平均精度。
我们的系统将输入的图像划分为一个$$S\times S$$网格。如果一个物体的中心落入一个网格单元,该网格单元就负责检测该物体。每个网格单元都预测了B个边界框和这些框的置信度。这些置信度分数反映了模型对网格包含物体的自信程度,也反映了模型认为它预测的盒子有多准确。形式上,我们将置信度定义为$Pr(object)*IOU^_$。如果该单元格中没有物体存在,那么置信度分数应该为零。否则,我们希望置信度得分等于预测框和地面真相之间的交集(IOU)。每个边界框由5个预测值组成:x、y、w、h和置信度。(x,y)坐标代表盒子的中心相对于网格单元的边界。宽度和高度是相对于整个图像的预测。最后,置信度预测表示预测的box和任何groud truth之间的IOU。
每个网格也预测C个条件类别概率,$$Pr(Class_i|Object)$$,前提是这些网格必须包含物体。我们对每个网格单元只预测一组类别概率,而不考虑盒子的数量B。
在测试时,我们将条件类概率和box置信度预测相乘:
这给我们提供了每个盒子的特定类别的信心分数。这些分数既表示该类出现在盒子里的概率,也表示预测的box与物体的吻合程度。
![image-20230217095844942](F:\Scientific Research\文献分享\论文\Object Detection\PDF\You Only Look Once Unified, Real-Time Object Detection.assets\image-20230217095844942.png)
为了在PASCAL VOC上评估YOLO,我们使用S=7,B=2。PASCAL VOC有20个标记的类,所以C = 20。我们的最终预测是一个 $$7\times 7\times 30$$的张量
2.1 网络设计
我们将这个模型实现为卷积神经网络,并在PASCAL VOC检测数据集[9]上对其进行评估。网络的初始卷积层从图像中提取特征,而全连接层则预测输出概率和坐标。
我们的网络结构是受用于图像分类的GoogLeNet模型的启发[34]。我们的网络有24个卷积层,然后是2个全连接层。我们没有使用GoogLeNet使用的inception module,而是简单地使用了$1\times1$个reduction层,然后是$$3\times 3$$个卷积层,与Lin等人[22]类似。完整的网络显示在图3中。我们还训练了一个快速版本的YOLO,旨在推动快速物体检测的边界。快速YOLO使用的神经网络的卷积层较少(9层而不是24层),而且这些层中的过滤器也较少。除了网络的大小,所有的训练和测试参数在YOLO和快速YOLO之间都是一样的。
![image-20230217100703778](F:\Scientific Research\文献分享\论文\Object Detection\PDF\You Only Look Once Unified, Real-Time Object Detection.assets\image-20230217100703778.png)
我们网络的最终输出是预测的$7\times 7 \times 30$张量。
2.2. 训练
我们在ImageNet 1000级竞赛数据集上预训练卷积层[30]。在预训练中,我们使用了图3中的前20个卷积层,然后是一个平均集合层和一个全连接层。我们对这个网络进行了大约一周的训练,并在ImageNet 2012验证集上取得了88%的单作物前5名的准确率,与Caffe的Model Zoo[24]中的GoogLeNet模型相当。我们使用Darknet框架进行所有的训练和推理[26]。
然后我们转换模型来进行检测。Ren等人的研究表明,在预训练的网络中同时添加卷积层和连接层可以提高性能[29]。按照他们的例子,我们添加了四个卷积层和两个全连接层,权重随机初始化。检测通常需要精细的视觉信息,因此我们将网络的输入分辨率从$$224\times 224$$提高到$$448\times 448$$。我们的最后一层预测了类别概率和边界框坐标。我们通过图像的宽度和高度对边界框的宽度和高度进行归一化处理,使其介于0和1之间。我们将边界框的x和y坐标参数化为特定网格单元位置的偏移,因此它们也介于0和1之间。
我们在最后一层使用线性激活函数,所有其他层都使用下面的leaky线性激活。
![image-20230217101223785](F:\Scientific Research\文献分享\论文\Object Detection\PDF\You Only Look Once Unified, Real-Time Object Detection.assets\image-20230217101223785.png)
我们对模型输出的平方误差之和进行优化。我们使用平方误差,因为它很容易优化,然而它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相同,这可能不是很理想。此外,在每张图像中,许多网格单元不包含任何物体。这就把这些单元的 "置信度 "分数推向了零,往往压倒了含有物体的单元的梯度。这可能导致模型不稳定,使训练在早期就出现偏差。
为了解决这个问题,我们增加了边界框坐标预测的损失,减少了不包含物体的盒子的置信度的损失。我们使用两个参数,
和
来实现这一目标。我们设定
平方误差也同样权衡了大盒子和小盒子的误差。我们的误差度量应该反映出大盒子里的小偏差比小盒子里的小偏差更重要。为了部分解决这个问题,我们预测边界框的宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测了每个网格单元的多个边界框。在训练时,我们只希望每个物体有一个边界框预测器负责。我们指定一个预测器 "负责 "预测一个物体,依据是哪个预测器与ground truth的当前IOU最高。这就导致了box预测器之间的专业化。每个预测器都能更好地预测某些尺寸、长宽比或物体的类别,从而提高整体召回率。
训练时我们优化下面损失函数:
其中
表示物体是否在cell i中出现,
表示cell i中第j个bbox预测器是否应该用于预测。
请注意,损失函数只在物体出现在该网格单元时惩罚分类错误(因此前面讨论的条件类概率)。它也只在该预测器对ground truth "负责 "时惩罚边界盒坐标错误(即在该网格单元的任何预测器中具有最高的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和广泛的数据增强。在第一个连接层之后有一个dropout(0.5),以防止层与层之间的共同适应[18]。对于数据增强,我们引入了随机缩放和平移,最多为原始图像大小的20%。我们还随机调整图像的曝光度和饱和度,在HSV色彩空间中最多调整1.5的系数。
2.3 推理
就像在训练中一样,预测测试图像的检测结果只需要一次网络评估。在PASCAL VOC上,网络预测了每幅图像的98个边界框和每个框的类别概率。与基于分类器的方法不同,YOLO在测试时速度极快,因为它只需要一次网络评估。
网格设计使界线盒预测具有空间多样性。通常情况下,一个物体落在哪个网格单元是很清楚的,网络只对每个物体预测一个盒子。然而,一些大型物体或靠近多个单元边界的物体可以被多个单元很好地定位。非最大限度的抑制可以用来修复这些多重检测。虽然非最大抑制对性能并不像R-CNN或DPM那样关键,但非最大抑制在mAP中增加了23%。
2.4 YOLO局限性
YOLO对边界框的预测施加了强烈的空间约束,因为每个网格单元只能预测两个框,而且只能有一个类别。这种空间约束限制了我们的模型所能预测的附近物体的数量。我们的模型在处理成群出现的小物体时很吃力,比如说鸟群。
由于我们的模型从数据中学习预测边界框,它很难归纳出新的或不寻常的长宽比或配置的物体。我们的模型还使用了相对粗糙的特征来预测边界框,因为我们的架构有多个来自输入图像的下采样层。
最后,虽然我们在一个近似于检测性能的损失函数上进行训练,但我们的损失函数对小边界框与大边界框中的错误处理是一样的。大框中的小错误通常是良性的,但小框中的小错误对IOU的影响要大得多。我们的主要错误来源是不正确的定位