You Only Look Once: Unified, Real-Time Object Detection

Abstract 
提出了一种新的目标检测方法YOLO。先前关于目标检测的工作重新定义分类器来执行检测。相反,我们将目标检测定义为一个回归到空间分离的边界框和相关的类概率中的回归问题。在一次评估中,单个神经网络直接从完整图像预测边界框和类概率。由于整个检测管道是一个单一的网络,可以直接从检测性能上进行端到端优化。
我们的统一架构非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。一个更小版本的网络——Fast YOLO,处理速度达到惊人的每秒155帧,同时仍然达到其他实时探测器的mAP的两倍。与最先进的检测系统相比,YOLO会产生更多的定位错误,但很少产生背景上的误报。最后,YOLO学习目标的一般表示。当从自然图像推广到艺术作品等其他领域时,它的性能优于其他检测方法,包括DPM和R-CNN。
1. Introduction 

人们只要看一眼图像,就能立即知道图像中的对象是什么,它们在哪里,以及它们是如何相互作用的。人类的视觉系统快速而准确,让我们能够在几乎没有意识的情况下完成驾驶等复杂的任务。快速、准确的目标检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传递实时的场景信息,并为通用、响应灵敏的机器人系统释放潜力。
当前的检测系统重新使用分类器来执行检测。为了检测一个对象,这些系统使用该对象的分类器,并在测试图像的不同位置和尺度上对其进行评估。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,在整个图像[10]上以均匀间隔的位置运行分类器。

最近的一些方法,如R-CNN,使用区域建议方法( region proposal methods),首先在图像中生成潜在的边界框,然后在这些建议的框上运行分类器。分类后,通过后处理对边界框进行细化,消除重复检测,并根据场景[13]中的其他物体对边界框进行重新提取。这些复杂的管道缓慢且难以优化,因为每个单独的组件必须单独训练。我们将目标检测作为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,你只需看一次图片(YOLO),就可以预测物体的存在和位置。

YOLO非常简单:参见图1。

一个卷积网络同时预测多个边界框和这些框的类概率。YOLO训练完整的图像,并直接优化检测性能。与传统的目标检测方法相比,这种统一的模型有几个优点:
首先,YOLO非常快。因为我们将检测作为一个回归问题,所以我们不需要复杂的管道。我们只是在测试时对新图像运行神经网络来预测检测结果。我们的没有使用批处理的基本网络在Titan X GPU上以每秒45帧的速度运行;一个快速版本的运行速度则超过150帧/秒。这意味着我们可以实时处理流视频,延迟时间不到25毫秒。此外,YOLO的平均精度是其他实时系统的两倍多。有关我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/. 

其次,YOLO在进行预测时,会从全局对图像进行推理。与滑动窗口和基于区域建议的技术不同,YOLO在训练和测试时看到整个图像,因此它隐式地编码关于类及其外观的上下文信息。Fast R-CNN,一种顶级的检测方法[14],会误判一张图像的背景patches成一个对象,因为它不能看到更大的上下文信息。与Fast R-CNN相比,YOLO产生的背景错误还不到其一半。
第三,YOLO可学习对象的可概括表示。通过对自然图像的训练和对艺术作品的测试,YOLO的检测效果远远超过DPM和R-CNN等顶级检测方法。由于YOLO是高度可泛化的,所以在应用到新领域或意外输入时,它不太可能崩溃。
YOLO在准确度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,尤其是小对象。我们在实验中进一步研究了这些权衡。
我们所有的训练和测试代码都是开源的。各种预先训练的模型也可以下载。

2. Unifified Detection 

我们将目标检测的各个部分统一到一个单独的神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测一个图像在所有类中的所有边界框。这意味着我们的网络对整个图像和图像中的所有对象进行全局推理。YOLO设计支持端到端的训练和实时速度,同时保持较高的平均精度。
我们的系统将输入图像分割成S×S(举例使用S=7)网格。如果一个物体的中心落在一个网格单元中,该网格单元负责检测该物体。
每个网格单元格预测B个边界框和这些框的置信度得分。这些置信度评分反映了模型对框中包含对象的置信度,以及模型对框的预测准确度。在形式上,我们将置信度定义为Pr(Object)*IOUtruthpred。这计算的是每个框的置信度)如果该单元格中不存在对象(那么以该单元格为中心生成的框肯定也没有对象),则置信度得分应为零(因为Pr(Object)=0)。否则,我们希望置信度得分等于预测框与真实框之间的交并比(IOU)(因为Pr(Object)=1)。

