"之前写物体检测系列文章的时候说过,关于YOLO算法,会在后续的文章中介绍,然而,由于YOLO历经3个版本,其论文也有3篇,想全面的讲述清楚还是太难了,本周终于能够抽出时间写一些YOLO算法相关的东西。本篇文章,我会先带大家完整的过一遍YOLOv1的论文,理解了YOLOv1才能更好的理解它的后续版本,YOLOv2和v3会在下一篇文章中介绍。"

YOLOv1

论文:《 You Only Look Once: Unified, Real-Time Object Detection 》
地址: https://arxiv.org/pdf/1506.02640.pdf

摘要:

我们提出YOLO,一种新的目标检测方法。以前的目标检测是用分类的方式来检测,而我们将目标检测定义成回归问题,从空间上分隔出边界框和相关的类别概率。这是一个简洁的神经网络,看一次全图后,就能直接从全图预测目标的边界框和类别概率。因为整个检测线是一个单一的网络,在检测效果上,可以直接做端到端的优化。我们的统一架构非常快。我们的基础YOLO模型每秒可以处理45帧图片。该网络的一个更小的版本——Fast YOLO,每秒可以处理155帧图片,其mAP依然能达到其他实时检测模型的2倍。对比最先进的检测系统,YOLO有更多的定位误差,和更少的背景误检情况(把背景预测成目标)。最终,YOLO学到检测目标的非常通用的表示。在从自然图片到其他领域,比如艺术画方面,YOLO的泛化能力胜过其他检测方法,包括DPM和R-CNN。

1.引言

人类看一眼图片就能立即知道,图片里有哪些目标,目标的位置,以及目标之间的交互关系。人类视觉系统快且精确,这让我们不用做过多显性意识层面的思考,就能执行类似驾驶这样的复杂任务。快速、精确的目标检测算法,将让计算机无需特定的传感器就能驾驶汽车;将使辅助设备能实时传递场景信息给人类,将解锁通用目的的响应式机器人系统的潜力。当前的检测系统,使用分类器来执行检测。为了检测一个目标,这些系统利用这个目标的分类器在一个测试图片上的不同位置使用不同的尺度来评估是否是该目标。比如DPM(deformable parts models)系统,就是使用滑动窗口的方式以均匀的步长跑完整个图片上的位置。更近期一些的方法,比如R-CNN使用候选区域的方式,首先生成候选边界框,然后运行分类器,根据结果删除一批边界框,对剩余的边界框进行排重处理,并根据图片场景中的其他目标来重新对剩余的边界框进行打分。这些复杂的过程又慢又难以优化,因为每个独立的组件都必须分开来训练。我们重新把目标检测问题框定成一个回归问题,直接从图片像素到边界框和类别概率。使用我们的系统,你只需看一次(you only look once ,YOLO)图片,就可以预测有什么目标以及目标的位置。YOLO很简洁:看图1:

 

  
一个卷积网络同时预测多个边界框和类别概率。YOLO在完整的图片上训练,并直接优化检测效果。与传统的检测方法相比,这个统一模型有许多优点:
  • 首先,YOLO非常快。因为我们框定检测是一个回归问题,所以我们不需要复杂的过程。我们在测试图片检测的时候,就简单的跑一下我们的神经网络,来做预测。我们的基础网络在TitanXGPU上,没有批处理的情况下,可以达到每秒45帧的速度,FastYOLO更快,可以达到150帧/秒。这意味着我们可以用不到25毫秒的延迟,实时处理视频流。此外,YOLO的平均精度是其他实时系统的2倍。我们系统在网络摄像头上实时运行的例子请查看我们的项目网页: http://pjreddie.com/yolo/.
  • 第二,YOLO在预测的时候,是在图片的全部范围上进行推理。不想滑动窗口和候选区域技术,YOLO在训练和测试时,看的是完整的图片,所以YOLO隐式编码了关于类别和类别外观的上下文信息。Fast R-CNN,一个顶级的检测方法,错误的把背景部分当成检测目标,因为该算法无法看到更大的上下文信息。与Fast R-CNN相比,YOLO在产生的背景错误还不到一半。
  • 第三,YOLO学习目标的通用表征。当在自然图片上训练好的模型,在艺术图片上测试时,YOLO的表现远超DPM和R-CNN。由于YOLO的高泛化能力,应用到新领域或未见过的输入上,相比之下不太可能出现故障。YOLO在检测精度方面,仍然落后于最先进的检测系统。虽然识别目标的速度快,但是很难精确的定位某些目标,尤其是小目标。我们会在实验中对此进行权衡。我们所有的训练和测试代码都是开源的。各种预训练的模型同样可以下载到。

