文章目录

  • 1、优质资源
  • 2、论文思想
    • 概述
    • 网络结构
    • 预测
    • 训练
  • 3、论文翻译
    • 摘要
    • 1.介绍
    • 2.统一的检测
      • 2.1.网络设计
      • 2.2. 训练
      • 2.2.推论
      • 2.3.YOLO的局限性
    • 3.与其他目标检测算法的对比
    • 4.实验
      • 4.1. 与其他实时系统的比较
      • 4.2. VOC 2007 误差分析
      • 4.3. 将 Fast R-CNN 和 YOLO进行结合
      • 4.4. VOC 2012 的测试结果
      • 4.5. 泛化能力: 艺术作品中的人物检测
    • 5. 真实场景的实时检测
    • 6. 结论

1、优质资源

超级无敌通俗的YOLO系列讲解
YOLO系列超级详细手写

2、论文思想

概述

RCNN系列将目标检测作为分类问题来解决,而YOLO将目标检测问题作为回归问题来处理。YOLO非常的快,不容易犯background errors,并且模型泛化到其他领域效果比较好;但是容易犯coordinate errors,精度稍低,并且recall比较低,也就意味着对于小目标和密集目标的检测能力差。
     YOLO是一个Region-free的算法,是一个单阶段的目标检测算法,检测的时候,输入全图,然后一次前向计算就可以得到预测结果,因此非常快。

网络结构


     首先我们可以输入任意尺度的图片,但是会将其resize448*448*3的再喂入模型,模型结构是一个全卷积网络,没有池化,包含24个卷积层和最后的两层的全连接层,输出7*7*30的包含预测结果的tensor。
     那么这个7*7*30的tensor包含什么样的预测结果呢?关键是包含着预测框bounding-box和各个类别的条件类别概率。

  1. 7x7x30=7x7x(2x(1+4)+20)->也就是图像会被划分为7x7个grid_cell,每个grid_cell负责预测两个bounding_box,每个bounding_box包含1+4个参数,同时每个gridcell预测20个类别的条件类别概率。
  2. 上面的1指的是一个confidence参数,它表征的是其对应的bounding box包含物体的概率。 c o n f i d e n c e = P r ( o b j e c t ) ∗ I O U p r e d t r u t h confidence=Pr(object)*IOU^{truth}_{pred} confidence=Pr(object)∗IOUpredtruth​其中 P r ( o b j e c t ) ∈ 0 , 1 Pr(object)\in{0,1} Pr(object)∈0,1也就是包含物体 P r ( o b j e c t ) = 1 Pr(object)=1 Pr(object)=1,不包含物体 P r ( o b j e c t ) = 0 Pr(object)=0 Pr(object)=0。那么也就是就是包含物体 c o n f i d e n c e = I O U p r e d t r u t h confidence=IOU^{truth}_{pred} confidence=IOUpredtruth​,不包含物体 c o n f i d e n c e = 0 confidence=0 confidence=0。而 I O U p r e d t r u t h IOU^{truth}_{pred} IOUpredtruth​就是ground_truth与bound_box的IOU。
  3. 上面的4指的是4个参数,包括bound-box中心点的归一化之后的坐标 ( x , y ) (x,y) (x,y)和bound-box归一化之后的长宽 ( w , h ) (w,h) (w,h)
  4. 上面的20指的是VOC数据集上20个类别的条件类别概率也就是假设bounding-box包含物体的前提下,是对应类别的概率,也就是 P ( c l a s s i ∣ o b j e c t ) P(class_i | object) P(classi​∣object)。因此,bounding-box对于各个类别的真实概率就是 c o n f i d e n c e ∗ P ( c l a s s i ∣ o b j e c t ) confidence*P(class_i | object) confidence∗P(classi​∣object)。

预测