每个边界框包含5个预测值:x、y、w、h和置信度。(x, y)坐标表示框的中心相对于网格单元格的边界。宽度w和高度h是相对于整个图像预测的。最后,置信度预测表示预测框与任何真实框之间的IOU。

补充:x、y、w、h怎么计算:

假设计算得到的边界框的位置输出为(xi、yi、wi、hi),该边界框对应的单元格的左上角的坐标为(x',y')整个7*7的图像大小为W*H

  • w = wi / W
  • h = hi / H
  • x = xi - x'
  • y = yi- y'


每个网格单元还预测C个条件类概率,Pr(Classi|Object),表示该单元格存在物体且属于第i类的概率。这些概率取决于包含对象的网格单元。我们只预测每个网格单元的一组类概率(因此该单元格产生的框对应的类概率也是它),而不考虑框的数量B。
在测试时,我们将条件类概率和单个框的置信度预测相乘,

这就为我们提供了每个框的特定类别的置信度分数。这些分数编码了类出现在方框中的概率以及预测的方框与对象的匹配程度。

得到每个 box 的 class-specific confidence score 以后,设置阈值,滤掉得分低的 boxes,对保留的 boxes 进行 NMS 处理,就得到最终的检测结果。

 为了在PASCAL VOC数据集上评估YOLO,使用S=7,B=2(即将最后输出的特征分割成7*7网格,每个网格预测2个边界框)。PASCAL VOC数据集中标注了20个类别,因此C=20。每个边界框输出5个预测值,所以最后的预测结果为7*7*(2*5+20)大小的张量

2.1. Network Design 

我们将该模型实现为卷积神经网络,并在PASCAL VOC检测数据集[9]上进行了评价。网络的初始卷积层从图像中提取特征,而全连接层则预测输出的概率和坐标。
我们的网络架构受到了GoogLeNet图像分类[34]模型的启发。我们的网络有24个卷积层,然后是两个全连接层。代替GoogLeNet使用的inception模块,我们简单地使用1×1的reduction层,然后是3×3的卷积层,类似于Lin等人的[22]使用的结构。整个网络如图3所示:

我们还训练了一个YOLO的快速版本,旨在推动快速对象检测的边界。Fast YOLO使用的神经网络具有更少的卷积层(9层而不是24层)和更少的过滤器。除了网络的大小,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。

网络最终的输出是预测得到的7*7*30大小的张量

2.2. Training 

我们在ImageNet 1000个类别的数据集[30]上对卷积层进行了预训练。在训练前,我们使用图3中的前20个卷积层,然后是一个平均池化层和一个全连接层。我们对这个网络进行了大约一周的训练,并在ImageNet 2012验证集上获得了88%的单一  crop top-5准确率,与Caffe的 Model Zoo[24]中的GoogLeNet模型相当。我们使用Darknet框架进行所有的训练和推断。
然后将模型转换为执行检测。Ren等人的研究表明,将卷积层和连接层都加入到预先训练的网络中可以提高性能[29]。按照他们的例子,我们添加了四个卷积层和两个全连接层,它们的权值是随机初始化的。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224提高到448×448。
最后一层预测类概率和边界框坐标。我们通过图像的宽度和高度来规格化边界框的宽度和高度,使它们落在0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移量,因此它们也在0和1之间有界。
我们对最后一层使用线性激活函数,对所有其他层使用以下leaky rectified线性激活函数:

我们对模型输出的平方和误差进行了优化。我们使用平方和误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相等,但分类误差可能不是最理想的。同样,在每个图像中许多网格单元不包含任何对象。这将这些网格的“置信度”分数推向零,通常会压倒包含对象的网格的梯度。这可能会导致模型不稳定,导致训练在早期出现分歧。
为了解决这个问题,我们增加了边框坐标预测的损失,减少了不包含对象的边框的置信度预测的损失。我们使用两个参数,λcoord和λnoobj成就这事。我们设置λcoord = 5和λnoobj = 5。
平方和误差在大方框和小方框中有着相等的权重。我们的误差度量应该反映出大框里的小偏差比小框里的小偏差更不重要。为了部分解决这个问题,我们预测边界框的宽度和高度的平方根,而不是直接预测宽度和高度