2.统一检测

我们统一了独立的目标检测组件到一个单一的神经网络中。我们的网络使用完整的图片特征来预测每个边界框。 它还可以同时预测一个图像在所有类中的所有边界框。这意味着我们的网络推理的时候会考虑整个图片,包括图片中的所有对象。YOLO的设计,使其能做端到端的训练,并在保持一个高平均精度的同时实时的做预测。我们的系统将输入图片分成S\*S的网格。如果一个目标的中心落在一个格子里,这个格子就负责这个目标的检测。每个格子预测B各边界框以及每个边界框的置信度分数。这个置信度分数反应了模型有多确定该边界框里包含目标,以及该边界框就是最合适框住目标的边界框。我们正式定义置信度的公式:

 

  
第一项是格子包含目标的概率,第二项是预测的边界框和真实边界框的交并比(IOU)。如果格子里没有目标,那么置信度应该是0。每个边界框有5个预测:x,y,w,h,confidence。(x,y)坐标是边界框中心点相对于格子边界的表示。w和h是相对整个图像预测的。置信度是预测框和真实框IOU的表示。每个格子也预测了C 个条件类别概率:

 

  
这些概率的条件是格子中包含目标。我们每个格子只预测一组类别概率,不管边界框数量B是多少。在测试时,我们将条件类别概率乘以单个边界框的置信度:

 

  
这样就得到了能反映每个边界框中的类别概率的置信度分数。也就是说,这个置信度分数中既包含了边界框里是某个类别的概率,又包含了边界框本身对目标的适合程度。Figure2:

 

  
图2:我们的系统模型将检测作为回归问题。它将图片分割成S\*S的网格,每个格子预测B个边界框、这些边界框各自的置信度、C个类别概率,这个预测结果编码成一个S\*S\*(B\*5+C)的张量。(其中的5表示边界框的x,y,with,heigh,confidence这个5个参数,具体含义上面的段落已经解释过了。)
2.1 网络设计
我们以卷积神经网络的方式实现这个模型,并在PASCAL VOC检测数据集上进行评估。网络初始的卷积层从图片提取特征,全连接层输出概率和坐标。我们的网络架构受 GoogLeNet图片分类模型的影响。我们的网络有24个卷积层跟着2个全连接层。相比GoogleNet的inception模型,我们简单使用1\*1的reduction层,后面跟上3\*3的卷积层,类似Lin et al\[22\]。完整的网络可以看图3:

 

  
图中最终的输出结果是一个 7 × 7 × 30 的张量。
我们也训练了一个快速版本的YOLO,以推动快速目标检测领域的边界。Fast YOLO使用一个更少卷积层的神经网络(用9代替24),并且卷积层用了更少的filters。除了网络的大小,所有的训练和测试参数,YOLO和Fast YOLO是一样的。
2.2 训练
我们在ImageNet的1000分类竞赛的数据集上,预先训练了我们的卷积层。我们使用前面的20个卷积层,后面跟上一个average-pooling 层和一个全连接层。 我们对这个网络进行了大约一周的训练,并在ImageNet 2012验证集上获得了88%的top5准确率,与 Caffe’s Model Zoo 里的GoogLeNet模型相当。我们使用Darknet框架进行所有的训练和推理。然后我们改变模型来执行检测。Ren 等人提出同时添加卷积和连接层可以改善网络的预测效果。按照他们的例子,我们添加了四个卷积层和2个全连接层,用随机的方式初始化权重。检测经常需要细粒度的视觉信息,所以我们增加了输入图片的分辨率,将224\*224增加到了448\*448。我们的最后一层预测类别概率和边界框坐标。我们根据图片的高宽来归一化边界框宽度和高度,以便让边界框的高宽在0~1之间。我们参数化边界框的x和y坐标为特定格子位置的偏移,所以该坐标也落在0-1之间。我们在最后一层使用一个线性激活函数,其他层使用下面的带泄露的修正线性激活函数:

 

  
我们对模型输出的平方和误差做了优化。使用 sum-squared error是因为它易于优化,但是它不能完全实现我们最大化平均精度的目标。它将位置误差和分类误差同等权重看待,这可能不明智。并且,图片中大部分格子都是不包含任何目标的。这使得这些格子的置信度分数趋于0,经常会压倒( overpowering )包含目标的格子的梯度。这会导致模型的不稳定,在训练早期出现发散。
为了补救,我们增加来自边界框坐标预测的损失值,然后降低来自不包含目标的边界框的置信度预测的损失值。我们使用2个参数:

 

  
来实现这个目的。我们设置:

 

  
大边界框和小边界框中,平方和误差目前也是具有相同的权重。但是我们的误差度量应该能反映出小的偏离在大边界框中的影响没有在小边界框的影响大(比如100高宽的大框偏移5没什么,但是10高宽的小框偏移5就影响较大了)。我们采用预测边界框的宽和高的平方根代替直接将预测宽和高的方法,来部分解决这个问题。(平方根可以降低大框和小框的差距,但是差距仍然存在,所以是部分解决。)
YOLO的每个格子会预测多个边界框。在训练时我们只需要一个边界框预测器来负责每个目标。如果某个预测器在某个对象上预测的IOU最高,我们就分配该预测器负责预测这个目标的边界框。该方法使每个预测器在预测特定大小,纵横比,或目标类别上表现的更好,改善了整体的召回率。(这段中的边界框预测器貌似没有具体的介绍,所以没太弄的明白,但是好在yolo2开始引入了anchor box,并且说明了是通过kmeans的方式来的到,所以这里不深究了。)附上原文如下:
YOLO predicts multiple bounding boxes per grid cell. At training time we only want one bounding box predictor to be responsible for each object. We assign one predictor to be “responsible” for predicting an object based on which prediction has the highest current IOU with the ground truth. This leads to specialization between the bounding box predictors. Each predictor gets better at predicting certain sizes, aspect ratios, or classes of object, improving overall recall.
在训练期间,我们优化下面的损失函数:

 

  

  表示对象出现格子i里;

  表示格子i里的第j个边界框预测器“负责”预测该格子的边界框。

 

