论文地址:https://arxiv.org/abs/1506.02640
摘要
我们提出了YOLO,一种新的物体检测方法。之前的物体检测工作是通过重新使用分类器来进行检测。相反,我们将对象检测抽象为一个回归问题,描述为以空间分隔的边界框和相关的类别概率。一个简单的神经网络直接通过对完整图片的一次检验直接预测出边界框和分类类别的概率。因为整个识别的依据是一个单一的网络,所以可以在检测性能上进行端到端优化。
我们整体的框架非常快。我们的基础模型YOLO实时处理图片速度达到45帧/秒。我们网络的一个小规模版本,Fast YOLO,达到了惊人的处理155帧/秒的图片速率,并且仍然实现了其他实时检测器两倍的mAP。与当前最先进的监测系统相比,YOLO有较高的定位错误,但是对于没有物体区域的检测错误,YOLO远远少于其他系统。最后,YOLO学习了对象的很一般表示。从自然图像到毕加索和PeopleArt数据集上的作品,它的性能远远超过其他检测方法,包括DPM和RCNN。
1 - 介绍
人们瞥一眼图像,就能立即知道图像中的物体是什么,它们在哪里,以及他们之间的相互关系。人类的视觉系统是快而准确的,这允许我们完成像驾驶汽车之类的复杂任务而不用很多的意识想法参与。快速、准确的目标检测算法将允许计算机在任何天气下驾驶汽车而不需要专门的传感器,辅助设备可以将实时的场景信息传递给人类用户,并且释放通用的、反应灵敏的机器人系统能力。
现在的监测系统重新使用分类器来进行检测。为了检测一个物体,这些系统使用一个对应类别的分类器并且将其应用到测试图片中的不同区域和规模。例如deformable parts models(DPM)使用一个滑动窗口方法,以使得分类器作用于整张图片上的每一处。
最近的一些方法,像R-CNN,使用建议区域方法(region proposal method),先在图像中定位出边界框,然后再通过一个分类器来对边界框的内容进行分类。在分类之后,使用后处理对边框进行校正,消除重复边界框,并且根据场景中的其他物体,对边界框重新打分。这些复杂的做法使得该方法很忙并且很难去优化,因为每一个独立的部分都需要分开去训练。
我们重新抽象物体检测为一个简单的回归问题,直接从图像像素输入到输出边界框坐标和类别概率。使用我们的系统,你只需要看一遍(“only look once”, YOLO)图片就能预测出物体的类别和位置。
YOLO非常简单:见图1。一个简单的卷积网络同时预测多个边界框以及其每一个对应的分类类别概率。 YOLO是对完整图像进行训练并且直接优化检测效果的。这种统一的模型相比传统的目标检测模型有几个优点。
图1:YOLO目标检测系统。使用YOLO处理图像非常简单和直接。我们的系统(1)吊针输入图像的大小为448×448,(2)将图像输入到一个简单的卷积神经网络,并且(3)通过阈值筛选出检测结果(thresholds the resulting detections by the model’s confidence)。
第一个优点,YOLO很快。因为我们抽象物品检测为回归问题,我们不需要复杂的规则。在测试时候我们简单的将新图片喂入我们的神经网络。我们的基础网络运行速率为45帧/秒(在泰坦X GPU上没有批量处理),并且一个快速版本运行速率超过150帧/秒。这意味着我们能够以小于25ms的延迟实时处理流视频。更进一步,YOLO的平均精度是其他实时系统平均精度的两倍以上。有关我们系统的demo可以实时在网站上运行演示,请看我们的YouTube频道:https://goo.gl/bEs6Cj。
第二个优点,YOLO在预测的时候利用了图像的全局信息。不像基于滑动窗口和基于建议区域(region proposal)的技术,YOLO在训练和测试的时候都是看到整个图像的,所以它对类别的上下文信息以及它们的外观进行编码。Fast R-CNN,一种顶级的检测方法,由于无法看到更大的上下文信息,所以会在图像中错误地显示背景块(将背景块错误识别)。YOLO产生的背景错误不到R-CNN的一半。
第三个优点,YOLO学习对象的推广表示。在自然图像进行训练并且在艺术品上进行测试时,YOLO的表现远远超过DPM和R-CNN等顶级的检测方法。由于YOLO是高度一般化的,所以当其应用到新的领域或者意外的输入时,它不太可能出现崩溃(效果很差)。
我们训练和测试的代码全部已经开源的,可以在网上获取。各种预训练模型也可以下载。
2 - 统一识别(Unified Detection)
我们将物体检测的几个分离部分统一成一个简单的神经网络。我们的网络使用整张图片的特征去预测每一个边界框。它也支持对一张图片同时预测全部边界框。这意味着我们的网络关注了整张图片以及在这张图片中的所有物体的信息。这个YOLO设计允许端到端的训练以及在保证高平均准确率的同时确保实时速度。
我们的系统将输入图像分成S×S的网格。如果物品的中点落在某一个网格单元,这个网格单元将负责识别出这个物体。
每一个网格单元预测B个边界框以及对应于每一个边界框的置信分数。这些置信分数反映了这个模型预测该边界框包含某一物体的可能性以及模型认为对于这个边界框的预测有多高的准确率。 我们将置信度用公式定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU_{pred}^{truth} Pr(Object)∗IOUpredtruth 。如果在网格单元中没有物品,置信分数将为0。否则,我们定义置信分数为预测边界框和真实边界框的IOU(intersection over union)。
每一个边界框包含5个预测值: x , y , w , h x,y,w,h x,y,w,h 以及置信分数。 ( x , y ) (x,y) (x,y)一起表示了边界框相对于当前网格单元的位置。 w i d t h 和 h e i g h t width和height width和height预测的是占整张图片的比例。最后,置信分数表示预测边界框和真实边界框的IOU。
每一个网格单元同时也预测属于C类别的条件概率, P r ( C l a s s i ∣ O b j