将待预测图片resize448*448*3的喂入模型,输出7*7*30的包含预测结果的tensor。然后解析这个tensor得到所有bounding-box的信息,对所有的bound-box进行筛选,然后将其坐标和尺寸映射回到原图,之后去重就得到了最终的预测结果框了,将其绘制在原图上就完成了预测。

  1. 解析tensor。模型输出的x,y,w,h都需要经过处理才能得到真实的值。w,h的处理:网络输出的w,h是归一化之后又取根号了的。我们要将他们先平方,然后乘上图片的w,h这样才能得到真实的bounding-box的w,h。x,y的处理:x,y是经过归一化了之后,相对于网格左上角的偏移。以x为例,这里一个通俗的理解是,模型输出的是0.5,表示0.5个grid_cell,也就是这个x相对于网格左上角偏移了0.5个grid_cell。把左上角的x加上,就得到了假设是3.5,那么也就是Bounding-box的x坐标相对于全图左上角偏移了3.5个grid_cell,然后在乘上grid_cell的大小(大小= x i m g 7 {x_{img}\over{7}} 7ximg​​),就得到了bounding-box中心点x的真实坐标了(当然这个是相对于模型的输入448*448而言的)。
  2. 筛选。就是事先给定阈值,如果bounding-box的confidence小于这个阈值,也就是这个bounding-box包含物体的概率达不到我们的要求,我们就直接将它删去,也就是将confidence置为0。
  3. 去重。使用NMS非极大值抑制算法,去除重复得预测框。代码实现见链接算法流程为:首先将所有bounding-box按照类别置信度排序,我们选择类别置信度最大的bounding-box与其余的bounding-box进行IOU计算,若是结果大于一个阈值,我们就删除类别置信度低的bounding-box,接着继续取下一个未操作过的、类别置信度最大的bounding-box做上述操作。迭代完毕之后,就不包含重复预测框了。当然,上述的描述是对于某一个类别的,我们对于所有的类别都应该进行这样的操作。并且,上面说的类别置信度,其实就是我们之前提到的真实概率,就是 c o n f i d e n c e ∗ P ( c l a s s i ∣ o b j e c t ) confidence*P(class_i | object) confidence∗P(classi​∣object)。

训练

流程概括:首先,将训练集图片载入模型中,得到7x7x30的tensor从中解析出bounding-box的5个参数。同时,ground-truth也会被制作成7x7x30的tensor,也可以拿到5个参数。接着就可以进行损失计算,梯度下降,更新网络了。
     制作ground-truth对应的7x7x30的tensor:这个是上面解析的逆过程。首先,对于所有的ground-truth-box, ( w g t , h g t ) (w_{gt},h_{gt}) (wgt​,hgt​),分别除以图片的 w i m g , h i m g w_{img},h_{img} wimg​,himg​,得到进行归一化,再开个根号,得到 ( w g t w i m g 2 , h g t h i m g 2 ) (\sqrt[2]{{w_{gt}}\over{w_{img}}},\sqrt[2]{{h_{gt}}\over{h_{img}}}) (2wimg​wgt​​ ​,2himg​hgt​​ ​)。然后,对于所有的 ( x g t , y g t ) (x_{gt},y_{gt}) (xgt​,ygt​),首先计算是几点几个网格,也就是分别除上grid_cell的大小,而grid_cell的大小就是img的大小除上7,因此就是 x g t ∗ 7 x i m g {x_{gt}*7}\over{x_img} xi​mgxgt​∗7​和 y g t ∗ 7 y i m g {y_{gt}*7}\over{y_img} yi​mgygt​∗7​,然后再减去网格左上角的偏移就好了。
     损失函数定义如下:

     总览:看着复杂,但是思想还是比较简单的。主要针对正负样本而言的5项,其中1,2,3,5都是正样本的,第4项是负样本的。1,2两项是正样本的中心定位误差和宽高定位误差,3,4项是正负样本的置信度误差,最后第5项是网格的分类误差。
     细节正负样本:正样本指的是ground-truth中心点所在网格生成的两个bounding-box中置信度高的一个预测框,其余的所有预测框都是负样本。我们希望的是正样本与ground-truth越接近越好,而负样本则是置信度越小越好。根号:为了避免同样的差距,大框对于损失函数的影响比小框大,所以加了个根号平衡一下。损失函数:用的全部都是回归问题的MSE损失函数。grid_cell的类别:其实就是他生成的两个bounding-box中置信度最大的那个bounding-box的类别。

3、论文翻译

YOLO-统一的、实时的目标检测模型

摘要

我们提出了YOLO,一个新的目标检测技术。YOLO之前的目标检测方法通过region proposal产生大量的可能包含物体的先验框,然后适用分类器判别其中识别包含物体,以及物体所属类别的概率。YOLO不同于这些检测方法,他将目标检测作为一个回归问题来解决。对于输入的图像,YOLO的一前向计算中,仅仅使用一个神经网络,就直接得到了预测框的坐标信息和物体的概率。因为整个检测过程是在一个神经网络中实现的,YOLO可以端到端的优化目标检测的性能。
     YOLO检测物体的速度非常的快,标准版本YOLO的实时图片检测效率可以达到45FPS。网络较小的版本FAST YOLO在达到其他实时检测器两倍mAP的同时,检测速度达到了155FPS。相比于其他state-of-the-art 的检测器,YOLO在定位上更容易犯错,但是在背景上预测出不存在物体的情况会少一点。而且,相比于DPM和R-CNN,YOLO能够学习到更加抽象的物体特征,这使得它能够更好的从自然数据集中迁移到其他领域,如艺术作品。

1.介绍

