第三十五节,目标检测之YOLO算法详解

Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)算法

YOLO的全拼是You Only Look Once,顾名思义就是只看一次,把目标区域预测和目标类别预测合二为一,做者将目标检测任务看做目标区域预测和类别预测的回归问题。该方法采用单个神经网络直接预测物品边界和类别几率,实现端到端的物品检测。所以识别性能有了很大提高,达到每秒45帧,而在快速YOLO(Fast YOLO,卷积层更少)中,能够达到每秒155帧。网络

当前最好系统相比,YOLO目标区域定位偏差更大,可是背景预测的假阳性优于当前最好的方法。架构

1、引言

人类瞥了一眼图像,当即知道图像中的物体,它们在哪里以及它们如何相互做用。 人类视觉系统快速而准确,使咱们可以执行复杂的任务,好比汽车驾驶。框架

传统的目标检测系统利用分类器来执行检测。 为了检测对象,这些系统在测试图片的不一样位置不一样尺寸大小采用分类器对其进行评估。 如目标检测系统采用deformable parts models (DPM)方法,经过滑动框方法提出目标区域,而后采用分类器来实现识别。近期的R-CNN类方法采用region proposal methods,首先生成潜在的bounding boxes,而后采用分类器识别这些bounding boxes区域。最后经过post-processing来去除重复bounding boxes来进行优化。这类方法流程复杂,存在速度慢和训练困难的问题。
ide

咱们将目标检测问题转换为直接从图像中提取bounding boxes和类别几率的单个回归问题,只需一眼(you only look once,YOLO)便可检测目标类别和位置。函数

YOLO简洁明了:见下图。 YOLO算法采用单个卷积神经网络来预测多个bounding boxes和类别几率。 与传统的物体检测方法相比,这种统一模型具备如下优势:工具

YOLO检测系统。用YOLO处理图像简单直接。咱们的系统(1)将输入图像调整为448×448,(2)在图像上运行单个卷积网络,以及(3)由模型的置信度对所获得的检测进行阈值处理。布局

  • 很是快。YOLO预测流程简单,速度很快。咱们的基础版在Titan X GPU上能够达到45帧/s; 快速版能够达到150帧/s。所以,YOLO能够实现实时检测。
  • YOLO采用全图信息来进行预测。与滑动窗口方法和region proposal-based方法不一样,YOLO在训练和预测过程当中能够利用全图信息。Fast R-CNN检测方法会错误的将背景中的斑块检测为目标,缘由在于Fast R-CNN在检测中没法看到全局图像。相对于Fast R-CNN,YOLO背景预测错误率低一半。
  • YOLO能够学习到目标的归纳信息(generalizable representation),具备必定普适性。咱们采用天然图片训练YOLO,而后采用艺术图像来预测。YOLO比其它目标检测方法(DPM和R-CNN)准确率高不少。

在准确性上,YOLO算法仍然落后于最早进的检测系统虽然它能够快速识别图像中的对象,但它很难精肯定位某些对象,特别是小对象。 post

二 统一检测(Unified Detection)

咱们将目标检测统一到一个神经网络。咱们的网络使用整个图像中的特征来预测每一个边界框。 它也是同时预测图像的全部类的全部边界框。 这意味着咱们的网络学习到的完整图像和图中全部的对象.YOLO设计可实现端到端训练和实时的速度,同时保持较高的平均精度。性能

  • YOLO首先将图像分为S×S的格子。若是一个目标的中心落入格子,该格子就负责检测该目标。每个网格中预测B个Bounding box 和置信值(confidence score)。这些置信度分数反映了该模型对盒子是否包含目标的信心,以及它预测盒子的准确程度。而后,咱们定义置信值为:

若是没有目标,置信值为零。另外,咱们但愿置信度分数等于预测框与真实值之间联合部分的交集(IOU)。

  • 每个bounding box包含5个值:x,y,w,h和confidence。(x,y)坐标表示边界框相对于网格单元边界框的中心。宽度和高度是相对于整张图像预测的。confidence表示预测的box与实际边界框之间的IOU。每一个网格单元还预测C个条件类别几率:

这些几率是以网格包含目标为条件的,每一个网格单元咱们只预测的一组类别几率,而无论边界框的的数量B时多少。

  • 在测试时,咱们乘以条件类几率和单个盒子的置信度预测:

这些分数编码了该类出如今框中的几率以及预测框拟合目标的程度。。在PASCAL VOC数据集上评价时,咱们采用S=7,B=2,C=20(该数据集包含20个类别),最终预测结果为7×7×30(B*5+C)的tensor。