注意损失函数只在格子里有目标的时候才会惩罚分类误差(因此之前先讨论了条件类别概率)。同样只有在第j个预测器是负责预测格子边界框的预测器的时候(也就是格子i里有最高的IOU的那个预测器),才会惩罚边界框坐标误差。我们在PASCAL VOC2007和2012的训练集和验证集上训练网络用了135个epochs。当测试2012的数据时,我们也包含了2007的测试集进行训练。训练过程中我们始终使用64batch size , a momentum of 0.9,和0.0005的衰减。我们的学习率调整计划如下:第一个epochs我们缓慢上升学习率,从0.01到0.1。如果我们以一个高的学习率开始,我们的模型经常会因为不稳定的梯度而发散。我们继续在0.1的学习率下训练75个epochs,然后0.01下训练30个epochs,最后0.001下训练30个epochs。为了避免过拟合,我们使用dropout(失活层)和大量的数据增强。在第一个连接层之后,一个rate=0.5的dropout层,阻止了层之间的co-adaptation(互相适应)。数据增强方面,我们引入随机缩放和高达原始图像20%的平移。我们也以高达HSV颜色空间1.5倍的因子来随机调整图片的曝光度和饱和度。
2.3 推理(Inference)
就像训练那样,检测一张图片,也只需要一个网络。在PASCAL VOC 数据集上,网络每张图片预测98个边界框以及框里目标的类别。不像基于分类的方法,YOLO在预测的时候非常快,因为其只有一个单一的网络。网格设计在边界框的预测上强制使用了空间多样性。目标落在那个格子里经常是清晰的,网络为每个目标之预测一个边界框。然而,有一些大的目标,或者跨越了格子边界的目标,会被多个格子都定位到,这样就会出现重复的边界框。Non-maximal suppression (非极大值抑制)可以修复这些多重检测的问题。虽然非极大值抑制对于YOLO,不像对R-CNN或DPM那样关键,但是也增加了2-3%的mAP。
2.4 YOLO的局限性
YOLO施加了很强的空间约束,使得每个格子只能预测2个边界框,只能有一个类别。这个约束限制了同一个格子中邻近对象的检测。所以我们的模型很难预测像鸟群这样的邻近小目标。因为模型从数据中预测边界框,所以很难泛化到新的或不常见的纵横比或配置上。我们的模型架构对输入图像用了多个下采样层,所以模型使用了相对粗糙的特征来预测边界框。最后,当我们在一个趋近检测效果的损失函数上训练时,我们的损失函数对待小边界框和大边界框的误差是一样的。一个小误差在大边界框下通常不那么有影响,但是对小边界框来说,在IOU上的影响将更大。我们的误差主要来自定位错误。