人们瞥一眼图像,就能立刻知道图像里有什么物体,他们在什么位置以及他们之间如何交互。人类的视觉系统又快又准确,使得我们可以处理复杂的任务,例如驾驶时候无意识的思考。快速、准确的目标检测算法可以让计算机在没有特殊传感器的情况下驾驶车辆,使得服务设备向用户传达实时的场景信息,并且释放通用目标响应式机器人系统的潜力。
     现在的检测系统使用分类器去完成目标检测任务。为了检测物体,这些检测系统在测试图的不同位置和尺寸的bound-box上使用物体的分类器评估是否包含这个物体。如DPM系统使用滑窗的方法,这个方法使用一个滑窗在整张图片上均匀滑动,并且评估是否包含物体。

图1:YOLO检测系统。用YOLO处理图片是简单并且直接的。
(1)YOLO将输入图片的大小调整为448*448的;
(2)将图片喂如一个单卷积网络;
(3)使用模型的置信度筛选检测的结果。
     在DPM之后提出的很多目标检测方法例如R-CNN使用egion proposal的方法,首先生成图片中可能包含待检测物体的bounding boxes,然后使用分类器来评估这些bounding boxes。接着在后处理阶段再改善这些bounding boxes,消除重复的预测框,并基于整个场景中其他的物体对这些预测框重新进行打分。整个复杂的流程是非常缓慢的,并且因为各个环节都是分开训练的,检测性能很难进行优化。
     我们将目标检测任务当作回归问题来处理,直接通过整图的所有像素就能得到bbox的坐标、bbox中包含物体的置信度和物体的类别概率了。使用YOLO,每张图片只需要输入神经网络就能得出图片中包含了多少物体以及他们各自的位置。
     YOLO非常的简单:参见图一,单个卷积神经网络能够同时预测多个bbox以及这些bbox对应的类别概率。YOLO使用全图进行训练并且直接优化预测性能。这个统一的模型相较于传统的目标检测方法有很多的优点。
     第一,YOLO非常得快。自从我们将目标检测作为回归问题来解决之后,我们不再需要复杂的检测流程,只需要将图片输入神经网络中就可以得到预测结果。我们的标准网络在Titan X GPU上没有批处理的情况下可以达到45FPS,快速版本的网络更是达到了150FPS。这就意味着我们可以以25ms的延迟处理流式视频。而且,YOLO的mAP是其他实时检测系统的两倍以上。
     第二,YOLO在做预测的时候会对图像进行全局的分析。不同于滑窗或者基于region proposal的方法,YOLO在训练和测试的时候能够看到完整的图像,所以它会隐式地对类别和整体地上下文信息进行编码。Fast R-CNN是一个优秀的目标检测算法,但是他的背景误检率很高,因为它看不到完整的上下文信息。而YOLO背景误检的错误率不到Fast R-CNN的一半。
     第三,YOLO能够学到图像的泛化特征。将使用自然图片训练的YOLO模型放到艺术作品中测试的时候,YOLO相比于DPM和 R-CNN而言都有更好的表现。因为YOLO可以学到高度泛化的特征,所以在迁移到其他领域或者接收到意外的输入的时候,都能够表现良好。
尽管YOLO有着这些优点,但是仍然存在一些缺点。YOLO在精确率方面仍然落后于先进的目标检测系统。虽然它能够快速识别图片中的物体,但是容易产生定位错误。并且对于小物体的检测效果并不好。我们将在实验中进一步研究这些问题。

2.统一的检测

我们将目标检测的各个部分统一到一个神经网络中。网络使用来自全图的特征去预测每一个bounding-box和它对应的类别概率。这就意味着网络能够全面的了解图像和图像中所有的对象。YOLO的设计使得在保持高AP的情况下,能够实现端到端的训练和实时的检测速度。
     YOLO将输入图片划分为S*S个网格,如果目标中心点落在一个网格中,那么就应该由这个网格负责去检测这个物体。
     每个网格预测B个bounding-box以及对应的置信度得分,这些置信度得分反映了模型对于网格的预测:bounding-box是否包含物体以及bbox坐标预测有多准。公式定义如下:

如果这个网格中不存在物体,那么对应的置信度得分应该为0.否则,如果我们认为他的置信度得分应该为bbox和真实框对应的IOU。
     每个bbox包含5个预测值,x,y,w,h还有置信度。(x,y)描述了bbox的中心与网格边界的相对值。w,h是预测了bbox的相对于整幅图的宽和高的比例。最后置信度表示了bbox与真实框之间的IOU。
     每个网格同样也会预测c个条件类别概率,Pr(Classi|Object),也就是在包含物体的条件下,它属于某个类比的概率。我们是对于每个网格预测一组类别概率,不管它包含多少个bbox。
     在测试的时候我们将条件类别概率和每个bbox的置信度相乘,

就可以得到每个bbox的具体类别置信度得分了。这个得分反映了bbox中包含这个类别物体的概率以及bbox与对象的匹配程度。

