yolo v1论文翻译-整理

You Only Look Once: Unified, Real-Time Object Detection

2015年06月

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可以从真实图像领域迁移到其他领域,如艺术。

1,Introduction(介绍)

        人们瞥视图像,立即知道图像中的物体,它们在哪里以及它们如何相互作用。 人类的视觉系统是快速和准确的,使我们能够执行复杂的任务,例如驾驶时几乎没有意识的想法。 快速,准确的目标检测算法可以让计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并释放通用目标响应式机器人系统的潜力。

        当前的物体检测系统使用分类器来完成物体检测任务。为了检测一个物体,这些物体检测系统要在一张测试图的不同位置和不同尺寸的bounding box上使用该物体的分类器去评估是否有该物体。如DPM系统,要使用一个滑窗(sliding window)在整张图像上均匀滑动,用分类器评估是否有物体。

Faster RCNN检测流程:

        在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训练全图像并直接优化检测性能。 这种统一的模型与传统的物体检测方法相比有许多优点。

yolo v1论文翻译-整理

        图1:YOLO检测系统。 用YOLO处理图像简单而直接。 我们的系统(1)将输入图像的大小调整为448×448,(2)在图像上运行单个卷积网络,以及(3)通过模型的置信度对结果检测进行阈值。

 

YOLO模型相对于之前的物体检测方法有多个优点:

       1)YOLO检测物体非常快。

       因为没有复杂的检测流程,只需要将图像输入到神经网络就可以得到检测结果,YOLO可以非常快的完成物体检测任务。标准版本的YOLO在Titan X 的 GPU 上能达到45 FPS。更快的Fast YOLO检测速度可以达到155 FPS。而且,YOLO的mAP是之前其他实时物体检测系统的两倍以上。

        2)YOLO可以很好的避免背景错误,产生false positives。

        不像其他物体检测系统使用了滑窗或region proposal,分类器只能得到图像的局部信息。YOLO在训练和测试时都能够看到一整张图像的信息,因此YOLO在检测物体时能很好的利用上下文信息,从而不容易在背景上预测出错误的物体信息。和Fast-R-CNN相比,YOLO的背景错误不到Fast-R-CNN的一半

        3)YOLO可以学到物体的泛化特征。

        当YOLO在自然图像上做训练,在艺术作品上做测试时,YOLO表现的性能比DPM、R-CNN等之前的物体检测系统要好很多。因为YOLO可以学习到高度泛化的特征,从而迁移到其他领域。

 

        尽管YOLO有这些优点,它也有一些缺点:

        1)YOLO的物体检测精度低于其他state-of-the-art的物体检测系统。

        2)YOLO容易产生物体的定位错误。

        3)YOLO对小物体的检测效果不好(尤其是密集的小物体,因为一个栅格只能预测2个物体)。

2,Unified Detection

        我们将对象检测的分离组件统一为单个神经网络。我们的网络使用来自整个图像的特征来预测每个 bounding boxes(边界框)。它还预测所有边界的所有图像的包围盒。这意味着我们在整体范围内对整个图像和图像中的所有对象进行网络推理。YOLO设计使端到端的训练和实时速度成为可能,同时保持高的平均精度。

        YOLO 检测系统,先将输入图像分成 S * S个 grid(栅格),如果一个物体的中心掉落在一个 grid cell (网格单元)内,那么这个 grid cell (网格单元)就负责检测这个物体。

        每一个 grid cell 预测 B 个 bounding boxes,以及这些 bounding boxes 的得分:score。这个 score 反应了模型对于这个 grid cell 中预测是否含有物体,以及是这个物体的可能性是多少。我们把confidence(可信度)正式定义为:

yolo v1论文翻译-整理

        如果这个 cell 中不存在一个 object,则 score 应该为0 ;否则的话,score 则为 predicted box 与 ground truth 之间的 IoU(intersection over union:一种测量在特定数据集中检测相应物体准确度的一个标准)。

        换句话说:若bounding box包含物体,则P(object) = 1;否则P(object) = 0。IOU(intersection over union)为预测boundingbox与物体真实区域的交集面积(以像素为单位,用真实区域的像素面积归一化到[0,1]区间)。

        每个边框由五个预测值组成:x,y,w,h,confidence。坐标(x,y) 代表了 bounding box 的中心与 grid cell 边界的相对值。w、h 则是相对于整幅图像的预测值(边框的宽和高)。confidence 就是 IoU 值。

        注意:实际训练过程中,w和h的值使用图像的宽度和高度进行归一化到[0,1]区间内;x,y是bounding box中心位置相对于当前格子位置的偏移值,并且被归一化到[0,1]。

       每一个栅格还要预测C个 conditional class probability(条件类别概率): Pr(Classi|Object)。即在一个栅格包含一个Object的前提下,它属于某个类的概率。我们只为每个栅格预测一组(C个)类概率,而不考虑框B的数量。

        注意:

        conditional class probability信息是针对每个网格的。

        confidence信息是针对每个bounding box的。

 

        在测试阶段,将每个栅格的conditional class probabilities与每个 bounding box的 confidence相乘:

yolo v1论文翻译-整理

        这样既可得到每个bounding box的具体类别的confidence score。这乘积既包含了bounding box中预测的class的 probability信息,也反映了bounding box是否含有Object和bounding box坐标的准确度。

 

整个yolo算法的流程如图2.

yolo v1论文翻译-整理

         图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张量。

注意:

        1.由于输出层为全连接层,因此在检测时,YOLO训练模型只支持与训练图像相同的输入分辨率。

        2.虽然每个格子可以预测B个bounding box,但是最终只选择只选择IOU最高的bounding box作为物体检测输出,即每个格子最多只预测出一个物体。当物体占画面比例较小,如图像中包含畜群或鸟群时,每个格子包含多个物体,但却只能检测出其中一个。这是YOLO方法的一个缺陷。

 

2.1 Network Design

        我们将此模型作为卷积神经网络实施并在PASCAL VOC检测数据集上进行评估。 网络的初始卷积层从图像中提取特征,而全连接的层预测输出概率和坐标。

        YOLO网络借鉴了GoogLeNet分类网络结构。不同的是,YOLO未使用inception module,而是使用1x1卷积层(此处1x1卷积层的存在是为了跨通道信息整合)+3x3卷积层简单替代。YOLO检测网络包括24个卷积层和2个全连接层,完整的网络结构如图3所示。

yolo v1论文翻译-整理

        最终的输出结果是一个7*7*30的张量。

2.2 训练

        预训练分类网络: 在 ImageNet 1000-class competition dataset上预训练一个分类网络,这个网络是Figure3中的前20个卷机网络+average-pooling layer(平均池化层)+ fully connected layer(全连接层) (此时网络输入是224*224)。

        训练检测网络:转换模型去执行检测任务,《Object detection networks on convolutional feature maps》提到说在预训练网络中增加卷积和全链接层可以改善性能。在作者的例子基础上添加4个卷积层和2个全链接层,随机初始化权重。检测要求细粒度的视觉信息,所以把网络输入把224*224变成448*448。

        我们的最后一层预测类概率和包围盒坐标。我们通过图像宽度和高度对包围盒宽度和高度进行归一化,使它们下降到0和1之间。我们将边界框x和y坐标参数化为特定网格单元位置的偏移,因此它们也在0和1之间。将所有的预测结果都归一化到 0~1, 使用 Leaky RELU 作为**函数。 Leaky RELU的公式如下:

yolo v1论文翻译-整理

Leaky RELU可以解决RELU的梯度消失问题。

 

损失函数:

        损失函数的设计目标就是让坐标(x,y,w,h),confidence,classification 这个三个方面达到很好的平衡。

        简单的全部采用了sum-squared error loss来做这件事会有以下不足:

       a) 8维的localization error和20维的classification error同等重要显然是不合理的。

       b) 如果一些栅格中没有object(一幅图中这种栅格很多),那么就会将这些栅格中的bounding box的confidence 置为0,相比于较少的有object的栅格,这些不包含物体的栅格对梯度更新的贡献会远大于包含物体的栅格对梯度更新的贡献,这会导致网络不稳定甚至发散。

        解决方案:增加边界框坐标预测的损失,并且减少了不包含对象的框的置信度预测的损失。我们使用两个参数来实现这一点,即:

yolo v1论文翻译-整理

这两个参数,赋值为λcoord= 5,后者赋值为λnoobj= 0.5。有object的bbox的confidence loss 和类别的loss的loss weight正常取1。

下图为损失函数图:

yolo v1论文翻译-整理

        对不同大小的bbox预测中,相比于大bbox预测偏一点,小box预测偏一点更不能忍受。而sum-square error loss中对同样的偏移loss是一样。 为了缓和这个问题,作者用了一个比较取巧的办法,就是将box的width和height取平方根代替原本的height和width。 如下图:small bbox的横轴值较小,发生偏移时,反应到y轴上的loss(下图绿色)比big box(下图红色)要大。

