YOLO论文笔记系列
YOLOv1:You Only Look Once:Unified, Real-Time Object Detection
摘要
我们提出了一种名为YOLO的目标检测新方法。以前的目标检测工作重新利用分类器来执行检测,相反,我们将目标检测框定为空间分离的边界框和相关类概率的回归问题。在一次评估中,一个单一的神经网络直接从完整的图像预测边界盒和类概率。由于整个检测流水线是一个单一的网络,可以直接对检测性能进行端到端的优化。
我们统一的架构非常快,我们的基本YOLO模型以每秒45帧的速度处理图像。该网络有一个更小的版本——Fast YOLO,能每秒处理155帧,同时仍然达到其他实时探测器的两倍mAP(mean Average Precision, 即各类别AP(目标检测中衡量检测精度的指标)的平均值)。与最先进的目标检测系统相比,YOLO会产生更多的定位错误,但是在背景上预测出假阳性(被模型预测为正的负样本)的情况会少一些。最后,YOLO学习非常一般的对象表示(泛化能力强),当从自然图像推广到艺术品等其他领域时,YOLO优于其他检测方法,包括DPM和R-CNN。
1.引言
人们瞥一眼图像就能立即知道图像中的物体、它们在哪里以及它们如何相互作用,人类的视觉系统快速并且准确,能让我们执行复杂的任务,像开车一样很少有意识的思想。快速、准确的目标检测算法将使计算机无需专门的传感器就能驾驶汽车,使辅助设备能够向人类用户传递实时场景信息并释放出通用的、响应式机器人系统的潜力。
当前的检测系统重新使用分类器来执行检测,为了检测一个对象,这些系统为该对象使用一个分类器,并在测试图像的不同位置和尺度上对其进行评估。像DPM这样的系统使用滑动窗口方法,其中,分类器在整个图像上均匀间隔的位置运行。
最近的方法,如R-CNN使用区域建议的方法,首先在图像中生成潜在的边界框,然后在这些建议的框上运行分类器。分类后进行后处理,细化边界框,消除重复检测,并且根据场景中的其他对象重新设置方框。这些复杂的流水线速度很慢,并且很难优化,因为每个单独的组件必须被单独训练。
我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,你只需要“看一次”(YOLO)图像,就能来预测出现了什么对象以及目标对象在哪里。
YOLO非常简单:如图1,一个卷积网络可以同时预测多个边界框和这些边界框的类概率。YOLO在完整图像上进行训练,并直接优化检测性能,与传统的目标检测方法相比,这种统一的模型有以下几个优点:
- YOLO速度极快。由于我们将检测作为一个回归问题,我们不需要复杂的管道,我们只需在测试图像时对新图像运行我们的神经网络来预测检测结果。我们的基础网络运行速度为每秒45帧,在Titan X GPU上且没有批处理,快速版本的运行速度则超过了每秒150帧。这意味着我们能用不到25毫秒的延迟来实时处理流媒体视频。此外,YOLO达到了其他实时系统两倍以上的平均精度,为了演示我们的系统在网络摄像头上实时运行,请参阅我们的项目网页:演示
- YOLO在预测时,会对图像进行全面地推理。与滑动窗口和基于区域建议的技术不同,YOLO在训练和测试期间看到整个图像,因此它隐式地编码关于类及其外观的上下文信息。Fast R-CNN——一种顶级的检测方法,它会将图像中的背景补丁误认为是物体,因为它看不到更大的上下文。与Fast R-CNN相比,YOLO产生的背景错误不到一半。
- YOLO学习对象的可泛化表示。在对自然图像进行训练,并对艺术品图像进行测试时,YOLO比DPM和R-CNN等顶级检测方法的表现要好得多。由于YOLO具有高度泛化性,当应用到新领域遇见或意料之外的输入时,它也不太可能失灵。
YOLO在精确度上仍然落后于最先进的探测系统,虽然它能够快速识别图像中的物体,但它很难精确定位一些小的物体。我们在实验中进一步研究了这些权衡取舍。
我们所有的训练和测试代码都是开源的,各种预先训练的模型也都是可下载的。
2.统一检测
我们将目标检测的独立组件统一为一个单一的神经网络,该网络利用整个图像的特征来预测每个边界框,它还可以同时预测图像中所有类的所有边界框,这意味着我们的网络对整个图像和图像中的所有类进行全局推理。YOLO的设计支持端到端的训练和实时速度,同时保持较高的平均精确度。
每个网格单元预测B个边界框和这些框的置信度分数。这些置信度分数反应了模型对边界框包含对象的信心程度,以及它认为边界框预测的准确性。在形式上,我们把置信度定义为 Pr(Object) ∗
I
O
U
x
y
IOU_x^y
IOUxy (x=pred,y=truth)。如果该单元格中不存在对象,则置信度为0分,否则,我们希望置信度分数等于预测框和真实情况之间的IOU(交集/并集)。
每个边界框由5个预测值组成:x,y,w,h,置信度。(x,y)坐标表示相对于网格单元格边界的方框中心,宽度和高度是相对于整个图像预测的,最后,置信度预测表示被预测框与任意地面真值框之间的 IOU 。
每个网格单元还预测C种条件类的概率,Pr(Classi | Object),这些概率是以包含对象的网格单元格为前提条件。我们只预测每个网格单元的一组类概率,不管盒子B的数量如何。
在测试时,我们将条件类概率和单个盒子置信度的预测相乘,
这就给了我们每个盒子预测特定类别的置信度分数。这些分数编码了该类出现在盒子里的概率,以及预测的盒子与目标对象的匹配程度。
为了评估POLCAL VOC上的YOLO,我们使S = 7,B = 2,PASCAL VOC有20个标记类别,即C = 20.我们的最终预测是7×7×30张量(7×7×(2×5+20))。
2.1.网络设计
我们将该模型实现为卷积神经网络,并在PASCAL VOC检测数据集上对其进行评估。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
我们的网络结构灵感来源于用于图像分类的GoogLeNet模型,我们的网络有24个卷积层和2个全连接层,本文没有使用GoogLeNet模型中的inception模块,而是用1 × 1的还原层和3 × 3的卷积层代替,类似Lin等。完整的网络如图3所示。(第二层112×112×192中,192通道应为64通道;第三层56×56×256中,256应为192。这部分个人认为有错误,如博主理解有误请批评指正!)
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的边界,Fast YOLO使用的神经网络具有更少的卷积层(9层而不是24层),这些层中的过滤器也更少,除了网络的规模,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。
我们的网络的最终输出是7 × 7 × 30张量的预测结果。
2.2.训练
我们在ImageNet 1000类竞赛数据集上预训练卷积层。对于预训练,我们使用图3中的前20个卷积层,然后是平均池化层和完全连接层。我们对该网络进行了大约一周的训练,并在ImageNet 2012验证集上实现了88%的单一农作物前5名的预测准确性,与Caffe的Model Zoo[24]中的GoogLeNet模型相当。我们使用Darknet框架进行所有的训练和推理。
然后我们将模型转换为执行检测。Ren等人表明,在预训练的网络中同时添加卷积层和连接层可以提高性能。按照他们的例子,我们添加了四个卷积层和两个具有随机初始化权值的完全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224 × 224提高到448 × 448。
我们的最后一层预测了类概率和边界框坐标。我们通过图像的宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间。我们将边界框x和y坐标参数化,使其成为特定网格单元格位置的偏移量,因此它们也被限定在0和1之间。
我们对最后一层使用线性激活函数,所有其他层使用以下漏修正线性激活:
我们优化了模型输出中的和平方误差。我们使用平方和误差,因为它很容易优化,但它与我们最大化平均精度的目标并不完全一致。它将定位误差与分类误差同等地考虑,可能并不理想。此外,在每张图像中,许多网格单元格不包含任何对象。这将这些单元格的置信度分数推至零,通常压倒了包含对象的单元格的渐变。这可能导致模型不稳定,导致训练在早期偏离。
为了解决这个问题,我们增加了边界框坐标预测的损失,减少了不包含对象的框的置信度预测的损失。我们使用两个参数,λcoord和λnoobj来完成这个任务,我们设置λcoord = 5, λnoobj = .5。
和平方误差在大方框和小方框中的权重相同。我们的误差度量应该反映大盒子里的小偏差比小盒子里的影响小。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测每个网格单元有多个边界框。在训练时,我们只需要一个边界框预测器负责每个对象。我们指定一个预测器“负责”预测一个对象,该对象基于哪个预测具有最高的当前IOU。这将导致边界框预测器之间的专门化。每种预测器都能更好地预测特定的尺寸、纵横比或对象类别,从而提高整体记忆力。
在训练过程中,我们优化了以下多部分损失函数:
注意,损失函数仅在网格单元格中存在对象时,才惩罚分类错误(因此前面讨论了条件类概率)。它也只惩罚边界框坐标误差,如果该预测器是“负责”的真值框(即有最高的IOU在该网格单元格中的任何预测器)。
我们使用PASCAL VOC 2007年和2012年的训练和验证数据集对网络进行了大约135个周期的训练。在2012年的测试中,我们还包含了VOC 2007的测试数据进行培训。在整个训练过程中,我们使用的批大小为64,动量为0.9,衰减为0.0005。
我们的学习率计划如下:在第一个阶段,我们慢慢地将学习率从10−3提高到10−2。如果我们从一个高学习率开始,我们的模型经常由于不稳定的梯度而发散。我们继续用10-2训练75轮次,然后用10-3训练30轮次,最后用10-4训练30轮次。
为了避免过拟合,我们使用dropout和广泛的数据增强。第一个连接层之后的dropout= .5的dropout层防止层之间的自适应。对于数据增强,我们引入了可达原始图像大小20%的随机缩放和平移。我们还随机调整图像的曝光和饱和度,最多在HSV颜色空间中调整1.5倍。
2.3.推论
就像在训练中一样,预测测试图像的检测只需要一次网络评估。在PASCAL VOC上,网络预测每张图像的98个边界盒和每个边界盒的类概率。与基于分类器的方法不同,YOLO在测试时非常快,因为它只需要单一的网络评估。
网格设计加强了边界框预测的空间多样性。通常情况下,一个对象落在哪个网格单元格中是很清楚的,网络只预测每个对象的一个框。然而,一些较大的物体或靠近多个单元边界的物体可以被多个单元很好地定位。非最大抑制可以用来固定这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制增加了23%的mAP。
2.4.YOLO的局限性
YOLO对边界框预测施加了很强的空间约束,因为每个网格单元格只能预测两个框,并且只能有一个类。这种空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型很难处理成群出现的小物体,比如鸟群。
由于我们的模型学会了从数据中预测边界框,它很难推广到具有新的或不寻常的纵横比或配置的对象。我们的模型还使用相对粗糙的特征来预测边界框,因为我们的体系结构从输入图像中有多个下采样层。
最后,当我们训练一个近似检测性能的损失函数时,我们的损失函数对待小边界盒和大边界盒的错误是一样的。大盒子里的小错误通常是良性的,但小盒子里的小错误对IOU的影响要大得多。我们的主要错误来源是不正确的定位。
3.与其他检测系统的比较
目标检测是计算机视觉的核心问题。检测流水线通常先从输入图像中提取一组鲁棒特征(Haar , SIFT , HOG,卷积特征),然后,使用分类器或定位器来识别特征空间中的目标。这些分类器或定位器要么以滑动窗口的方式在整个图像上运行,要么在图像中的一些区域子集上运行。我们将YOLO检测系统与几种顶级检测框架进行了比较,突出了关键的相似点和不同点。
- DPM:DPM使用滑动窗口方法进行对象检测,并使用不相交流水线提取静态特征,对区域进行分类,预测高分区域的边界框等。我们的系统用一个卷积神经网络取代了所有这些不同的部分。该网络同时执行特征提取、边界框预测、非最大抑制和上下文推理。网络不是静态特征,而是在线训练特征,并针对检测任务优化它们。我们统一的体系结构带来了比DPM更快、更精确的模型。
- R-CNN:R-CNN和它的变体使用区域建议代替滑动窗口来查找图像中的对象。选择性搜索生成潜在的边界框,卷积网络提取特征,支持向量机对边界框评分,线性模型调整边界框,非最大抑制消除重复检测。这一复杂流水线的每个阶段都必须精确地独立调整,结果系统非常慢,在测试时每张图像需要40多秒。
YOLO与R-CNN有一些相似之处。每个网格单元提出潜在的边界框,并使用卷积特征对这些边界框进行评分。然而,我们的系统在网格单元建议上设置了空间约束,这有助于减少对同一对象的多次检测。我们的系统提出的边界框也少得多,每幅图像只有98个边界框,相比之下,选择性搜索大约有2000个。最后,我们的系统将这些单独的组件组合成一个单一的、共同优化的模型。 - 其他快速检测器:Fast 和 Faster R-CNN专注于通过共享计算和使用神经网络提出区域而不是选择性搜索来加速R-CNN框架。虽然它们在速度和准确性方面都比R-CNN有所提高,但在实时性能方面仍存在不足。
许多研究都集中在加速DPM流水线上,它们加速了HOG计算,使用级联,并将计算推到gpu。然而,只有30Hz DPM实际实时运行。YOLO没有尝试优化大型检测流水线的单个组件,而是完全丢弃了流水线,而且从设计上看速度很快。
针对单个类(如人脸或人)的检测器可以高度优化,因为它们必须处理更少的变化。YOLO是一个通用检测器,它学会同时检测各种对象。 - Deep MultiBox:与R-CNN不同,Szegedy等人训练卷积神经网络来预测感兴趣的区域,而不是使用选择性搜索。MultiBox还可以通过用单个类预测代替置信度预测来执行单个对象检测。然而,MultiBox不能执行一般的对象检测,仍然只是一个更大的检测流水线中的一个部分,需要进一步的图像补丁分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
- OverFeat:Sermanet等训练卷积神经网络执行定位,并调整该定位器执行检测。OverFeat可以有效地执行滑动窗口检测,但它仍然是一个不连贯的系统。OverFeat优化定位,而不是检测性能。与DPM一样,定位器在进行预测时只看到局部信息。OverFeat不能推理全局上下文,因此需要大量的后处理来产生一致的检测。
- MultiGrasp:我们的工作在设计上与Redmon等人的抓握检测工作相似。我们的边界框预测网格方法是基于多元把握系统的回归把握。然而,抓取检测比对象检测简单得多。MultiGrab只需要预测包含一个对象的图像的单个可抓取区域。它不需要估计物体的大小、位置或边界,也不需要预测物体的类别,只需要找到适合抓取的区域。YOLO预测图像中多个类的多个对象的边界框和类概率。
4.结论
我们引入了一种统一的目标检测模型YOLO。我们的模型构造简单,可以直接在完整的图像上训练。与基于分类器的方法不同,YOLO是在与检测性能直接对应的损失函数上进行训练的,整个模型是联合训练的。
Fast YOLO是文献中最快的通用对象检测器,YOLO推动了实时对象检测的最先进水平。YOLO还可以很好地泛化到新的领域,使其成为依赖于快速、健壮的对象检测的应用程序的理想选择。