图像2:YOLO将目标检测作为回归问题来解决。他将输入图片分为ss个网格,每个网格预测B个bbox,对应这些框的置信度以及c个条件类别概率。这些预测结果被编码为一个S × S × (B ∗ 5 + C)大小的 张量。
为了在PASCAL VOC数据集上评估YOLO,我们将S设置为7,C设置为20,所以最终的预测结果为7
7*30的张量。

2.1.网络设计

我们使用单个卷积神经网络去实现它,并且使用PASCAL VOC 目标检测数据集对他进行评估。网络的卷积层用于提取图像特征,全连接层用于策瑜输出的概率和坐标。
     YOLO借鉴了GoogLeNet 的图片分类网络结构,我们使用了24个卷积层和两个全连接层,不同的是,YOLO并没有使用GoogLeNet 中的inception modules,我们使用了11+33的卷积简单替换,类似Lin等人。完整的网络结构见图三。
     我们还训练了快速版本的YOLO,旨在推动快速目标检测的界限。快速版本的YOLO使用了包含更少卷积层的神经网络,并且层内的卷积核也更少了。除了网络的尺寸,其余训练和测试的参数YOLO以及快速版本的YOLO都相同。

图3:网络结构。YOLO由24个卷积层和两个全连接层构成。交替的11卷积层减少feature-map的尺寸。在ImageNet 图像分类任务中,我们使用224224的输入图像预训练了分类的卷积神经网络,然后在做目标检测的时候将尺寸提高了一倍(也就是输入448448的图片)。
     网络的最终输出结果就是包含预测结果的7
7*30的张量。

2.2. 训练

我们在ImageNet 1000分类数据集上预训练了我们的卷积网络。使用上述网络中的20个卷积层,一个全局平均池化层以及一个全连接层,作为预训练网络。我们花了大约一周的时间训练这个模型,并且在ImageNet 2012测试集上top-5准确率达到了88%,这个结果和Caffe’s Model Zoo在GoogLeNet上的效果相当。
     我们接下来使用这个模型去做目标检测。Ren etal. 的研究显示在预训练模型上添加卷积层和全连接层能够提高性能。按照这个思想,我们添加了随机初始化权重的4层卷积和两层全连接。检测通常细粒度的视觉信息,所以我们将网络的输入分辨率由224224增大为448448。
     最后一层预测类别概率和bbox的坐标,我们使用图片的宽和高归一化了bbox的宽和高,所以他们落在了0-1之间。并且我们设计bbox的中心点坐标(x,y)是相对于某一个网格的偏移,所以他们同样被归一化到0-1之间。
最后一层使用了线性的激活函数,而其余所有层都使用了leaky RELU激活函数,公式如下:

我们对于模型输出的平方和误差进行了优化。我们使用平方和误差因为它很容易被优化,然而它并不完全符合我们的最大化平均精度的目标。他将定位误差和分类误差一致看待,这并不理想。并且,对每张图片而言,很多网格并不包含任何物体,对应网格的置信度得分趋向于0,通常会压倒包含对象的单元格的梯度,会导致了模型的不稳定,导致训练提前发散。
     为了解决这个问题,我们增加了bbox坐标预测的损失,减小了不包含物体的bbox的置信度损失。我们使用λcoord and λnoobj 这两个参数来完成这个任务,并且我们设置λcoord = 5 and λnoobj =0.5.
     平方和损失将大框的损失与小框的损失一致看待。我们的错误度量应该反映的小框的小偏差比大框的小偏差更重要。对了平衡这个问题,我们预测bbox的长宽的平方根形式而不是直接预测长宽本身。
     YOLO中每个网格都会预测多个bbox,在训练的时候,我们希望每个目标由一个bbox来进行预测。因此,当前哪一个bbox与ground-truth box IOU最大,这个bbox就负责来预测目标。这会使得每个bbox专门负责特定物体的检测,而每一个bbox对特定的尺寸、长宽比的物体的类别预测会表现得越来越好,来提高综合的recall。
     在训练期间,我们优化了已下得多部份损失函数:

式中表示如果网格中包含物体,表示第j个网格负责预测网格i中的物体
注意:如果网格中包含物体,则损失函数仅仅惩罚分类得损失,因此前面讨论了条件类别概率。如果一个bbox是与ground-truth计算IOU最大得,那么它负责预测物体,并且会产生坐标损失
     我们在PASCAL VOC 2007 和 2012训练和验证数据集上对网络训练了135轮。当我们在2012上测试得时候,同样包括了用于训练的2007得测试数据。在整个训练过程中,我们使用64个批次,0.9的动量和0.0005的衰减率。
我们的学习率计划如下:最开始的几轮中,我们将学习率从10-3缓慢提高到了10-2。如果我们开始的时候就使用高学习率的话,模型可能由于不稳定的梯度而发散。我们继续使用10-2的学习率训练75轮,接着使用10-3的学习率训练30轮,最后使用10^-4的学习率训练30轮。
     为了避免过拟合,我们使用dropout 和数据的增广技术。在第一个全连接层之后使用0.5的dropout 层来防止层之间的协同作用。对于数据增广而言,我们引入了高达原始图像大小20%的随机缩放和平移。我们还可以在HSV颜色空间中随机调整图像的曝光和饱和度,调整系数高达1.5。