模型。 咱们的系统将检测建模为回归问题。它将图像分红SxS的网络,而且每一个网格单元预测B个边界框,这些边界框的置信度以及C个类别几率,这些预测被编码为SxSx(B*5+C)的张量。

一、网络模型

咱们使用卷积神经网络来实现YOLO算法,并在Pascal VOC检测数据集上进行评估。网络的初始卷积层从图像中提取特征,而全链接层用来预测输出几率和坐标。

咱们的网络架构受到GoogLeNet图像分类模型的启发。咱们的网络有24个卷积层,后面是2个全链接层。咱们使用1x1降维层,后面是3x3卷积层,这与Lin等人相似,而不是GoogLeNet使用的Inception模块。咱们在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,而后将分辨率加倍来进行检测。完整的网络如图所示。

架构。咱们的检测网络有24个卷积层,其次是2个全链接层。交替1x1卷积层减小了前面层的特征空间。咱们在ImageNet分类任务上以一半的分辨率(224x224的输入图像)预训练卷积层,而后将分辨率加倍来进行检测。

咱们还训练了快速版本的YOLO,旨在推进快速目标检测的界限。快速YOLO使用具备较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的滤波器。除了网络规模以外,YOLO和Fast YOLO的全部训练和测试参数都是相同的。

咱们网络的最终输出是7x7x30的预测张量。

二、训练

咱们在ImageNet 1000类竞赛数据集上预训练咱们的卷积层。对于预训练,咱们使用上图中的前20个卷积层,外加平均池化层和全链接层。咱们对这个网络进行了大约一周的训练,而且在ImageNet 2012验证集上得到了单一裁剪图像88%的top-5准确率,与Caffe模型池中的GoogLeNet模型至关。咱们使用Darknet框架进行全部的训练和推断。

而后咱们转换模型来执行检测。Ren等人代表,预训练网络中增长卷积层和链接层能够提升性能。按照他们的例子,咱们添加了四个卷积层和两个全链接层,而且具备随机初始化的权重。检测一般须要细粒度的视觉信息,所以咱们将网络的输入分辨率从224x224变为448x448。

咱们的最后一层预测类几率和边界框坐标。咱们经过图像宽度和高度来规范边界框的宽度和高度,使它们落在0和1之间。咱们将边界框x和y坐标参数化为特定网格单元位置的偏移量,因此它们边界也在0和1之间。

咱们对最后一层使用线性激活函数,全部其它层使用下面的漏泄修正线性激活:

咱们优化了模型输出中的平方和偏差。咱们使用平方和偏差,由于它很容易进行优化,可是它并不彻底符合咱们最大化平均精度的目标。分类偏差与定位偏差的权重是同样的,这可能并不理想。另外,在每张图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推向零,一般压倒了包含目标的单元格的梯度。这可能致使模型不稳定,从而致使训练早期发散。

为了改善这一点,咱们增长了边界框坐标预测损失,并减小了不包含目标边界框的置信度预测损失。咱们使用两个参数λcoord和λnoobj来完成这个工做。咱们设置λcoord=5和λnoobj=5。

平方和偏差也能够在大盒子和小盒子中一样加权偏差。咱们的错误指标应该反映出,大盒子小误差的重要性不如小盒子小误差的重要性。为了部分解决这个问题,咱们直接预测边界框宽度和高度的平方根,而不是宽度和高度。

YOLO每一个网格单元预测多个边界框。在训练时,每一个目标咱们只须要一个边界框预测器来负责。咱们指定一个预测器“负责”,根据哪一个预测与真实值之间具备当前最高的IOU来预测目标。这致使边界框预测器之间的专业化。每一个预测器能够更好地预测特定大小,方向角,或目标的类别,从而改善总体召回率。

在训练期间,咱们优化如下多部分损失函数:

其中1iobj示目标是否出如今网格单元i中(是为1,否为0,根据该单元其实是否有目标肯定),1ijobj表示网格单元i的第j个边界框预测器“负责”该预测(若是该单元真有目标,而且该边界框IOU最大,则值为1,否为0)。

注意,若是目标存在于该网格单元中(前面讨论的条件类别几率),则损失函数仅惩罚分类错误。若是预测器“负责”实际边界框(即该网格单元中具备最高IOU的预测器),则它也仅惩罚边界框坐标错误。