3.对比其他检测系统

目标检测是计算机视觉领域的核心问题。检测过程通常从提取输入图片的一组鲁棒性特征开始。然后,分类器或定位器被用来在特征空间中识别目标。这些分类器或定位器要么是基于滑动窗口的样式贯穿整个图片,要么基于图片区域的子集。我们将YOLO和几个顶级的检测系统对比,突出显示了关键的相似处和不同点。
  • Deformable parts models。 DPM使用一个滑动窗口实现目标检测。DPM在提取静态特征,区域分类,为高分区域预测边界框等功能上分别使用了不同的流水线(pipeline)。我们的系统用一个卷积网络就代替了这些不同的流水线。该网络同时执行特征提取,边界框检测,非极大值抑制,上下文推理。该网络训练优化特征的提取而不是采用静态特征。我们统一了架构,这让YOLO成为比DPM更快更准确的模型。
  • R-CNN. R-CNN及其变体使用候选区域而不是滑动窗口来查找图像中的对象。基于Selective Search[14][28]生成潜在的边界框,一个卷积网络提取特征,一个SVM给边界框打分,一个线性模型调整边界框,一个非极大值抑制消除重复的检测。这个复杂的流水线的每个阶段都必须精确的独立调整,这使得系统很慢,要40多秒才能检测一张图片。
    YOLO和R-CNN有一些相似之处。每个格子提出可能的边界框,使用卷积特征为这些边界框打分。然而,我们的系统对格子的提议能力采用了空间约束,缓解了同一个目标的多重检测。我们的系统会给出少得多的边界框,比起Selective Search的每张图片2000个边界框,我们的系统只要98个。最后,我们的系统让这些独立的组件联合成一个单一的,可以共同优化的模型。
  • 其他快速检测器。Fast和Faster R-CNN专注于通过共享计算和在候选区域上使用神经网络代替Selective Search的方式提升速度。虽然这改善了R-CNN的速度和准确度,但是还达不到实时的性能。许多研究致力于提升DPM流水线[31][38][5]的速度。他们加速了HOG计算,使用级联,推送计算到GPUs。然而实际上只有30Hz的DPM[31]能够实时运行。YOLO完全抛弃了那些大型检测流水线中的独立组件,从设计上加速整个过程,而不是尝试优化它们。如人脸或人的单一类别检测器,可以高度优化,因为他们必须处理更少的变化。YOLO是一个通用目的的检测器,学习同时检测各种各样的目标。
  • Deep MultiBox。和R-CNN不同,Szegedy等人训练了一个神经网络来预测感兴趣的区域,而不是使用Selective Search。MultiBox也可以执行单一目标检测,将置信度预测替换成单一类别预测即可。然而,MultiBox不能检测通用的目标,而且仍然只是一个大型的检测管道,需要进一步对图像块进行分类。YOLO和MultiBox都使用卷积神经网络预测边界框,但是YOLO是一个完整的检测系统。
  • OverFeat。Sermanet 等人训练了一个卷积神经网络来执行定位,并调正定位器来执行检测[32]。 OverFeat高效的执行滑动窗口检测,但其仍然是一个分散的系统。 OverFeat是为定位做优化,而不是检测性能。和DPM一样,定位器在预测的时候只能看到图片的局部信息。 OverFeat无法推理出全局上下文,因此需要显著的后期处理来产生连贯的检测( produce coherent  detections)。
  • MultiGrasp. 我们的模型在设计上同 Redmon 等人[27]的grasp的检测工作类似。我们的网格法边界框预测是基于 MultiGrasp系统对grasps的回归。然而,grasp检测是比目标检测更简单的任务。MultiGrasp只需要预测包含一个目标的图像的一个抓取区域,它不需要估计出大小,位置,边界,类别,只需找出一个合适的抓取区域。YOLO则是为一个图像中的不同类别的多个目标预测边界框和类别概率。