2.2.推论

就像训练一样,对于一张测试图片的检测只需要进行一次前向计算。在PASCAL VOC数据集上,网络对于每张图片会预测98个bbox还有每个bbox对应的类别概率。YOLO在测试的时候非常的快,因为它不同于基于分类器的方法,它只需要一次前向计算。
     网格设计在bbox预测中强化了空间的多样性。通常很清楚对象落在哪个网格中并且网络对于每个对象只产生一个预测框。然而,一些大型的对象或者接近多个网格边界的对象会被多个网格定位。NMS可以修正这些多重检测。虽然对于 R-CNN或者DPM的性能来说不重要,NMS增加了2-3%的mAP.

2.3.YOLO的局限性

YOLO对bbox预测施加了强大的空间约束,因为每个网格只预测两个框并且只包含一个类别。这个空间约束限制了我们模型可以预测的临近对象的数量。模型对于那些成群出现的小目标,比如鸟群,预测效果并不好。
     由于我们的模型是从数据中来学习bbox的信息,所以他很难推广到新的目标或者不同寻常的尺寸或者配置的对象。我们的模型还使用相对粗糙的特征来预测bbox,因为我们的架构中有对输入图片多次下采样的层
     最后,当我们训练一个接近检测性能的损失函数时候,对于大框和小框的错误,损失函数同等对待。大框中的小错误是良性的,而小框中的小错误对于IOU有更大的影响。我们最主要的错误来源就是不正确的定位。

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

目标检测是计算机始觉得主要问题。检测的流程通常开始于从输入图像中提取一组鲁棒特征,接下来使用分类器或者定位器在特征空间中去识别物体。这些分类器或者定位器要么在整图上以滑动窗口的方式运行,要么在图像中的某些区域子集上运行。我们将YOLO和一些优秀的目标检测算法进行了比较,突出了关键的相同点和不同点。
     可变形部件模型DPM。DPM使用滑窗的方法进行目标检测。NPM使用不相交的流程去提取静态特征、分类区域和高分区域的bbox等。YOLO使用单个卷积神经网络替换这些分离的部分。网络同时进行特征提取,bbox预测、非极大值抑制和上下文推理。不同于静态特征,网络训练线性特征并且在检测任务中优化他们。相比于DPM,我们统一的结构带来了会更快、更准确的YOLO模型。
     R-CNN。R-CNN和他的变体使用region proposals的方法而不是滑窗的方法去找到图片中的目标。可选择区域产生潜在的bbox,再使用卷积神经网络提取特征,一个SVM分类器评估bbox,一个线性模型调整bbox,再使用NMS去除重复框。整个复杂流程的每个阶段必须精确的调整,并且得到结果的缓慢,测试的时候每张图片的处理超过40s。
     YOLO和R-CNN有一些相似之处。每个网格提出有潜力的bbox并且使用卷积特征给bbox打分。然而,YOLO在网格单元上建议设置空间约束,有助于减轻对于相同物体的重复检测。YOLO同样提出了更少的bbox,相比于大约2000的可选择区域,YOLO每张图片只有98个bbox。最后,YOLO将这些单独的部分组合成了一个单独的、联合优化的模型。
     其他的快速检测器。Fast R-CNN或者Faster R-CNN通过共享计算和使用神经网络评估区域而非选择性搜索来加速R-CNN网络。虽然相比于R-CNN都提高了速度和精度,但是任然达不到实时检测的效果。
     很多研究工作专注于提高DPM的结构。他们加速HOG计算,使用级联,并将计算推送到GPU上。但是只有30HZ的DPM跑在实时中。YOLO没有尝试优化大型检测流程的各个部分,而是丢掉了整个流程并且设计的很快。
     像人脸或者人这样的单个类别的检测器能够被高度优化,因为他们必须处理更少的变化。YOLO是一个通用的检测器,能够同时学习检测不同类比的物体。
     Deep MultiBox。不同于 R-CNN,Szegedy等人训练了一个卷积神经网络去预测感兴趣的区域,而不是使用选择性搜索。MultiBox通过使用单个类比的预测代替预测置信度,去进行单个目标的检测。然而,MultiBox不能进行通用的目标检测,仍然是大的检测流程中的一部分,需要进一步的图片分类信息。YOLO和多重框都使用了卷积神经网络去预测图片中的bbox,但是YOLO是一个完整的目标检测算法。
     OverFeat。Sermanet 等人训练了一个卷积神经网络来执行定位,并使用定位器来进行预测任务。OverFeat有效的使用了滑窗机制,但是仍然是一个不相交的系统。OverFeat优化了定位而不是检测过程。像DPM一样,定位器在做预测的时候只看到了局部信息。OverFeat不能分析全局的上下文信息并且因此需要重要的后处理阶段去做相关的检测。
     MultiGrasp。我们在设计上的工作和Redmon等人在抓取检测上的工作很像。 我们网格预测bbox的方法基于回归抓取的MultiGrasp 算法。然而,抓取检测比目标检测简单多了。对于每个包含一个物体的图片,MultiGrasp 只需要预测单个可抓取区域即可。它不需要估计物体大小,位置还有物体的边界,只需要找到一个适合的可抓取区域就可以了。而YOLO在图片中预测多类物体的bbox和类别概率。