咱们对Pascal VOC 2007和2012的训练和验证数据集进行了大约135个迭代周期的网络训练。在Pascal VOC 2012上进行测试时,咱们的训练包含了Pascal VOC 2007的测试数据。在整个训练过程当中,咱们使用了64个批大小,0.9的动量和0.0005的衰减。

咱们的学习率方案以下:对于第一个迭代周期,咱们慢慢地将学习率从0.001提升到0.01,若是咱们从高学习率开始,咱们的模型每每会因为不稳定的梯度而发散。咱们继续以0.01的学习率训练75个迭代周期,而后用0.001学习率训练30个迭代周期,最后用0.0001的学习率训练30个迭代周期。

为了不过分拟合,咱们使用弃权和大量的数据加强。在第一个链接层以后,弃权层使用0.5的比例,防止层之间的互相适应。对于数据加强,咱们引入高达原始图像20%的大小的随机缩放和转换。咱们还在HSV色彩空间中使用高达1.5的因子来随机调整图像的曝光和饱和度。

三、预测

就像在训练中同样,预测测试图像的检测只须要一次网络评估。在Pascal VOC上,每张图像上网络预测98个边界框和每一个框的类别几率。YOLO在测试时很是快,由于它只须要一次网络评估,不像基于分类器的方法。

网格设计强化了边界框预测中的空间多样性。一般很明显一个目标落在哪个网格单元中,而网络只能为每一个目标预测一个边界框。然而,一些大的目标或靠近多个网格单元边界的目标能够被多个网格单元很好地定位。非极大值抑制能够用来修正这些多重检测。对于R-CNN或DPM而言,性能不是关键的,非最大抑制会增长2%-3%的mAP。

四、YOLO的限制

  • YOLO的每个网格只预测两个边界框,一种类别。这致使模型对相邻目标预测准确率降低。所以,YOLO对成队列的目标(如 一群鸟)识别准确率较低。
  • 因为咱们的模型学习从数据中预测边界框,所以它很难泛化到新的、不常见角度的目标。咱们的模型使用相对较粗糙的特征来预测边界框,由于咱们的架构具备来自输入图像的多个下采样层。
  • YOLO的损失函数会一样的对待小边界框与大边界框的偏差。大边界框的小偏差一般是良性的,但小边界框的小偏差对IOU的影响要大得多。咱们的主要错误来源是不正确的定位。

三 与其余目标检测算法对比

目标检测是计算机视觉中的核心问题。检测流程一般从输入图像上(Haar,SIFT ,HOG ,卷积特征)提取一组鲁棒特征开始。而后,分类器或定位器被用来识别特征空间中的目标。这些分类器或定位器在整个图像上或在图像中的一些子区域上以滑动窗口的方式运行。咱们将YOLO检测系统与几种顶级检测框架进行比较,突出了关键的类似性和差别性。

  • 可变形部件模型。可变形零件模型(DPM)使用滑动窗口方法进行目标检测。DPM使用不相交的流程来提取静态特征,对区域进行分类,预测高评分区域的边界框等。咱们的系统用单个卷积神经网络替换全部这些不一样的部分。网络同时进行特征提取,边界框预测,非极大值抑制和上下文推理。代替静态特征,网络内嵌地训练特征并为检测任务优化它们。咱们的统一架构致使了比DPM更快,更准确的模型。
  • R-CNN。R-CNN及其变种使用区域提名而不是滑动窗口来查找图像中的目标。选择性搜索产生潜在的边界框,卷积网络提取特征,SVM对边界框进行评分,线性模型调整边界框,非极大值抑制消除重复检测。这个复杂流程的每一个阶段都必须独立地进行精确调整,所获得的系统很是慢,测试时每张图像须要超过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等的抓取检测。咱们对边界框预测的网格方法是基于MultiGrasp系统抓取的回归分析。然而,抓取检测比目标检测任务要简单得多。MultiGrasp只须要为包含一个目标的图像预测一个能够抓取的区域。没必要估计目标的大小,位置或目标边界或预测目标的类别,只找到适合抓取的区域。YOLO预测图像中多个类别的多个目标的边界框和类别几率。

四 实验

首先,咱们在PASCAL VOC 2007上比较YOLO和其它的实时检测系统。为了理解YOLO和R-CNN变种之间的差别,咱们探索了YOLO和R-CNN性能最高的版本之一Fast R-CNN在VOC 2007上错误率。根据不一样的偏差曲线,咱们显示YOLO能够用来从新评估Fast R-CNN检测,并减小背景假阳性带来的错误,从而显著提高性能。咱们还展现了在VOC 2012上的结果,并与目前最早进的方法比较了mAP。最后,在两个艺术品数据集上咱们显示了YOLO能够比其它检测器更好地泛化到新领域。

