我们提出了一种新的目标检测方法:YOLO。之前目标检测上的一些工作使用分类器来进行检测,而我们把目标检测任务当作一个对空间上分开的bbox和其对应的class概率的回归问题。只使用一个神经网络来直接一次对整张图像预测bbox和它的class概率。
我们的方法特别快,基础的YOLO模型可以实时处理图像达到45帧每秒。更轻小的模型,Fast YOLO,可以达到155 fps,同时还可以取得其他实时方法的两倍的mAP。与其他的SOTA检测方法相比,YOLO虽然有更多的定位误差,但是对于背景有更少的假阳性,并且可以学习到目标的非常general的特征表示。且当进行迁移学习(从自然图像转换到其他domain)时,效果较好。
人类只需要看一下图像就可以立即直到图像中有什么目标以及位置。目前的检测系统使用分类器来进行检测。为了检测到目标,系统使用分类器对图像多个位置和尺度进行检测分类。R-CNN使用区域proposal方法生成bbox然后使用分类器对这些bbox进行分类,后续处理对bbox进行回归,消除重复的检测结果,最后输出结果。这个过程很复杂,优化起来比较难。
我们把目标检测当作一个回归问题,直接从图像像素出发来得到bbox坐标以及class probabilities。我们的方法,只需要看一次图像,因此叫做YOLO。
YOLO十分简单,如图1所示。一个卷积网络同时预测多个bbox以及它们的class概率。YOLO在整张图像上进行训练,直接优化检测表现,相比传统方法有以下几个优点。
YOLO在准确率上落后与SOTA,对小目标效果较差,然而它可以快速找到图像中的目标。
我们把目标检测的几个分离部分整合到了一起,我们的网络使用来自整张图像的特征预测每个bbox,同时也预测所有class的bbox。这意味着我们的网络是对整张图像全局预测的,考虑到了图像中的所有目标。
我们网络将输入图像分成S * S个网格,如果目标的中心落在某个网格中,这个网格就负责检测这个目标。
每个网格cell预测B个bbox以及这些bbox的置信度。置信度反映了模型对这个box含有目标的信心以及它认为它预测的这个box有多准确。
我们将置信度定义为:
P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object)*IOU^{truth}_{pred} Pr(Object)∗IOUpredtruth
Pr(Object)表示这个box存在目标的概率,不管目标是哪类。如果这个格子不存在目标,那么置信分数为0,否则把Pr(Object)置为1,置信度就为预测bbox和ground truth的IoU。
每个bbox包含5个参数,x,y,w,h和置信度confidence。(x,y)表示bbox的中心相对于单元格坐标的offset,我们在x方向进行解释,如果原来中心在x1(这里x1为单元格坐标),预测后在x2(像素坐标),将x2转换为单元格的坐标(带小数的),那么最后的预测结果就是x=(x2-x1),如果中心在预测前后都在一个cell内,那么预测的x和y都在(0,1)范围内。w,h表示bbox的宽度和高度相对于整张图像的比例。这几个参数范围都在(0,1)中,更方便进行回归。
每个grid cell也预测了C个条件概率, P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i|Object) Pr(Classi∣Object)。对于每个cell,我们只考虑一组class概率,不管box的数量B。
测试阶段,我们有如下公式:
给出了每个box的class-specific置信度。这些置信度既包含对应class目标出现的可能性,又包含了bbox定位的准确性。
在PASCAL VOC上,我们使用S=7,B=2。数据集有20类,所以C=20,最后的预测是一个7 * 7 * 30的张量。(B*5是B个bbox的坐标,C表示这个cell对于C类的probability)
我们在PASCAL VOC上进行使用,开始的卷积层进行特征提取,后面的FC层预测输出的可能性和坐标。我们的网络结构受到GoogLeNet的启发,有24层卷积层和2层FC层,与Inception不同,我们简单地使用1 * 1的卷积在3 * 3之后,用于降维,网络结构如图3所示。
我们还训练了一个简易版本,Fast YOLO,它仅有9层conv,且每层的通道数更少,除此之外根普通的YOLO一样。
我们在ImageNet上进行了预训练,使用的是前20层conv,后面接一个平均池化和fc。转向检测训练时,我们增加了剩下的四个conv,然后随机初始化两个fc,然后将网络的输入分辨率从分类的224 * 224提升到448 * 448。上面讲解到w和h在范围(0,1)内,x,y改变前后在同一个cell中时,也在范围(0,1)内。
每一层的激活函数我们使用leaky ReLU:
我们对模型输出的平方误差进行优化,因为优化容易,但是通过它得到的可能不是最好的结果(使mAP最大),因为它将定位误差与分类误差平等看待,这可能不是最佳的。而且,图像中有许多cell是不包含目标的,这样置信度为0,混合之后它们占据了梯度的主导,会导致训练很早就发散了。
为了弥补这个,我们提升了bbox坐标预测的loss,降低了对不含目标的boxes的置信度预测的loss。我们使用了两个参数来实现,λcoord=5,λnoobj=0.5。
平方误差同样对大的box和小的box的误差平等看待,我们的误差尺度应该时,对于小的box中的一些误差比大的box的同样误差更重要。为了部分解决这个问题,我们使用bbox的w和h的平方根进行计算。
YOLO对每个grid cell预测多个bbox。训练阶段我们只希望每个目标仅由一个bbox预测来负责,我们选择与ground truth的IOU最大的bbox负责这个目标。这提升了总体的召回率。
训练期间,我们使用下面的loss进行优化:
我们训练过程使用batchsize = 64,动量0.9,decay0.0005。学习率刚开始逐渐从0.001提升到0.01,因为如果刚开始使用大学习率模型可能会发散。最后降低到0.0001训练。
避免过拟合,我们使用了0.5的dropout以及其他的数据增强方法。数据增强使用了随机尺度缩放,最大超过原尺寸的20%。我们还在HSV颜色空间中将图像的曝光和饱和度随机调整至1.5倍。
测试阶段,我们的网络对测试图像也只需要一次评估。PASCAL VOC数据集上,网络对每张图像预测98个bbox,以及每个bbox的概率,速度非常快。
通常情况下,哪个网格中有目标是很明显的,网络对于每个目标只预测一个box。然而一些大的目标或者接近网格边界的目标可能会被多个cell定位。我们使用NMS来修正这些对于一个目标的多个bbox,但是提升效果没有R-CNN中明显,它提升了2-3%的mAP。
**Deformable parts model。**DPM分别使用几个pipeline来进行静态特征提取、区域分类、bbox预测。我们的方法将这几个部分整合到了一起,效果更快更好。
**R-CNN。**R-CNN系列使用区域建议来找到图像中的目标。同样分为好几步,而且比较慢。YOLO在网格上的空间限制减少了对同一目标的多次检测,YOLO提出的bbox比SS少得多。Faster R-CNN尽管使用CNN替代了SS,提升了速度和mAP,但是还达不到实时检测。
**OverFeat。**同样作为one-stage的CNN,OverFeat仍不是一个joint system。而且它优化的是定位,而不是检测的表现,当预测是定位器只能看到local information,不能看到global context。
首先我们在PASCAL VOC2007上与其他实时检测系统比较,同时比较了YOLO和Fast R-CNN的errors,并且发现YOLO可以用来对Fast R-CNN的检测进行rescore,减少了背景假阳性的错误。我们同样比较了VOC2012的效果。最后我们在两个artwork数据集上发现YOLO对新domain的泛化能力更好。
Fast YOLO是目前PASCAL 上最快的目标检测方法,可以取得52.7%的mAP。YOLO可以取得63.4%mAP,仍能保持实时检测。
我们同样使用VGG16训练了YOLO,这个模型更加准确,但是比YOLO慢。
R-CNN minus R使用静态bbox proposal取代了SS,这样网络更快,但是仍不是实时检测,且使得mAP下降。
对于Faster R-CNN,VGG16版本比YOLO高10%的准确率,但是慢了6倍。
下面对Fast R-CNN和YOLO进行错误分析。
对于每一类,测试阶段我们只考虑这一类的top-N预测。每个预测按照下面分类:
如图4所示,YOLO主要的难点在于定位的准确性,定位错误占主要部分。Fast R-CNN定位错误更少,但是背景错误很多,13.6%的top检测为假阳性(不包含任何目标)。
由于上面的特点,我们使用YOLO来消除Fast R-CNN的假阳性,得到了一个显著提升。对于R-CNN预测的每个bbox,我们检查,来看是否YOLO可以预测一个相似的bbox。如果可以,我们按照YOLO预测的可能性以及两个boxes的重叠来对这个prediction进行一个boost。
来自YOLO的提升不是简单的组合模型的提升,因为组合一些其他的R-CNN模型得到的提升很有限。而且,由于更增加了运行时间,丢失了实时性,所以这个发现用处不大。
在VOC2012测试集上,YOLO取得57.9%的mAP,比SOTA低,与使用VGG16的R-CNN相近,见表3。相比之下,YOLO在小目标上表现不佳。我们的Fast R-CNN+YOLO组合模型效果很好。
我们在两个artwork数据集Picasso和People-Art上来比较不同的网络在艺术品中检测人的泛化能力。
如图5所示,YOLO取得了最好的泛化能力,在迁移到这两个数据集上,准确率与召回率下降的最少,效果最好。这是因为YOLO考虑到了目标之间的context信息,artwork与自然图像在像素上可能很不同,但是在目标尺寸和形状等方面很相似,因此YOLO仍能取得很好的效果。
我们将YOLO连接到一个webcam上,验证了它的实时性,包含了将图像送入网络以及展示检测结果的时间,仍可以做到实时。
我们提出了YOLO,一个用于目标检测的整合模型。我们的模型很容易构建,直接在整张图像上处理。不像其他基于分类器的方法,YOLO直接使用一个关联检测的loss函数进行训练,整个模型是一次训练的(jointly),不是分步的。
Fast YOLO是最快的检测模型,YOLO推动了SOTA实时的目标检测。YOLO对于新的domains的泛化能力很好。