4.实验

首先我们比较了YOLO与其他实时目标检测模型在 PASCAL VOC 2007数据集上的性能。为了了解YOLO和 R-CNN变体之间的差异,我们探究了YOLO和Fast R-CNN在VOC 2007上的差异,后者是R-CNN性能最高的版本之一。基于不同的误差分布,我们发现YOLO可以用来重新评估 Fast R-CNN算法并且减少背景误判的错误,从而显著提高检测性能。我们还展示了VOC 2012的结果,并将mAP指标与当前最先进的方法进行了比较。最后,我们发现YOLO在两个艺术品数据集上,相比其他检测器能够更好的泛化到新的领域。

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

很多目标检测的研究工作专注于建立快速检测。然而,只有Sadeghi事实上完成了一个可以运行在实时环境下的目标检测算法。我们将YOLO与他们的DPM的GPU实现进行了比较,DPM的运行频率可以达到30Hz或者100Hz。虽然其他研究工作没有达到实时的效果,我们也比较了他们的相对mAP以及速度,用来验证目标检测算法的准确性与性能之间的权衡。

快速版本的YOLO是PASCAL上最快的目标检测算法,而且据我们所知,他也是最快的目标检测算法。他达到了53.7%的mAP,是先前实时目标检测系统两倍的准确率。YOLO在维持实时性能的同时,将mAP提高到了63.4%。
     我们同样使用了VGG-16训练YOLO。他会比YOLO更准确,但是速度也明显慢了。相对于其他的基于VGG-16的模型而言,这是有效的,但是它达不到实时系统的速度要求,所以本文的其他部分重点关注我们这个更快速的模型。
     Fastest DPM有效的提高了DMP的速度并且没有牺牲过多的mAP,但是仍然会将实时性降低两倍。相比于神经网络的方法,他还受到DPM相对较低的目标检测准确率的影响。
     R-CNN minus R使用静态bbox的策略代替了选择性搜索。虽然相对于R-CNN 更快了,但是它仍然达不到实时检测的要求,并且因为没有很好的候选框,准确率得到了很大的影响。

表1:PASCAL VOC 2007上的实时系统。比较告诉检测器的性能和速度,Fast YOLO是PASCAL VOC的检测器中最快的检测器,并且检测精度也是其他算法的两倍。YOLO比FAST YOLO的mAP高了10%并且速度也比其余实时算法更快。
     Fast R-CNN加速了R-CNN的分类阶段,但是仍然依赖于选择性搜索策略,每张图片需要花费2s时间生成bbox。因此他的mAP指标非常的高但是速度只有0.5fps,达不到实时监测。
     最近的Faster R-CNN使用了一个神经网络而不是选择性搜索的策略去产生bbox,比如Szegedy 等人。在我们的测试过程中,他们最准确的模型速度达到了7的fps,而较小的、不太准确的模型速度可以达到18的fps。VGG-16 版本的Faster R-CNN 比YOLO在mAP指标上高10%,但是速度YOLO慢6倍。而ZeilerFergus Faster R-CNN只比YOLO慢2.5倍,但是精度不如YOLO。

4.2. VOC 2007 误差分析

为了进一步研究YOLO和其他先进检测器的差异,我们详细分析了VOC2007上的检测结果。我们比较了YOLO和Fast RCNN ,因为Fast RCNN 是PASCAL 上性能最好的检测器之一,并且他的检测是公开的。
     我们使用Hoiem 的方法和工具。对于测试时的每个类别,我们观察其topN的预测结果。每个预测结果或是正确的或者根据错误类型进行分类:
• 正确: 类别正确并且IOU>0.5
• 定位: 类别正确 并且0.1 < IOU < 0.5
• 相似: 类别相近,并且 IOU >0 .1
• 其他: 类别错误, 并且IOU > 0.1
• 背景: 所有对象IOU < 0.1

图片4:错误分析:Fast R-CNN vs. YOLO。这些图表展现了在不同类别中的topN检测结果的定位错误和背景错误的比例。
图片4展现了20个类中每种错误类型的细分。
     YOLO在正确定位对象方面表现相对较差。定位错误比其他所有类别错误之和还要多。Fast R-CNN产生更少的定位误差,但是会产生更多的背景误判误差。13.6%的最好检测结果将没有包含物体的背景误判为包含物体。Fast R-CNN对背景的误判会比YOLO严重三倍。