一、与其余实时系统的比较

  • 目标检测方面的许多研究工做都集中在快速制定标准检测流程上。然而,只有Sadeghi等实际上产生了一个实时运行的检测系统(每秒30帧或更好)。咱们将YOLO与DPM的GPU实现进行了比较,其在30Hz或100Hz下运行。虽然其它的努力没有达到实时性的里程碑,咱们也比较了它们的相对mAP和速度来检查目标检测系统中精度——性能权衡。
  • Fast YOLO是PASCAL上最快的目标检测方法;据咱们所知,它是现有的最快的目标检测器。具备52.7%mAP,实时检测的精度是之前工做的两倍以上。YOLO将mAP推到63.4%同时保持了实时性能。
  • 咱们还使用VGG-16训练YOLO。这个模型比YOLO更准确,但也比它慢得多。对于依赖于VGG-16的其它检测系统来讲,它是比较有用的,但因为它比实时的YOLO更慢,本文的其它部分将重点放在咱们更快的模型上。
  • Fastest DPM能够在不牺牲太多mAP的状况下有效地加速DPM,但仍然会将实时性能下降2倍。与神经网络方法相比,DPM相对低的检测精度也受到限制。
  • R-CNN Minus R用静态边界框提出取代选择性搜索。虽然速度比R-CNN更快,但仍然不能实时,而且因为没有好的边界框提出,准确性受到了严重影响。
  • Fast R-CNN加快了R-CNN的分类阶段,可是仍然依赖选择性搜索,每张图像须要花费大约2秒来生成边界框提出。所以,它具备很高的mAP,可是0.5的fps仍离实时性很远。
  • Faster R-CNN用神经网络替代了选择性搜索来提出边界框,相似于Szegedy等。在咱们的测试中,他们最精确的模型达到了7fps,而较小的,不太精确的模型以18fps运行。VGG-16版本的Faster R-CNN要高出10mAP,但比YOLO慢6倍。Zeiler-Fergus的Faster R-CNN只比YOLO慢了2.5倍,但也不太准确。

Pascal VOC 2007上的实时系统。比较快速检测器的性能和速度。快速YOLO是Pascal VOC检测记录中速度最快的检测器,其精度仍然是其它实时检测器的两倍。YOLO比快速版本更精确10mAP,同时在速度上仍保持实时性。

二、VOC 2007错误率分析

为了进一步检查YOLO和最早进的检测器之间的差别,咱们详细分析了VOC 2007的结果。咱们将YOLO与Fast R-CNN进行比较,由于Fast R-CNN是PASCAL上性能最高的检测器之一而且它的检测代码是可公开获得的。

咱们使用Hoiem等人的方法和工具。对于测试时的每一个类别,咱们看这个类别的前N个预测。每一个预测或者是正确的,或者根据错误类型进行分类:

  • Correct:正确的类别并且IOU>0.5
  • Localization:正确的类别,0.1<IOU<0.5
  • Similar:类别类似,IOU>0.1
  • Other:类别错误,IOU>0.1
  • Background:任何IOU<0.1的目标

下图显示了在全部的20个类别上每种错误类型平均值的分解图。