4.实验

首先,我们比较YOLO和其他实时检测系统在PASCAL VOC 2007上的表现。为了理解YOLO和R-CNN变体的差异,我们探索了YOLO和Fast R-CNN(R-CNN变体中性能最好的版本)在VOC2007数据集上的误差。基于不同的误差,我们展示出YOLO可以刷新Fast R-CNN检测的分数,降低背景误检率,开创一个新的记录。我们也呈现了VOC2012上的结果,对比了YOLO的mAP和最优秀的mAP记录。最终,我们呈现了YOLO在新领域(2个艺术品数据集)的泛化能力比其他检测器更好。
4.1对比其他实时系统
许多目标检测领域的研究,都在致力于让标准的检测管道更快。 \[5\] \[38\] \[31\] \[14\] \[17\] \[28\]然而,实际上只有 Sadeghi 等人创作了一个实时的检测系统,达到30帧/秒或更高。我们比较了YOLO和他们的DPM的GPU实现,要么跑在30Hz要么在100Hz上(这里貌似应该是指GPU时钟频率,但是难道不应该是MHz吗?)。虽然其他的研究努力没有达到实时的层次,我们也比较了他们的相对mAP和速度,以检查在目标检测系统中可用的精度和性能权衡。据我们所知,在PASCAL上,Fast YOLO是现有的最快的目标检测方法,其mAP达到52.7%,比以前实时检测工作的精度高了2倍多。而YOLO将mAP提高到了63.4%,并且仍然能达到实时的要求。我们也用VGG-16训练了YOLO。这个模型有更高的精度,但是也明显更慢。这么做的意义是和其他依赖VGG-16的检测系统进行对比,但既然用VGG-16的YOLO无法达到实时要求,所以后续的文章内容将还是专注于我们更快的YOLO模型。
Fastest DPM致力于不降低更多mAP的情况下提升速度,但是其实时性仍然差了2倍\[38\]。这也是受DPM对比神经网络的方法有着更低的精度的限制。R-CNN minus R\[20\]用静态边界框提议来代替了Selective Search方法。虽然比R-CNN更快,但仍然达不到实时性,而且如果提议的静态边界框不够好,会大大降低精度。
Fast R-CNN是对R-CNN的分类阶段进行了提速,但是仍然依赖selective search方法,该方法为一张图片生成候选边界框的时间是2秒。因此该模型虽有着高的mAP,但是也有着低到0.5的fps,这仍然远远达不到实时性。最近的Faster R-CNN使用神经网路代替了selective search方法来给出边界框候选,类似 Szegedy et al.\[8\] 我们测试过,他们的最好精度下能达到7fps,降低精度的话能达到18fps。Faster R-CNN的VGG-16版本的精度是YOLO的10倍,但是速度比YOLO慢6倍。 ZeilerFergus的Faster R-CNN只比YOLO慢2.5倍,但也精度也同样更低。
4.2 VOC2007误差分析
为了进一步对比YOLO和目前最先进的检测器之间的差别,我们看看VOC2007上的详细结果分类。我们将YOLO和Fast R-CNN 对比,是因为在 PASCAL 上,后者是R-CNN中表现最好的变种,并且其检测是公开的。我们使用了 Hoiem et al. \[19\]的方法和工具。每个类别我们统计topN的预测结果。每个预测要么是正确的,要么是错误的,但是错误会根据具体的错误类型分类。

 

 
  

  
图4显示了所有20个类中每种错误类型的平均情况。YOLO很难准确定位目标。定位错误占YOLO所有错误的比例超过了其他所有错误的总和。Fast R-CNN的定位错误更低,但是背景错误更多。它把背景检测成目标的情况达到了13.6%,这个值几乎是YOLO的3倍。
4.3 联合Fast R-CNN和YOLO

我们通过利用YOLO给出的边界框的置信度,以及边界框和Fast R-CNN给出的边界框的重合度提升了预测的准确性。在 VOC 2007 测试集上,mAP从71.8%提升到了75.0%。其他版本的模型和Fast R-CNN的结合都没能达到这样的提升。

  

 