4.3. 将 Fast R-CNN 和 YOLO进行结合

YOLO相比于 R-CNN没那么容易犯背景误判的错误。使用YOLO减小 R-CNN中的背景误判错误,Fast R-CNN的性能得到了重大的提升。对于Fast R-CNN 预测的所有bbox,我们检查YOLO时候预测出的相似的bbox。如果是的话,我们基于YOLO的预测概率和两个框之间的重叠来提高该预测得分。最好的Fast R-CNN 模型在VOC 2007测试集上达到了71.8的mAP值。当我们将他和YOLO结合之后,他的mAP值提高了3.2%到达了75%。我们也尝试将最好的Fast R-CNN 模型与其他版本的Fast R-CNN 结合,但是他们的提升的mAP非常的小,大概是0.3-0.6%之间。详情见表2。

     表2:在VOC2007上的模型结合实验。我们研究了各种模型与 Fast R-CNN.结合的效果。其他模型对于Fast R-CNN的性能增长非常有限,但是与YOLO结合显著提高了性能。
     YOLO带来的性能提升不是简单的模型集成的产物,因为集成不同版本的Fast R-CNN对于性能的提升非常有限。相反,因为YOLO在测试的时候犯的各种错误,所以能够有效的提高Fast R-CNN的性能。
     不幸的是,这个结合并没有从YOLO的速度上获益,因为我们单独地运行每一个模型并且结合了这些结果。然而,因为YOLO非常的快,以至于结合YOLO之后不会增加多少计算时间。

表格3:PASCAL VOC 2012排行榜。截至2015年11月6日,YOLO与完整的comp4 公共排行榜相比,针对大量检测方法的平均精度和每个类别的平均精度,YOLO是唯一的实时检测方法。Fast R-CNN + YOLO是第四的检测方法,相比于Fast R-CNN提高了2.3%

4.4. VOC 2012 的测试结果

在 VOC 2012测试集上,YOLO的mAP得分为57.9%。这个得分低于最优秀的模型但是接近使用GG-16的 原始R-CNN 模型。但是接近的竞争对手们相比,YOLO对于小目标的检测性能就没那么有效了。在水杯、绵羊、点实等类别上YOLO的检测效果会比 R-CNN 或者Feature Edit低上8-10%。然而,在猫或者火车这些类别上YOLO的表现会更加良好。
     Fast R-CNN + YOLO的混合模型是性能最好的目标检测模型。在融合了YOLO之后Fast R-CNN提高了2.3%,在公开的榜单上提高了5个名次。

4.5. 泛化能力: 艺术作品中的人物检测

用于目标检测的文学数据集是从同一个分布中提取训练和测试数据。在实际应用中,它很难去预测所有可能的用例,并且测试数据和之前使用的数据不同。我们在Picasso和People-Art这两个用于艺术作品目标检测的数据集中比较了YOLO与其他检测算法。

图片5:Picasso 和People-Art 数据集上的通用结果
     图片5展示了YOLO和其他算法的性能比较结果。作为参考,我们只提供VOC2007上训练的人员检测的AP。Picasso 模型在VOC2012上训练并且而People-Art 在VOC2010上训练。

R-CNN 在VOC2007上有比较高的AP,而当应用于艺术作品的时候R-CNN的性能急剧下降。R-CNN 使用选择性搜索作为获得自然数据集上的bbox。R-CNN 中的分类器分类步骤只能看到小区域,所以需要很好的建议bbox。
     当应用于文学数据集的时候DMP|能够维持他的AP值。之前的工作认为DMP表现良好因为他具有物体的形状和布局的空间模型
     YOLO在VOC2007上表现良好并且当应用与文学领域时AP得分下降远低于其他模型。和DMP一样YOLO对于物体的大小、尺寸以及物体之间的关系还有物体通常出现的位置进行建模。文学作品和自然图像在像素级别上非常不同,但是他们在物体的大小和尺寸上很相似。因为YOLO能够预测相对较好的bbox。

5. 真实场景的实时检测

YOLO是一个又快又准确得到目标检测器,非常适用于计算机视觉的应用。我们将YOLO连接摄像头并且验证实时表现,包括实时抓取来自摄像头的图像并且展示检测效果。生成的系统是交互式并且迷人的。虽然YOLO单独的处理图像,但是当他和摄像头联系起来之后他表现得像一个追踪系统,在物体移动或者变化的时候实时检测物体。

图片6:定性结果。YOLO在检测线上的艺术品图片和自然图片的表现。虽然它将一个人识别成飞机但是准确性还是很高的。

6. 结论