yolo v1论文翻译-整理

        在 YOLO中,每个栅格预测多个bounding box,但在网络模型的训练中,希望每一个物体最后由一个bounding box predictor来负责预测。因此,当前哪一个predictor预测的bounding box与ground truth box的IOU最大,这个 predictor就负责 predict object。这会使得每个predictor可以专门的负责特定的物体检测。随着训练的进行,每一个 predictor对特定的物体尺寸、长宽比的物体的类别的预测会越来越好。

        我们用Pascal VOC 2007和2012的训练集和验证数据集进行了大约135个迭代的网络训练。因为我们仅在Pascal VOC 2012上进行测试,所以我们的训练集里包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用的批量大小是64,动量为0.9,衰减率是0.0005。

        我们的学习率计划如下:在第一个迭代周期,我们将学习率从10-3慢慢地提高到10-2。如果从大的学习率开始训练,我们的模型通常会由于不稳定的梯度而发散。我们继续以10-2进行75个周期的训练,然后以10-3进行30个周期的训练,最后以10-4进行30个周期的训练。

       为避免过拟合,我们使用了Dropout和大量的数据增强。 在第一个连接层之后的dropout层的丢弃率设置为0.5,以防止层之间的相互适应[18]。 对于数据增强,我们引入高达20%的原始图像大小的随机缩放和平移。我们还在HSV色彩空间中以高达1.5的因子随机调整图像的曝光度和饱和度。

2.3 Inference

        就像在训练中一样,图像的检测只需要一个网络评估。 在PASCAL VOC上,网络预测每个图像的98个边界框和每个框的类概率。 YOLO在测试时间速度非常快,因为它只需要一个网络预测,而不像基于分类器的方法。

      当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。可以用Non-Maximal Suppression(NMS,非极大值抑制) 进行去除重复检测的物体,可以使最终的 mAP 提高,但相比较于 NMS 对于 DPM、R-CNN 的提高并不算大,但也能增加2−3%的mAP。

2.4 Limitations of YOLO

       1)每个 grid cell 只预测一个 类别的 Bounding Boxes,而且最后只取置信度最大的那个 Box。这就导致如果多个不同物体(或者同类物体的不同实体)的中心落在同一个网格中,会造成漏检;

       2)预测的 Box 对于尺度的变化比较敏感,在尺度上的泛化能力比较差;

      3)识别物体位置精准性差;

       4)召回率低。

3. 和其他的目标检测算法的对比

       下表给出了YOLO与其他物体检测方法,在检测速度和准确性方面的比较结果(使用VOC 2007数据集)。

yolo v1论文翻译-整理

       论文中,作者还给出了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系列检测方法。

4 测试

        Test的时候,每个网格预测的class信息,(Pr(Classi|Object))和bounding box预测的confidence信,(Pr(Object)∗IOUtruthpred) 相乘,就得到每个bounding box的class-specific confidence score。

yolo v1论文翻译-整理

       1. 等式左边第一项就是每个网格预测的类别信息,第二三项就是每个bounding box预测的confidence。这个乘积即encode了预测的box属于某一类的概率,也有该box准确度的信息。

       2. 对每一个网格的每一个bbox执行同样操作: 7x7x2 = 98 bbox (每个bbox既有对应的class信息又有坐标信息)

      3. 得到每个bbox的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果

      4. NMS(非极大值抑制)

       在得到Bounding Box,Confidence, Class probability后利用非极大值抑制算法保留目标框。

      5. 思考

1、YOLOv1最大的开创性贡献在于将物体检测作为一个回归问题进行求解,输入图像经过一次inference,便能得到图像中所有物体的位置和其所属类别及相应的置信概率。而rcnn/fast rcnn/faster rcnn将检测结果分为两部分求解:物体类别(分类问题),物体位置即bounding box(回归问题),所以YOLO的目标检测速度很快。

2、YOLO仍然是一个速度换精度的算法,目标检测的精度不如RCNN。

4. 实验

       首先,我们在PASCAL VOC 2007上比较YOLO和其它的实时检测系统。为了弄清YOLO和R-CNN变体之间的差异,我们研究了YOLO和R-CNN性能最高的版本之一Fast R-CNN[14]在VOC 2007上错误率。根据不同的误差曲线,我们显示YOLO可以用来重新评估Fast R-CNN检测,并减少背景假阳性带来的错误,从而显著提升性能。我们还展示了在VOC 2012上的结果,并与目前最先进的方法比较了mAP。最后,在两个艺术图像数据集上我们显示了YOLO可以比其它检测器更好地泛化到新的领域。

4.1. 与其它实时系统的比较

        目标检测方面的许多研究工作都集中在快速制作标准的检测流程上[5],[38],[31],[14],[17],[28]。然而,只有Sadeghi等人实际上产生了一个实时运行的检测系统(每秒30帧或更好)[31]。我们将YOLO与DPM的GPU实现进行了比较,其在30Hz或100Hz下运行。虽然其它的算法没有达到实时性的标准,我们也比较了它们的mAP和速度的关系,从而探讨目标检测系统中精度和性能之间的权衡。

       快速YOLO是PASCAL上最快的目标检测方法;据我们所知,它是现有的最快的目标检测器。具有52.7%的mAP,实时检测的精度是以前的方法的两倍以上。普通版YOLO将mAP推到63.4%的同时保持了实时性能。

       我们还使用VGG-16训练YOLO。 这个模型比普通版YOLO更精确,但也更慢。 它的作用是与依赖于VGG-16的其他检测系统进行比较,但由于它比实时更慢,所以本文的其他部分将重点放在我们更快的模型上。

       最快的DPM可以在不牺牲太多mAP的情况下有效加速DPM,但仍然会将实时性能降低2倍[38]。与神经网络方法相比,DPM的检测精度相对较低,这也是限制它的原因。

