目录
Abstract
1. Introduction
2. Unified Detection
2.1 Network Design
2.2 Training
2.3 Inference
2.4 Limitation of YOLO
3. Comparison to Other Detection System
4. Experiment
这一节仅对4.2小节进行分析(which is Interesting)
4.2 VOC 2007 Error Analysis
6. Conclusion
Abstract
我们提出了一个新方法YOLO来进行目标检测。之前的目标检测任务重新利用了分类器来完成检测,而我们将目标检测看作一个在空间上将边界框和与之相关的类别概率分别计算的回归问题。单个神经网络将直接在整幅图像通过一次评价来预测边界框和类别概率。由于整个检测流程是在一个网络中完成的,因此该检测网络可以端到端地进行性能优化。
我们网络是一个统一的框架,因此其检测速度非常快。我们的基础YOLO模块检测图像可以达到每秒45帧。一个小版本的网络称为Fast YOLO,它可以达到惊人的每秒155帧,并实现了两倍于其它实时检测网络的mAP.
与其它优秀的检测网络相比,YOLO产生了更多的定位误差,但是其将背景检测为目标的可能性更小。最终,YOLO可以学习非常通用的目标表示。当从自然图像到艺术品等其它领域进行泛化时,YOLO优于其它检测方法,包括DPM和R-CNN。
1. Introduction
人类看到一张图像时可以快速识别图像中的物体及其位置,以及物体之间的相互关系。人类视觉系统的快速和准确使得我们能够完成复杂的任务,比如很少有意识地思考如何开车。快速,准确的目标检测算法将允许计算机在没有专用传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并释放通用,响应式机器人系统的潜力。
当前的目标检测系统重新利用了分类器来完成检测。为了检测一个目标,这些系统使用分类器检测并评估其对测试图像中不同位置和不同尺度的物体检测性能。DPM系统使用了滑窗(sliding window)的方法,其中分类器在整幅图像上均匀间隔的位置运行。
最近的R-CNN网络使用了区域提取(region proposal)的方法,其首先生成潜在的边界框(bounding boxes),然后在这些框上使用分类器。分类完成以后,后处理用来作边界框的重定位,消除重复的检测,以及根据场景中的其它物体对边界框进行重新评分。这些复杂的过程使得检测速度慢并难以进行优化,因为每单个模块必须分别进行训练。
我们将目标检测看作一个回归问题,直接从图像像素得到边界框的坐标和类别概率。使用我们的网络,you only look once (YOLO) at an image 就能预测出图像中是什么物体及其在什么位置。
YOLO非常简洁,如图一所示。单个卷积网络可以同时预测多个边界框及其类别概率。YOLO在整幅图像上进行训练并能够直接优化检测性能。这个统一的模块比传统目标检测方法具有更多的优势。
第一,YOLO网络的速度非常快。由于我们将检测看作一个回归问题,因此其不需要复杂的过程。我们只是在检测时在新图像上进行检测。我们的基础网络在没有批处理时可以在Titan X GPU上达到每秒45帧,快速版的网络可以超过150fps. 这意味着我们可以实时处理流式视频,延迟时间少于25毫秒。 此外,YOLO的平均精度是其他实时系统的两倍多。
第二,YOLO预测时可以在整幅图像上进行推理。与滑窗和基于区域提取的方法不同,YOLO可以在训练和测试时看到整幅图像,因此它可以隐含地编码有关类的上下文信息及其外观。 (YOLO sees the entire image during training and test time so it implicitly encodes contextual information about classes as well as their appearance.)Fast R-CNN错误地将图像中的背景块看作物体,因为它不能看到更大的上下文信息。与Fast R-CNN相比,YOLO的背景错误数量不到一半。
第三,YOLO可以学习物体的泛化表示。当在自然图像上进行训练并在艺术图像上进行预测时,YOLO大幅优于DPM和Fast R-CNN等顶级检测方法。由于YOLO具有高度可通用性,因此在应用于新域或意外输入时不太可能发生故障。
YOLO仍然在精度上落后于其它检测方法。虽然它可以快速地识别图像中的物体,但它很难精确地定位某些物体,尤其是小物体。我们在实验中进一步研究了这些权衡。
2. Unified Detection
我们将目标检测的单独组件统一到单个神经网络中。我们的网络使用在整幅图像上提取的特征来预测每个边界框。它还同时预测所有类的所有边界框。这意味着我们的网络全局了解整个图像和图像中的所有对象。YOLO的设计支持端到端地训练和实时速度,同时保持较高的平均精度。
YOLO网络将输入图像分成 S*S 的网格。如果一个物体的中心落在一个网格单元中,那么这个网格将负责检测这个落在其中的物体。
每个网格单元预测 B 个边界框及其置信度分数。这些置信度分数反映了网络在多大程度上相信边界框中包含一个物体,以及网络在多大程度上认为该边界框是它自己预测的。我们将置信度分数定义为 Pr(Object) * IOU. 如果单元中没有物体存在,那么置信度分数为零;否则置信度分数等于预测框和真实框之间的联合交叉IOU。
每个边界框包括 5 个预测值:x, y, w, h 和置信度分数 Pr(Object) * IOU. (x, y) 坐标表示相对于网格单元边界的框的中心。相对于整个图像预测宽度w和高度h。最后,置信度预测表示预测框与真实框之间的IOU。
每个网格单元预测 C 个类别条件概率,Pr(Class[i] | Object). 这些概率适用于包含对象的网格单元。我们只预测每个网格单元的一组类概率,而不管方框B的数量。
在测试阶段,我们将条件类别概率与单个盒子的置信度预测相乘,
这给出了每个盒子box的特定类别的置信度分数。这些特定类别的置信度分数编码该类在框中的概率以及预测框和物体的匹配程度。
YOLO在检测PASCAL VOC数据集时,使 S=7,B=2. PASCAL VOC数据集有20种标记的类别,因此 C=20. 我们最终预测的是一个 7*7*30 的张量。(S * S * (B * 5 + C))
2.1 Network Design
我们将此模型实现为卷积神经网络,并在PASCAL VOC检测数据集上进行评估。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
我们的网络结构受到GoogLeNet图像分类模型的启发。我们的网络有24个卷积层和2个全连接层。除了GoogLeNet使用的inception模块,我们只使用1 * 1缩减层,然后使用3 * 3卷积层,类似于Lin等人的工作[22]。 完整的网络如图3所示。
我们网络的最终输出是7 * 7 * 30张量的预测。
2.2 Training
我们在1000类的ImageNet竞赛数据集上预先训练我们的卷积层。 对于预训练,我们使用图3中的前20个卷积层,然后是平均池化和全连接层。 我们训练这个网络大约一周,并在ImageNet 2012验证集上实现88%的single crop前5精度,与Caffe's Model Zoo中的GoogLeNet模型相当。我们使用Darknet框架进行所有训练和推理。
然后我们转换模型以执行检测。 任等人表明将卷积和连接层添加到预训练网络可以提高性能。 按照他们的例子,我们添加了四个卷积层和两个完全连接的层,随机初始化权重。 检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224 * 224提高到448 * 448。
我们的最后一层预测了类概率和边界框坐标。我们将边界框宽度和高度标准化为图像宽度和高度,使它们落在0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移量,因此它们也在0和1之间。
我们对最终层使用线性激活函数,所有其他层使用以下leaky线性激活:
我们优化模型输出中的求和平方误差。 我们使用求和平方误差,因为它很容易优化,但它并不完全符合我们最大化平均精度的目标。它的定位误差与分类误差相同,这可能并不理想。此外,在每个图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,通常会压制包含对象的单元格的渐变。这可能导致模型不稳定,导致训练在早期出现分歧。
为了解决这个问题,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信预测损失。 我们使用两个参数coord和noobj来完成此任务。 我们设置 Lamda(coord) = 5 和 Lamda(noobj) = 0.5 。
求和误差也同样可以加大大盒子和小盒子中的误差。我们的误差度量应该反映出大箱子中的小偏差比小箱子中的小。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是宽度和高度。
YOLO预测每个网格单元上有多个边界框。在训练时,我们只希望一个边界框预测器对一个物体负责。我们指定一个预测器只对与真实框具有最大IOU的预测物体负责。这导致边界框预测变量之间的特化。每个预测器都能更好地预测某些大小,宽高比或对象类别,从而提高整体召回率。
在训练期间,我们优化了以下多部分损失函数:
请注意,如果对象存在于该网格单元中,则损失函数仅惩罚分类错误(因此前面讨论过的条件类概率)。 如果该预测器对真实框“负责”(即,该网格单元中具有任何预测器的最高IOU),它也仅对边界框坐标误差进行处理。
我们在PASCAL VOC 2007和2012的训练和验证数据集上训练了大约135个时期的网络。在2012年测试时,我们使用VOC 2007测试数据作训练。在整个训练过程中,我们使用的批量大小为64,动量为0.9,衰减为0.0005。
我们的学习率安排如下:对于第一个时代,我们将学习率从10 -3缓慢提高到10 -2。如果我们从高学习率开始,我们的模型经常由于不稳定的梯度而发散。我们继续训练有10 -2为75个epochs,然后10 -3为30个epochs,最后10 -4为30个epochs。
为避免过度拟合,我们使用了丢失dropout和大量数据扩充。在第一个连接层之后,速率= 0.5的丢失层阻止了层之间的共同适应。对于数据增强,我们引入了高达原始图像大小20%的随机缩放和翻转。我们还在HSV颜色空间中随机调整图像的曝光和饱和度达1.5倍。
2.3 Inference
就像在训练中一样,预测测试图像的检测只需要一次网络评估。 在PASCAL VOC上,网络预测每个图像98个边界框和每个框的类概率。 YOLO在测试时非常快,因为它只需要一个网络评估,不像基于分类器的方法。
网格设计在边界框预测中强制实施空间多样性。通常很清楚一个对象落入哪个网格单元,并且网络仅为每个对象预测一个框。 然而,一些大物体或多个单元边界附近的物体可以被多个单元很好地定位。 非最大抑制可用于修复这些多个检测。 虽然对于R-CNN或DPM的性能并不重要,但非最大抑制在mAP中增加2-3%。
2.4 Limitation of YOLO
YOLO在边界框预测上实加了强大的空间约束,因为每个网格单元只预测两个框,并且只能有一个类。这个空间约束限制了我们的模型能够预测的附近物体的数量。我们的网络很难检测成群的小物体,比如成群的鸟。
由于我们的模型学习从数据中预测边界框,因此很难在新的或不寻常的宽高比或配置中的对象中进行泛化。 我们的模型还使用相对粗糙的特征来预测边界框,因为我们的网络结构具有来自输入图像的多个下采样层。
最后,当我们训练一个近似于检测性能的损失函数时,我们的损失函数在小边界框中处理错误与大边界框相同。 大盒子中的小错误通常是良性的,但小盒子中的小错误对IOU的影响要大得多。 我们的主要错误来源是错误的定位 (error location)。
3. Comparison to Other Detection System
目标检测是计算机视觉中的一个核心问题。检测过程通常开始于从输入图像中提取一系列鲁棒性特征(Haar, SIFT, HOG, convolutional features)。然后,分类器或定位器在特征空间中识别物体。这些分类器或定位器在整个图像中以滑动窗口方式运行,或者在图像中的某些区域子集上运行。我们将YOLO检测系统与几个顶级检测框架进行了比较,突出了关键的相似性和差异。
R-CNN:R-CNN及其变体使用区域提议而不是滑动窗口来查找图像中的物体。选择性搜索生成潜在的边界框,卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。 这个复杂过程的每个阶段必须独立精确调整,使得系统非常慢,在测试时每个图像需要超过40秒。
YOLO与R-CNN有一些相似之处。每个网格单元提出潜在的边界框,并使用卷积特征对这些框进行评分。但是,我们的系统对网格单元提议设置了空间限制,这有助于减轻同一对象的多次检测。我们的系统还提出了更少的边界框,每个图像只有98个,而选择性搜索只有2000个。最后,我们的系统将这些单独的组件组合成一个联合优化的模型。
4. Experiment
这一节仅对4.2小节进行分析(which is Interesting)
4.2 VOC 2007 Error Analysis
为了进一步研究YOLO与最先进的探测器之间的差异,我们将详细分析VOC 2007的结果。我们将YOLO与快速R-CNN进行比较,因为快速R-CNN是PASCAL中性能最高的探测器之一。 它的检测是公开可用的。
我们使用Hoiem等人的方法和工具。 对于测试时的每个类别,我们会查看该类别的前N个预测。 每个预测都是正确的,或者根据错误类型进行分类:
YOLO很难正确地定位对象。与所有其他错误来源结合相比,定位错误占YOLO更多的错误。 Fast R-CNN使定位错误少得多,但背景错误要多得多。 其中13.6%的顶级检测结果是误报,不包含任何对象。 与YOLO相比,Fast R-CNN预测背景检测的可能性几乎高出3倍。(总之,YOLO定位错误太多,但不容易将背景识别为物体。而Fast R-CNN定位错误较少,但由于缺乏上下文信息,将更多的背景识别为物体。)
这也就促成了为什么有4.3小节的测试结果,即将Fast R-CNN和YOLO相结合能够实现更高的检测精度。
6. Conclusion
我们介绍了一个用于目标检测的统一模型,YOLO。 我们的模型构造简单,可以直接在完整图像上进行训练。 与基于分类器的方法不同,YOLO针对与检测性能直接对损失函数进行训练,并且整个模型被联合训练。
Fast YOLO是文献中最快的通用目标检测器,YOLO推动了最先进的实时目标检测。 YOLO还可以很好地推广到新领域,使其成为依赖快速,强大的目标检测的应用程序的理想选择。
Reference paper:You Only Look Once: Unified, Real-Time Object Detection