YOLO预测每个网格单元格有多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们指定一个预测器“负责”预测一个基于哪个预测框与真实框具有最高的IOU的对象。这导致了边界框预测器之间的专门化。每个预测器都能更好地预测特定的大小、长宽比或对象的类别,从而提高整体召回率。
在训练过程中,我们优化了以下多部分的损失函数:

其中Ιiobj表示对象是否出现在单元格i中(即是否有对象中心落在这个单元格中,中心不在的该Ιiobj=0),Ιijobj表示单元格i中的第j个边界框预测器对该预测“负责”(IOU最大的表示负责,所以B个框中IOU不是最大的框的Ιijobj=0)。请注意,loss函数只在网格单元中出现对象时才惩罚分类错误(因此前面讨论了条件类概率)。它还只在该预测器对真实框是“负责”的(即在该网格单元中有着任意预测器的最高的IOU)时候惩罚边界框坐标错误(即该框是该单元格的B个框中与真实框IOU值最大的的那个框时才惩罚)。

我们通过PASCAL VOC 2007和2012的训练和验证数据集,对网络进行了135个epoch的训练。在2012的测试中,我们还包括了训练的VOC 2007测试数据。在整个训练过程中,我们使用batch size为64,momentum为0.9,decay为0.0005。
我们的学习率策略如下:在第一个阶段,我们慢慢地把学习率从10-3提高到10-2
如果我们从一个高的学习率开始,我们的模型经常由于不稳定的梯度而发散。我们继续以10-2训练75个周期,然后10-3训练30个周期,最后10-4训练30个周期。
为了避免过度拟合,我们使用了dropout和广泛的数据扩充方法。在第一个连接层之后,速率为.5的dropout层阻止了层之间的相互适应。
为了增加数据,我们引入了随机缩放和高达原始图像大小20%的平移。我们还随机调整图像的曝光和饱和度到高达1.5倍的HSV色彩空间。

2.3. Inference 

就像在训练中一样,预测检测测试图像只需要一个网络评估。在PASCAL VOC上,该网络预测每个图像的98(7*7*2)个边界框和每个框的类概率。YOLO在测试时非常快,因为它只需要一个网络评估,不像其他基于分类器的方法。
网格设计在边界框预测中加强了空间多样性。通常情况下,一个对象落在哪个网格单元中是很清楚的,而网络只预测每个对象的一个框。但是,一些大型对象或多个单元格边界附近的对象可以被多个单元格很好地定位。非最大抑制方法可以用来修复这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制使mAP增加了2-3%。

2.4. Limitations of YOLO 
YOLO对边界框的预测施加了很强的空间约束,因为每个网格只能预测两个框,并且只能有一个类。这种空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型将在成群出现的小物体作挣扎,如鸟群。
由于我们的模型学会了从数据中预测边界框,所以它很难推广到具有新的或不寻常的纵横比或配置的对象。我们的模型还使用相对粗糙的特性来预测边界框,因为我们的架构有多个输入图像的向下采样层

最后,当我们训练一个接近检测性能的损失函数时,我们的损失函数在小边界框和大边界框中处理错误是一样的。大盒子里的小错误通常是良性的,但小盒子里的小错误对数据的影响要大得多。
我们的主要错误来源是不正确的定位。

中间省略。。。。

6. Conclusion 

介绍了一种统一的目标检测模型YOLO。我们的模型构造简单,可以直接在整张图像上训练。与基于分类器的方法不同,YOLO在一个直接对应于检测性能的损失函数上进行训练,并对整个模型进行联合训练。
Fast YOLO是目前文献中最快的通用型目标探测器,YOLO推动了实时目标检测的发展。YOLO还可以很好地推广到新的领域,这使得它非常适合依赖于快速、健壮的对象检测的应用程序。

原文地址:https://www.cnblogs.com/wanghui-garcia/p/12259938.html