YOLO的全拼是You Only Look Once,顾名思义就是只看一次,把目标区域预测和目标类别预测合二为一,做者将目标检测任务看做目标区域预测和类别预测的回归问题。该方法采用单个神经网络直接预测物品边界和类别几率,实现端到端的物品检测。所以识别性能有了很大提高,达到每秒45帧,而在快速YOLO(Fast YOLO,卷积层更少)中,能够达到每秒155帧。网络
当前最好系统相比,YOLO目标区域定位偏差更大,可是背景预测的假阳性优于当前最好的方法。架构
人类瞥了一眼图像,当即知道图像中的物体,它们在哪里以及它们如何相互做用。 人类视觉系统快速而准确,使咱们可以执行复杂的任务,好比汽车驾驶。框架
传统的目标检测系统利用分类器来执行检测。 为了检测对象,这些系统在测试图片的不一样位置不一样尺寸大小采用分类器对其进行评估。 如目标检测系统采用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算法仍然落后于最早进的检测系统。 虽然它能够快速识别图像中的对象,但它很难精肯定位某些对象,特别是小对象。 post
咱们将目标检测统一到一个神经网络。咱们的网络使用整个图像中的特征来预测每一个边界框。 它也是同时预测图像的全部类的全部边界框。 这意味着咱们的网络学习到的完整图像和图中全部的对象.YOLO设计可实现端到端训练和实时的速度,同时保持较高的平均精度。性能
若是没有目标,置信值为零。另外,咱们但愿置信度分数等于预测框与真实值之间联合部分的交集(IOU)。
这些几率是以网格包含目标为条件的,每一个网格单元咱们只预测的一组类别几率,而无论边界框的的数量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。
目标检测是计算机视觉中的核心问题。检测流程一般从输入图像上(Haar,SIFT ,HOG ,卷积特征)提取一组鲁棒特征开始。而后,分类器或定位器被用来识别特征空间中的目标。这些分类器或定位器在整个图像上或在图像中的一些子区域上以滑动窗口的方式运行。咱们将YOLO检测系统与几种顶级检测框架进行比较,突出了关键的类似性和差别性。
YOLO与R-CNN有一些类似之处。每一个网格单元提出潜在的边界框并使用卷积特征对这些框进行评分。可是,咱们的系统对网格单元提出进行了空间限制,这有助于缓解对同一目标的屡次检测。咱们的系统还提出了更少的边界框,每张图像只有98个,而选择性搜索则只有2000个左右。最后,咱们的系统将这些单独的组件组合成一个单一的,共同优化的模型。
许多研究工做集中在加快DPM流程上。它们加速HOG计算,使用级联,并将计算推进到GPU上。可是,实际上只有30Hz的DPM能够实时运行。
YOLO不是试图优化大型检测流程的单个组件,而是彻底抛弃流程,被设计为快速检测。
像人脸或行人等单类别的检测器能够高度优化,由于他们必须处理更少的变化。YOLO是一种通用的检测器,能够学习同时检测多个目标。
首先,咱们在PASCAL VOC 2007上比较YOLO和其它的实时检测系统。为了理解YOLO和R-CNN变种之间的差别,咱们探索了YOLO和R-CNN性能最高的版本之一Fast R-CNN在VOC 2007上错误率。根据不一样的偏差曲线,咱们显示YOLO能够用来从新评估Fast R-CNN检测,并减小背景假阳性带来的错误,从而显著提高性能。咱们还展现了在VOC 2012上的结果,并与目前最早进的方法比较了mAP。最后,在两个艺术品数据集上咱们显示了YOLO能够比其它检测器更好地泛化到新领域。
Pascal VOC 2007上的实时系统。比较快速检测器的性能和速度。快速YOLO是Pascal VOC检测记录中速度最快的检测器,其精度仍然是其它实时检测器的两倍。YOLO比快速版本更精确10mAP,同时在速度上仍保持实时性。
为了进一步检查YOLO和最早进的检测器之间的差别,咱们详细分析了VOC 2007的结果。咱们将YOLO与Fast R-CNN进行比较,由于Fast R-CNN是PASCAL上性能最高的检测器之一而且它的检测代码是可公开获得的。
咱们使用Hoiem等人的方法和工具。对于测试时的每一个类别,咱们看这个类别的前N个预测。每一个预测或者是正确的,或者根据错误类型进行分类:
下图显示了在全部的20个类别上每种错误类型平均值的分解图。
偏差分析:Fast R-CNN vs. YOLO。这张图显示了各类类别的前N个预测中定位错误和背景错误的百分比(N = #表示目标在那个类别中)。
YOLO努力地正肯定位目标。定位错误占YOLO错误的大多数,比其它错误源加起来都多。Fast R-CNN使定位错误少得多,但背景错误更多。它的检测的13.6%是不包含任何目标的误报。Fast R-CNN比YOLO预测背景检测的可能性高出近3倍。
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测试集上,YOLO得分为57.9%mAP,这低于现有的最新技术,接近于使用VGG-16的原始R-CNN,见表3。咱们的系统与其最接近的竞争对手相比,在小目标上努力。在bottle
,sheep
和tv/monitor
等类别上,YOLO的得分比R-CNN或Feature Edit低8%-10%,然而,在cat
和train
等其它类别上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
参考文章:
[2]目标检测算法之YOLO