Abstract
本文提出了一种新的物体检测方法YOLO。YOLO之前的物体检测方法主要是通过region proposal
产生大量的可能包含待检测物体的 potential bounding box,再用分类器去判断每个 bounding box里是否包含有物体,以及物体所属类别的 probability或者 confidence,如R-CNN,Fast-R-CNN,Faster-R-CNN等。YOLO不同于这些物体检测方法,它将物体检测任务当做一个regression问题来处理,使用一个神经网络,直接从一整张图像来预测出bounding box 的坐标、box中包含物体的置信度和物体的probabilities。因为YOLO的物体检测流程是在一个神经网络里完成的,所以可以end to end来优化物体检测性能。
YOLO检测物体的速度很快,标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。网络较小的版本Fast YOLO在保持mAP是之前的其他实时物体检测器的两倍的同时,检测速度可以达到155 FPS。相较于其他的state-of-the-art 物体检测系统,YOLO在物体定位时更容易出错,但是在背景上预测出不存在的物体(false positives)的情况会少一些。而且,YOLO比DPM、R-CNN等物体检测系统能够学到更加抽象的物体的特征,这使得YOLO可以从真实图像领域迁移到其他领域,如艺术。
Introduction
人们瞥视图像,立即知道图像中的物体,它们在哪里以及它们如何相互作用。 人类的视觉系统是快速和准确的,使我们能够执行复杂的任务,例如驾驶时几乎没有意识的想法。 快速,准确的目标检测算法可以让计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并释放通用目标响应式机器人系统的潜力。
当前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。
在DPM之后提出的其他方法,如R-CNN方法使用region proposal(提取候选区域)来生成整张图像中可能包含待检测物体的potential bounding boxes(潜在边界框),然后用分类器来评估这些boxes,接着通过post-processing(后处理)来改善bounding boxes,消除重复的检测目标,并基于整个场景中的其他物体重新对boxes进行打分。整个流程执行下来很慢,而且因为这些环节都是分开训练的,检测性能很难进行优化。
本文提出的YOLO(you only look once),将物体检测任务当做回归问题(regression problem)来处理,直接通过整张图片的所有像素得到bounding box的坐标、box中包含物体的置信度和class probabilities。通过YOLO,每张图像只需要输入到神经网络就能得出图像中都有哪些物体和这些物体的位置。
YOLO非常简单:参见图1.单个卷积网络可同时预测多个边界框和这些盒的类概率.YOLO训练全图像并直接优化检测性能。 这种统一的模型与传统的物体检测方法相比有许多优点。
图1:YOLO检测系统。 用YOLO处理图像简单而直接。 我们的系统(1)将输入图像的大小调整为448×448,(2)在图像上运行单个卷积网络,以及(3)通过模型的置信度对结果检测进行阈值。
YOLO模型相对于之前的物体检测方法有多个优点:\
-
YOLO检测物体非常快。因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS,这就意味着我们能够实时的处理视频流并且延迟可以控制在25ms以内。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。
-
YOLO是分析整张图片进行预测的,可以很好的避免背景错误,产生false positives。不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半。
-
YOLO可以学到物体的泛化特征。当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。
YOLO在精度上仍然落后于最先进的检测系统,尽管YOLO有这些优点,它也有一些缺点:
- YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。
- YOLO容易产生物体的定位错误。
- YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。
我们所有的训练和测试代码都是开源的。各种预训练过的模型也可以下载
Unifified Detection
我们将目标检测的单独集成到单个神经网络中。 我们的网络使用整个图像的特征来预测每个边界框。 它还同时预测所有类的所有边界框。 这意味着我们的网络能够在全球范围内全面了解图像中的整幅图像和图像中的所有对象。YOLO设计可实现端到端训练和实时速度,同时保持较高的平均精度AP(average precision
)。
YOLO将输入图像划分为S * S的栅格,If the center of an object falls into a grid cell, that grid cell is responsible for detecting that object 如果一个物体的中心落到了一个栅格中,那么这个栅格负责检测这个物体。
每一个栅格预测B个bounding boxes,以及这些bounding boxes的confidence scores。These confidence scores reflflect how confifident the model is that the box contains an object and also how accurate it thinks the box is that it predicts。这些置信度分数反映了模型对盒子包含物体的信心,也反映了它认为盒子预测的准确性。公式定义如下:
如果这个栅格中不存在一个object,则confidencescore应该为0。否则的话,confidence score则为predicted bounding box与 ground truth box之间的 IOU(intersection over union)。
对于上面的理解:我们计算这个格子是不是存在物体的置信度,假设存在物体,也就是框的中心落在了该格子中,P(Object)=1,所以confidence = 我们的格子和真实的框之间的IOU的值;假设不存在物体,也就是框的中心没有落在该格子中,P(Object)=0,所以confidence = 0。
YOLO对每个bounding box有5个predictions:x, y, w, h and confidence。(x、y)坐标表示相对于网格单元格边界的方框的中心。bounding box的中心点相对于所在的grid cell的左上点的坐标。坐标w,h代表了预测的bounding box的width、height相对于整幅图像width,height的比例。confidence就是预测的bounding box和ground truth box的IOU值。
每一个栅格还要预测C个conditional class probability(条件类别概率):Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。我们只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。
每个grid cell只预测一组条件类别概率,它对应的B个bouding box共享这个条件概率
在测试时,我们将条件类概率和单个盒子置信度预测相乘,这给了我们每个盒子的特定类别的分数。这些分数既编码了该类出现在框中的概率,也编码了预测的框与对象的匹配程度。
整个yolo算法的流程如图2.
图2: 我们的YOLO系统将检测模型化为回归问题。 它将图像划分为S×S网格,并且每个网格单元预测B个边界框,对这些框的置信度以及C类概率。 这些预测值被编码为S × S ×(B * 5 + C)张量。
为了评估PASCAL VOC上的YOLO,我们使用S = 7,B = 2。PASCAL VOC有20个标记类,因此C = 20。我们的最终预测是7 × 7 × 30张量。
整个的这个部分是核心,需要加强理解:
- 将输入图片划分为S * S个grid cell
- 训练阶段
- 标签Ground Truth 框中心点落在哪个grid cell中,就由哪个grid cell预测这个物体
- 每个grid cell预测B个bounding boxes
- 与Ground Truth框IOU最大的bounding box负责预测这个物体,另外一个(B=2)被打入冷宫
- 每个grid cell只能检测一个物体
- 包含、不包含Ground Truth的grid cell/bounding box依损失函数分别进行处理
- 测试阶段
- 直接获得S * S * (5 * B + C)的向量,进行NMS后处理得到目标检测结果
上面的多框的图中,框线的粗细表示C的大小
Network Design
我们将此模型作为卷积神经网络实施并在PASCAL VOC检测数据集上进行评估。 网络的初始卷积层从图像中提取特征,而全连接的层预测输出概率和坐标。
YOLO网络借鉴了GoogLeNet分类网络结构。我们的网络是有24个卷积层后面跟上了两个全连接层。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。完整的网络结构如图3所示。
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的边界。Fast YOLO使用的神经网络的卷积层更少(9个而不是24个),而这些层的过滤器更少。除了网络的大小之外,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。
我们的检测网络有24个卷积层,然后是2个全连接层。交替的1 * 1个卷积层减少了前一层的特征空间。我们在ImageNet分类任务上以一半的分辨率(224 * 224输入图像)对卷积层进行预训练,然后将分辨率加倍进行检测。
我们的网络的最终输出是预测的7 * 7 * 30张量。
Training
首先利用ImageNet 1000-class的分类任务数据集Pretrain卷积层。使用上述网络中的前20 个卷积层,加上一个 average-pooling layer,最后加一个全连接层,作为 Pretrain 的网络。训练大约一周的时间,使得在ImageNet 2012的验证数据集Top-5的精度达到 88%,这个结果跟 GoogleNet 的效果相当。我们使用Darknet网络进行所有的训练和推断。
将Pretrain的结果的前20层卷积层应用到Detection中,并加入剩下的4个卷积层及2个全连接。同时为了获取更精细化的结果,将输入图像的分辨率由 224* 224 提升到 448 * 448。
我们的最后一层预测了类的概率和边界框坐标。我们根据图像的宽度和高度将边界框的宽度和高度进行归一化,使它们落在0到1之间。我们参数化边界框x和y坐标为特定网格单元位置的偏移,因此它们也被限定在0和1之间。
高度是根据图像的宽和高进行归一化,然后我们将x,y坐标点是相对于grid cell左上角的偏移。
我们使用一个线性激活函数对于最后一层,然后其他的所有层后面都接上leaky非线性激活函数:
我们对模型输出中的和平方误差进行了优化。我们使用和平方误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相同,这可能并不理想。此外,在每个图像中,许多网格单元格不包含任何对象。这将这些细胞的“信心”分数推向零,通常超过了确实包含物体的细胞的梯度。这可能导致模型不稳定,导致训练在早期出现发散。
为了解决这一点,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的一致性预测的损失。我们使用两个参数,λcoord和λnoobj来完成这一点。我们设置λcoord = 5和λnoobj = 0.5
平方和误差也同样权重大盒子和小盒子的误差。我们的误差度量应该反映大盒子的小偏差比小盒子的小偏差小。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度
绝对误差对大小框一视同仁,大框计算出的误差天然就是比小框大,这对大框不公平,所以h和w的平方根之差引入损失函数,可以削弱大框误差。
YOLO预测每个网格单元格有多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们分配了一个预测器来“负责”预测一个对象,基于这个预测具有最高的当前IOU。这导致了边界框预测器之间的专门化。每个预测器都能更好地预测特定的大小、纵横比或物体的类别,从而提高整体召回率(真正的物体被检测出来的概率)。
每个grid cell预测B个框,每个框都被称为一个predictor,训练时,与ground truth具有最大的IOU的predictor负责预测这个物体, i:grid cell 共计S * S个,j bounding box共B个,YOLOv1无anchor机制,B个框逐渐特化,每个框都聚焦特定的形状和长宽比。
在培训过程中,我们优化了以下内容,包括多部分的内容,其中, 表示对象是否出现在单元i中,而 表示单元i中的第j个边界框预测器“负责”该预测。
和向量的对应关系
注意,只有当网格单元中存在一个对象时,损失函数才会惩罚分类错误(因此前面讨论的条件类概率)。如果预测器对ground truth框“负责”(即在该网格单元中具有任何预测器的最高IOU),它也只惩罚边界框坐标错误
我们根据pascal VOC2007和2012的训练和验证数据集对网络进行了大约135个epoch的训练。在2012年的测试时,我们还包括VOC2007测试数据用于训练。在整个训练过程中,我们使用的批量大小为64,动量为0.9,衰减为0.0005。
我们的学习速率计划如下:在第一个阶段,我们将学习速率从缓慢提高到。如果我们从一个较高的学习速率开始,我们的模型经常会由于不稳定的梯度而发散。我们继续用训练75个,然后训练30个,最后训练30个。
为了避免过拟合,我们使用了dropout和广泛的数据增强。在第一连接层之后,rate=.5的dropout层阻止了层之间的共适应。对于数据增强,我们引入了高达原始图像大小的20%的随机缩放和平移。我们还在HSV颜色空间中随机调整图像的曝光和饱和度高达1.5倍.
Inference
就像在训练中一样,预测一个测试图像的检测只需要一个网络评估。在pascal VOC上,网络预测每幅图像98个边界框和每个框的类概率。YOLO在测试时速度非常快,因为与基于分类器的方法不同,它只需要一个单一的网络评估.
网格设计在边界框预测中加强了空间多样性。通常,对象落入哪个网格单元,网络只预测每个对象的一个框。然而,一些大型物体或物体多个cell的边界可以被多个cell很好地定位。非最大抑制可以用来修复这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制在mAP中增加了2-3%。
每个grid cell 用一个bbox预测一个物体,但是对于较大的物体和靠近边缘的物体可能会有多个框预测同一个物体
Limitations of YOLO(缺陷)
YOLO对边界框预测施加了强大的空间约束,因为每个网格单元只能预测两个框,并且只能有一个类。这个空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型会与成群出现的小物体作斗争,比如鸟群。
对于上面的这句话的理解:
- 就是我们的一个grid cell只能预测一个物体,我们假设两个物体的中心点落入了同一个grid cell中,我们的p(object)是1,所以confidence是取决于IOU的值,两个物体最终会选择IOU比较大的那个作为最后的预测结果,最终也只能预测出来一个类,另一个被忽略掉;所以一共S * S个格子,一共能够预测的obj的数量最多就是S * S个。
由于我们的模型学会了从数据中预测边界框,所以它很难推广到新的或不寻常的长宽比或配置的对象。我们的模型还使用了相对粗糙的特征来预测边界框,因为我们的架构从输入图像中有多个降采样层。
最后,当我们训练一个近似于检测性能的损失函数时,我们的损失函数处理小边界框与大边界框中的错误是相同的。一个大盒子里的小错误通常是良性的,但一个小盒子里的小错误对IOU有更大的影响。我们的主要错误来源是不正确的本地化.(分类正确但是定位误差大是YOLO误差的主要来源)
后续部分都是数据比较的部分(挑选重点翻译)
下表给出了YOLO与其他物体检测方法,在检测速度和准确性方面的比较结果(使用VOC 2007数据集)。
论文中,作者还给出了YOLO与Fast RCNN在各方面的识别误差比例,如下图。YOLO对背景内容的误判率(4.75%)比fast rcnn的误判率(13.6%)低很多。但是YOLO的定位准确率较差,占总误差比例的19.0%,而fast rcnn仅为8.6%。
YOLO算法的优点如下:
1,速度快,YOLO将物体检测作为回归问题进行求解,整个检测网络pipeline简单。在titan x GPU上,在保证检测准确率的前提下(63.4% mAP,VOC 2007 test set),可以达到45fps的检测速度。
2,背景误检率低。YOLO在训练和推理过程中能‘看到’整张图像的整体信息,而基于region proposal的物体检测方法(如rcnn/fast rcnn),在检测过程中,只‘看到’候选框内的局部图像信息。因此,若当图像背景(非物体)中的部分数据被包含在候选框中送入检测网络进行检测时,容易被误检测成物体。测试证明,YOLO对于背景图像的误检率低于fast rcnn误检率的一半。
3,通用性强。YOLO对于艺术类作品中的物体检测同样适用。它对非自然图像物体的检测率远远高于DPM和RCNN系列检测方法。
TEST
Test的时候,每个网格预测的class信息 相乘,就得到每个bounding box的class-specific confidence score。
\
- 等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。
\
- 对每一个网格的每一个bbox执行同样操作: 7x7x2 = 98 bbox (每个bbox既有对应的class信息又有坐标信息)
\
- 得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
NMS(非极大值抑制)
在得到Bounding Box,Confidence, Class probability后利用非极大值抑制算法保留目标框。
结语
- YOLOv1最大的开创性贡献在于将物体检测作为一个回归问题进行求解,输入图像经过一次inference,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而rcnn/fast rcnn/faster rcnn将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题),所以YOLO的目标检测速度很快。
- YOLO仍然是一个速度换精度的算法,目标检测的精度不如RCNN