虽然YOLO和Fast R-CNN的联合提升了mAP,但是对速度没有任何好处。YOLO很快,快到即使和Fast R-CNN联合,也没有为其增加多少计算时间。

 

4.4 VOC 2012 Results
在2012数据集中,YOLO的表现没能达到最高技术水平,因为其在小目标,比如瓶子、羊等,的检测上表现不好,但是在其他比如火车、猫等目标上,YOLO的表现依然很好。联合YOLO和Fast R-CNN后,其表现比Fast R-CNN增加了2.3%,排名上升了5。
4.5 泛化能力:检测艺术品中的人
目标检测的学术数据集的训练和测试数据都是来自同一个分布。在现实世界中,要预测的图像可能和之前学过的不同。我们在 Picasso Dataset \[12\]和 People-Art Dataset \[3\] 上比较YOLO和其他检测系统,使用这两个数据集都是为了检测艺术品中的人。图5显示了YOLO和其他检测方法的性能对比。为了参考,我们给出了VOC2007数据集中PERSON的检测AP列,该列所有的模型只在VOC2007数据上训练。在Picasso列,模型是在VOC2012上训练的,在People-Art列,模式是在VOC2010上训练的。R-CNN在VOC2007上的AP算高的。然而,R-CNN在艺术品图像上的表现就会急速下降。R-CNN使用基于自然图像调优的Selective Search 边界框提议法。而R-CNN的分类阶段只能看到很小的区域,并且需要良好的候选区域提议。DPM在艺术图像上的表现没有R-CNN那么差,但是AP也有所下降。
YOLO在艺术图像上的表现相比其他模型下降的更少。 与DPM一样,YOLO建模对象的大小和形状,以及对象之间的关系和对象通常出现的位置。艺术图像和自然图像在像素级别非常不同,但是在物体的大小和形状上却是相似的,因此YOLO可以预测出良好的边界框并进行类别检测。

 

  

5.外部环境下的实时检测

YOLO是一个快速,准确的目标检测器,这使其成为计算机视觉应用的理想选择。 我们将YOLO连接到一个网络摄像头,并核实从摄像头获取图片到显示检测结果的实时性能。最终的系统是交互式的和吸引人的。虽然YOLO是独立处理图片,但是加上摄像头后,它的功能像一个跟踪系统,检测着目标的移动和外观变化。该系统的演示例子和源代码可以从我们的项目网站上找到: http://pjreddie.com/yolo

6 总结

我们提出YOLO,一个统一的目标检测模型。我们的模型构造简单,可以直接在全图上训练。和基于分类器的方法不同,YOLO在一个直接对应检测效果的损失函数上训练,并且训练的是一个完整的检测模型(覆盖了检测的所有过程,比如边界框预测、类别预测、非极大值抑制等)。Fast YOLO是目前文献中最快的通用目标检测器,YOLO打破了这个记录。YOLO在新领域的泛化能力使其成为对速度、鲁棒性有要求的应用下的理想选择。

致谢:

This work is partially supported by ONR N00014-13-1-0720, NSF IIS-1338054, and The Allen Distinguished Investigator Award。

参考文献:

请参考原论文。

总结一下:

  • YOLOv1提出了一个端到端的目标检测模型,输入图片,仅跑一个网络,即可识别出图片中的目标类型和目标的位置。
  • 不像滑动窗口和候选区域技术,YOLO在训练和预测时,看的是完整的图片,所以YOLO隐式编码了关于类别和类别外观的上下文信息,这大大减少了背景误检的情况。
  • YOLOv1相比其他模型,更快,已经可以达到实时检测的水品;泛化能力更强,即使在自然图片上训练,然后在艺术图片上测试也能有很好的表现。
  • YOLOv1的缺点也很明显:在目标位置的预测上还不够准确;很难检测小目标(比如鸟群);很难泛化到新的或不常见的纵横比图片上。

ok,yolov1就介绍到这里啦,下一篇文章《手把手教你用深度学习做物体检测(六):YOLOv2》中,我们会介绍v2在v1的基础上做了哪些改进。

版权声明:本文为anai原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/anai/p/11465175.html