yolo v1论文翻译-整理

        表1:PASCAL VOC 2007上的实时系统。比较快速检测器的性能和速度。 快速的YOLO是PASCAL VOC检测记录中速度最快的检测器,并且仍然是其他任何实时检测器的两倍。 YOLO比快速版本更精确10 mAP,同时仍高于实时速度

       减去R的R-CNN用静态侯选边界框取代选择性搜索[20]。虽然速度比R-CNN更快,但它仍然无法实时,并且由于该方法无法找到好的边界框,准确性受到了严重影响。

       Fast R-CNN加快了R-CNN的分类阶段,但它仍然依赖于选择性搜索,每个图像需要大约2秒才能生成边界框提议。因此,它虽然具有较高的mAP,但的速度是0.5 fps,仍然远未达到实时。

       最近的Faster R-CNN用神经网络替代了选择性搜索来候选边界框,类似于Szegedy等人[8]的方法。在我们的测试中,他们最准确的模型达到了7fps,而较小的,不太准确的模型以18 fps运行。 Faster R-CNN的VGG-16版本比YOLO高出10mAP,但比YOLO慢了6倍。 Zeiler-Fergus 版本的Faster R-CNN只比YOLO慢2.5倍,但也不如YOLO准确。

4.2. VOC 2007的错误分析

       为了进一步研究YOLO和最先进的检测器之间的差异,我们详细分析了VOC 2007的结果。我们将YOLO与Fast R-CNN进行比较,因为Fast R-CNN是PASCAL上性能最高的检测器之一并且它的检测代码是可公开得到的。

        我们使用Hoiem等人的方法和工具[19],对于测试的每个类别,我们查看该类别的前N个预测。每个预测都或是正确的,或是根据错误的类型进行分类。

图4:错误分析:快速R-CNN与YOLO这些图表显示了各种类别(N =该类别中目标的个数)的前N个检测中的本地化和背景错误的百分比。

yolo v1论文翻译-整理

• Correct:类别正确,IOU>0.5

• Localization:类别正确,0.1<IOU<0.5

• Similar:类别相似,IOU >0.1

• Other:类别错误,IOU >0.1

• Background:任何IOU <0.1的目标。

图4显示了在所有20个类别上每种错误类型的平均值的分解图。

 

        YOLO难以正确地定位目标,因此定位错误比YOLO的所有错误都要多。Fast R-CNN定位错误更少,但把背景误认成目标的错误比较多。它的最高检测结果中有13.6%是是不包含任何目标的误报。 Fast R-CNN把背景误认成目标的概率比YOLO高出3倍。

4.3. VOC 2012的结果

       在VOC 2012测试集中,YOLO的得分是57.9%mAp。这比现有最先进的技术水平低,更接近使用VGG-16的原始的R-CNN,见表3.与其最接近的竞争对手相比,我们的系统在小物体上表现不理想。 在瓶子,羊,电视/监视器等类别上,YOLO得分比R-CNN和Feature Edit低8-10%。 然而,在其他类别,如猫和火车YOLO实现更高的性能。

        我们的Fast R-CNN + YOLO模型组合是性能最高的检测方法之一。 Fast R-CNN与YOLO的组合提高了2.3%,在公共排行榜上提升了5个位置。

5.现实实时检测

       YOLO是一款快速,精确的物体检测器,非常适合计算机视觉应用。 我们将YOLO连接到网络摄像头,并验证它是否保持实时性能,包括从摄像头获取图像并显示检测结果的时间。

       由此产生的系统是互动的和参与的。 虽然YOLO单独处理图像,但当连接到网络摄像头时,它的功能类似于跟踪系统,可在目标移动并在外观上发生变化时检测目标。 系统演示和源代码可在我们的项目网站上找到:http://pjreddie.com/yolo/

6. 结论

       我们介绍YOLO——一种用于物体检测的统一模型。 我们的模型构造简单,可以直接在完整图像上训练。 与基于分类器的方法不同,YOLO是通过与检测性能直接对应的损失函数进行训练的,并且整个模型是一起训练的。

       快速YOLO是文献中最快的通用目标检测器,YOLO推动实时对象检测的最新技术。 YOLO还能很好地推广到新领域,使其成为快速,鲁棒性强的应用的理想选择。