我们介绍了一款统一的物体检测系统YOLO。我们的模型结构很简单,可以在整个图像上进行训练。与基于分类器的方法不同,YOLO针对与检测性能直接相关的损失函数来训练,而且整个模型是联合训练的。
     Fast YOLO是目前文献中最快的通用物体检测系统,YOLO引领目前最先进的实时物体检测技术。YOLO还可以很好的迁移到新的领域,这使它成为需要快速高效的物体检测系统的应用的理想选择。

【论文学习】YOLO v1相关推荐

  1. 论文(1) YOLO v1

    YOLO v1 @(目标检测) 论文地址:https://arxiv.org/abs/1506.02640 网络结构 Yolo网络由24个卷积层和2层全连接层构成,其中,卷积层用来提取图像特征,全连接 ...

  2. YOLO v1详细解读

    <You Only Look Once: Unifified, Real-Time Object Detection> Joseph Redmon∗* , Santosh Divvala∗ ...

  3. PyTorch 实现经典模型7:YOLO (v1, v2, v3, v4)

    YOLO (v1, v2, v3, v4) 网络结构 YOLO v3 网络结构 代码 Ref <机器爱学习>YOLO v1深入理解 <机器爱学习>YOLOv2 / YOLO90 ...

  4. [paper reading] YOLO v1

    [paper reading] YOLO v1 GitHub:Notes of Classic Detection Papers 本来想放到GitHub的,结果GitHub不支持公式. 没办法只能放到 ...

  5. 【YOLO系列】YOLO V1 论文精读与学习总结

    目录 0. 前言 1.YOLO V1 大体思路 2. YOLO V1的训练过程 2.1 YOLO V1网络结构 2.2 具体训练过程 2.2.1 把主干结构在ImageNet上进行预训练 2.2.2 ...

  6. 【深度学习】:详解目标检测YOLO V1(You Only Look Once)算法

    YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法.Yolo系列算法属于One-Stage算法,是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速 ...

  7. YOLO V1 论文精讲

    参考:https://www.bilibili.com/video/BV15w411Z7LG/?is_story_h5=false&p=4&share_from=ugc&sha ...

  8. yolo v1论文翻译-整理

    论文原文:https://arxiv.org/pdf/1506.02640.pdf Tensorflow版本yolo v1:GitHub - gliese581gg/YOLO_tensorflow: ...

  9. YOLO V1 实时的目标检测 论文翻译

    YOLO V1 实时的目标检测 论文翻译 注:学习记录用 摘要 我们提出了一种新的目标检测方法 YOLO.先前关于目标检测的工作重新使用分类器来执行检测. 相反,我们将目标检测框架作为一个回归问题,以 ...

  10. YOLO v1论文详解

    YOLO v1:一体化的,实时物体检测 声明:笔者翻译论文仅为学习研究,如有侵权请联系作者删除博文,谢谢! 源论文地址:https://arxiv.org/pdf/1506.02640.pdf 注:文 ...

最新文章

  1. Linux 下的NFS server 架设基础及方法
  2. 020_html格式化
  3. 英国政府开源了其大规模监控软件
  4. python中raw_input未定义_python之NameError: name 'raw_input' is not defined
  5. Java基础篇:Iterator迭代器
  6. 大数据使用及现状调研报告
  7. 自动检测技术学习心得体会_国培计划(2020)—学校管理团队信息化领导力提升培训心得体会...
  8. 常用的HTTP状态码
  9. php.ini icuuc54.dll,icuuc54.dll下载|
  10. OPENGL 点击与选取的基础---坐标变换
  11. Selenium中的xpath定位
  12. Linux中vi/vim编辑器的常用命令
  13. 互联网大佬的枕边美女
  14. python函数之间变量的调用
  15. 乐高大颗粒作品23:磁悬浮列车
  16. 上升时间测量与示波器带宽
  17. ★另人无比怀念的90年代动画片★ ‖最终整理篇‖
  18. oracle外部表kup-04023,kup-04040访问外部表时
  19. byte[]与String互转对象和JSON相互转
  20. Science重磅 | 新技术Slide-seq能以高空间分辨率测量全基因组的表达情况

热门文章

  1. 近三年,为什么互联网从业者加班严重,但薪资还跌宕起伏?
  2. 用Python将多个Excel的sheet分别合并到一个Excel的不同sheet
  3. AV多媒体管理控制中心,AV媒体矩阵
  4. 最新阿里、腾讯、华为、字节等大厂的薪资和职级对比,看看你差了多少...
  5. 简图记录-《乌合之众》阅读总结
  6. Linux kill 强制关闭 进程
  7. Python学习之requests接口测试
  8. SpringBoot+MyBatis包含MyBatis Plus实现数据的增删改查(详细过程,适合新手小白)
  9. 省市县三级联动(带拼音、首字母、经纬度坐标)
  10. 怎么把xml文件到url post方法 android,如何在android中使用http post发送xml文件。我在哪里把xml文件放在代码中...