偏差分析:Fast R-CNN vs. YOLO。这张图显示了各类类别的前N个预测中定位错误和背景错误的百分比(N = #表示目标在那个类别中)。

YOLO努力地正肯定位目标。定位错误占YOLO错误的大多数,比其它错误源加起来都多。Fast R-CNN使定位错误少得多,但背景错误更多。它的检测的13.6%是不包含任何目标的误报。Fast R-CNN比YOLO预测背景检测的可能性高出近3倍。

三、结合Fast R-CNN和YOLO

YOLO比Fast R-CNN的背景误检要少得多。经过使用YOLO消除Fast R-CNN的背景检测,咱们得到了显著的性能提高。对于R-CNN预测的每一个边界框,咱们检查YOLO是否预测一个相似的框。若是是这样,咱们根据YOLO预测的几率和两个盒子之间的重叠来对这个预测进行提高。

最好的Fast R-CNN模型在VOC 2007测试集上达到了71.8%的mAP。当与YOLO结合时,其mAP增长了3.2%达到了75%,咱们也尝试将最好的Fast R-CNN模型与其它几个版本的Fast R-CNN结合起来。这些模型组合产生了0.3%到0.6%之间的小增幅。

VOC 2007模型组合实验。咱们检验了各类模型与Fast R-CNN最佳版本结合的效果。Fast R-CNN的其它版本只提供很小的好处,而YOLO则提供了显著的性能提高。

来自YOLO的提高不只仅是模型组合的副产品,由于组合不一样版本的Fast R-CNN几乎没有什么好处。相反,正是由于YOLO在测试时出现了各类各样的错误,因此在提升Fast R-CNN的性能方面很是有效。

遗憾的是,这个组合并无从YOLO的速度中受益,由于咱们分别运行每一个模型,而后结合结果。可是,因为YOLO速度如此之快,与Fast R-CNN相比,不会增长任何显著的计算时间。

四、VOC 2012结果

在VOC 2012测试集上,YOLO得分为57.9%mAP,这低于现有的最新技术,接近于使用VGG-16的原始R-CNN,见表3。咱们的系统与其最接近的竞争对手相比,在小目标上努力。在bottlesheeptv/monitor等类别上,YOLO的得分比R-CNN或Feature Edit低8%-10%,然而,在cattrain等其它类别上YOLO实现了更高的性能。

PASCAL VOC 2012排行榜。截至2015年11月6日,YOLO与完整comp4(容许外部数据)公开排行榜进行了比较。显示了各类检测方法的平均精度均值和每类的平均精度。YOLO是惟一的实时检测器。Fast R-CNN + YOLO是评分第四高的方法,比Fast R-CNN提高了2.3%。

咱们联合的Fast R-CNN + YOLO模型是性能最高的检测方法之一。Fast R-CNN从与YOLO的组合中得到了2.3%提升,在公开排行榜上上移了5位。

五、泛化能力,艺术品中的行人检测

用于目标检测的学术数据集以相同分布获取训练和测试数据。在现实世界的应用中,很难预测全部可能的用例,并且测试数据可能与系统以前看到的不一样[3]。咱们在Picasso数据集上和People-Art数据集上将YOLO与其它的检测系统进行比较,这两个数据集用于测试艺术品中的行人检测。

下图显示了YOLO和其它检测方法之间的比较性能。做为参考,咱们在person上提供VOC 2007的检测AP,其中全部模型仅在VOC 2007数据上训练。在Picasso数据集上的模型在VOC 2012上训练,而People-Art数据集上的模型则在VOC 2010上训练。

Picasso和People-Art数据集上的泛化结果。

R-CNN在VOC 2007上有高AP。然而,当应用于艺术品时,R-CNN明显降低。R-CNN使用选择性搜索来调整天然图像的边界框提出。R-CNN中的分类器步骤只能看到小区域,而且须要很好的边界框提出。

DPM在应用于艺术品时保持了其AP。以前的工做认为DPM表现良好,由于它具备目标形状和布局的强大空间模型。虽然DPM不会像R-CNN那样退化,但它开始时的AP较低。

YOLO在VOC 2007上有很好的性能,在应用于艺术品时其AP降低低于其它方法。像DPM同样,YOLO建模目标的大小和形状,以及目标和目标一般出现的位置之间的关系。艺术品和天然图像在像素级别上有很大不一样,可是它们在目标的大小和形状方面是类似的,所以YOLO仍然能够预测好的边界框和检测结果。

定性结果。YOLO在网络采样的艺术品和天然图像上的运行结果。虽然它将人误检成了飞机,但它大部分上是准确的。

四 实时目标检测

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

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

五 结论

咱们介绍了YOLO,一种统一的目标检测模型。咱们的模型构建简单,能够直接在整张图像上进行训练。与基于分类器的方法不一样,YOLO直接在对应检测性能的损失函数上训练,而且整个模型联合训练。

快速YOLO是文献中最快的通用目的的目标检测器,YOLO推进了实时目标检测的最新技术。YOLO还很好地泛化到新领域,使其成为依赖快速,强大的目标检测应用的理想选择。

7

参考文章:

[1]YOLO论文翻译——中文版(推荐)

[2]目标检测算法之YOLO

[3]YOLO:实时快速目标检测

[4]Redmon, J., Divvala, S., Girshick, R., Farhadi, A.: You only look once: Unified, real-time object detection. In: CVPR. (2016)

[5] YOLO: Real-Time Object Detection(官方网址)

相关文章
相关标签/搜索