🚀 在此之前主要介绍了
YOLO v5
源码的安装和使用(YOLO v5安装教程),接下来将探索YOLO
的实现原理,作为一个金典的单阶段目标检测算法,应该深度的理解它的构建思想;所以本系列文章将从LOVO v1
出发到LOVO v9
进行深度理解,包括代码以及论文。
1)前导知识
1.1 单阶段和两阶段
也许我们耳熟能详的是yolo系列它是一个单阶段(one stage)的目标检测,那何为单阶段呢?
example:
one-stage:
对于单阶段来说,就是将图片扔入神经网络中,神经网络只干一件事,就是得到目标物体的坐标,即将其转化位一个回归问题。无预选阶段,精度较低,速度快!
原文摘要中的一句话:we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabilities. 即转化为回归问题直接预测框的坐标和类别的概率。
two stage:
对于两阶段的目标检测算法来说,其就是干两件事;第一件事:先通过网络得到一定比率最佳的(即候选框 proposal
),最后再通过网络选择出来一个最后的候选框。有了预选,精度上会比较高。
1.2 评价指标:MAP 和 IOU
MAP
MAP
就是用于综合衡量检测算法效果的一个指标。它具体如何计算等会再说,这里只需要理解MAP
是衡量检测算法效果的。
精度(precision): 就是检测的精准度,重点在于精准度;所表达的意思像这句话:一抓一个准;即抓住的都是准确的!就是精度高。
召回率(racall): 就是检测比率,重点在于能否全检测出来;所表达的意思像这句话:宁可错杀一千,不可放过一个;即就是想全抓住,不想漏掉一个。
是否可以只使用精度或者召回率来评价模型呢?
显然是不行的: 若只使用精度来评价模型,精度是说,只管抓的准不准,若有1000个目标,只抓了2个,俩个都抓对了,精度分常高,一抓一个准,可是还有998个都没有被抓住,显然模型是不太行,但是使用精度来评价该模型的话得出来的结论却是该模型是很好的,精度非常的高。
若只使用来评价模型,召回率是说,只管能不能全抓住,若有2个目标,却抓了1000个,俩个都抓到了,召回率分常高,都全部抓住了,可以还有998个都抓错了,显然模型不太行,但是使用召回率来评价该模型的话得出来的结论却是该模型是很好的,召回率非常的高。
所以,单是使用精度或则召回率来评价模型是不行的,一个指标高,另外一个指标就会低,所以就需要一个综合的评价指标,既要评价精度,又要评价召回率,即使用MAP
来评价。
通过绘制PR图
来评价,图中的每一个点都代表在该点处的精度和召回率,而所谓的MAP
值就是PR图
中线所围成的面积,显然MAP越接近于1的,模型的综合能力就会越强。
IOU
如下图所示,其中蓝色框为真实值,即标签值(即 label 值);其中黄色框为模型的预测值(prediction )。IOU的值就是重合区域(Area of Overlap)的值比上二者区域的总和(Area of Union)面积;显然对于IOU来说,比值越接近于1的话就会越好。
2)YOLO v1
2.1 精读 YOLO v1 论文部分
摘要(Abstract)
我们提出了一种新的目标检测方法YOLO。
先前的目标检测工作重新使用分类器来执行检测。相反,我们将目标检测看成回归问题,从空间上定位边界框和预测相关别的概率。使用单个神经网络在一次评估中直接从完整图像中预测边界框和类别概率。由于整个检测管道是一个单一的网络,因此可以直接对检测性能进行端到端的优化。
我们的统一架构非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。一个更小版本的网络Fast -YOLO,每秒处理惊人的155帧,同时仍然达到其他实时探测器的两倍mAP。与最先进的检测系统相比,YOLO虽然有更多的定位错误,但几乎不会将背景预测为目标。最后,YOLO可以学习到泛化性很强的目标特征。当从自然图像推广到其他领域(如艺术品)时,会优于其他检测方法,包括DPM和R-CNN在内的其他检测方法。
①:YOLO将目标检测看成回归问题,直接从完整图像中预测边界框和类别概率,是单阶段的。 ②是端到端的目标检测算法,速度快,但精度较低。③YOLO可以学习到泛化性很强的目标特征。
在摘要部分总结为三句话
一、介绍(Introduction)
人类瞥一眼图像,立即知道图像中有什么物体,它们在哪里,以及它们是如何相互作用的。人类的视觉系统快速而准确,使我们能够在无意识的情况下完成复杂的任务,比如开车。快速、准确的目标检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传递实时场景信息,并释放通用、响应式机器人系统的潜力。
当前的目标检测系统通过重用分类器来执行检测。为了检测一个对象,这些系统为该对象设置一个分类器,并在测试图像的不同位置和尺度上对其进行评估。像deformable parts models ( 可变形部件模型(DPM) ) 等系统使用滑动窗口方法,其中分类器在整个图像上均匀间隔的位置运行[10]。
最近的一些方法,如R-CNN使用区域候选方法(region proposal),首先在图像中生成可能的边界框(bounding box),然后在这些可能的框上运行分类器。分类后进行后处理,对边界框进行细化,消除重复检测,并根据场景中的其他物体对边界框进行重新定位[13]。这些复杂的管道运行缓慢且难以优化,因为每个单独的组件必须单独训练。
我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,You Only Look Once (YOLO)
图像,就可预测得到什么物体存在和他们在哪里。
YOLO非常简单:参见图1。单个卷积网络同时预测多个边界框和这些框的类概率。YOLO在完整图像上进行训练,并直接优化检测性能。与传统的目标检测方法相比,这种统一的模型有几个优点。
- 1、调整输入图像为448×448,分割得到7×7的网格
- 2、通过CNN提取特征并预测
- 3、使用非极大值抑制(NMS)进行筛选
第一,YOLO非常快。因为我们把检测作为一个回归问题,我们不需要复杂的管道。在测试时只需要在新图像上运行神经网络来预测。在Titan X GPU上没有批处理,我们的基本网络以每秒45帧的速度运行,快速版本的运行速度超过150 fps。这意味着我们可以实时处理流媒体视频,延迟不到25毫秒。此外,YOLO的平均精度是其他实时系统的两倍以上。有关我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/.
第二,YOLO在进行预测时对图像进行全局推理。与滑动窗口和基于区域提议的技术不同,YOLO在训练和测试期间看整个图像,因此它隐式地编码有关类及其外观的上下文信息。Fast R-CNN是一种很好的检测方法[14],由于无法看到更大的背景,它会将图像中的背景斑块误认为是物体。与Fast R-CNN相比,YOLO的背景误检数量少了一半。
第三,YOLO能学习到目标的泛化表征。当在自然图像上进行训练并在艺术品上进行测试时,YOLO的性能远远超过DPM和R-CNN等顶级检测方法。由于YOLO具有高度的通用性,因此在应用于新领域或意外输入时不太可能出现故障。
YOLO在精度上仍然落后于最先进的检测系统。虽然它可以快速识别图像中的物体,但很难精确定位某些物体,尤其是小物体。我们在实验中进一步考察精度和时间的权衡。我们所有的训练和测试代码都是开源的。各种预训练的模型也可以下载。
①:之前的研究使用分类器来执行检测,采用滑动窗口的方法,让分类器在整个图像上均匀间隔的位置运行。 ②最近方法——R-CNN使用区域候选,在候选区域运行分类器。 ③而YOLO使用单个卷积网络同时预测多个边界框和这些框中类概率,速度快,同时YOLO训练和测试都是全局推理,可以学习到目标的泛化特征,但精度较低。
在介绍部分总结为三句话
二、统一检测(Unified Detection)
我们将目标检测的独立部分(the separate components )统一到一个单一的神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测图像的所有类的所有边界框。这意味着我们的网络对整个图像和图像中的所有对象进行全局推理(reason globally)。YOLO设计实现端到端训练和实时速度,同时保持高平均精度。
我们的系统将输入图像分成S × S网格。如果一个物体的中心落在一个网格单元(grid cell)中,这个网格单元就负责检测这个物体。
每个网格单元预测B个边界框和这些框的置信度得分。这些置信度分数反映了模型对框内有一个物体的置信度,以及它认为盒子里有一个物体的预测有多准确。形式上,我们将置信度定义为 P r ( O b j e c t ) ∗ I O U p r e d t r u t h Pr(Object) * IOU^{truth}_ {pred} Pr(Object)∗IOUpredtruth。如果该单元格中不存在对象(即Predection(Object) = 0),则置信度分数应为零。否则(即Predection(Object) = 1),我们希望置信度分数等于预测框(predict box)与真实值(ground truth)之间的交集。
每个边界框由5个预测组成:x, y, w, h和置信度。(x,y)坐标表示相对于网格单元边界的框的中心。宽度和高度是相对于整个图像预测的。最后,置信度预测表示预测框与任何真实框之间的IOU。
每个网格单元还预测C个条件类概率 P r ( C l a s s i ∣ O b j e c t ) Pr(Class_i | Object) Pr(Classi∣Object)。这些概率以包含目标的网格单元为条件,去预测每个网格单元属于哪一组分类的概率,而不考虑框B的数量。
在测试时,我们将条件类概率和单个盒子置信度预测相乘,
P
r
(
C
l
a
s
s
i
∣
O
b
j
e
c
t
)
∗
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
=
P
r
(
C
l
a
s
s
i
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
(
1
)
Pr(Class_i | Object)∗Pr(Object)∗IOU^{truth}_{pred} = Pr(Class_i)∗IOU^{truth}_{pred}(1)
Pr(Classi∣Object)∗Pr(Object)∗IOUpredtruth=Pr(Classi)∗IOUpredtruth(1),它给出了每个box
特定于类的置信度分数。这些分数编码了该类别出现在框中的概率以及预测框与该对象的匹配程度。 ( 解释:
P
r
(
C
l
a
s
s
i
∣
O
b
j
e
c
t
)
∗
P
r
(
O
b
j
e
c
t
)
Pr(Class_i | Object)∗Pr(Object)
Pr(Classi∣Object)∗Pr(Object)是类条件概率;
P
r
(
O
b
j
e
c
t
)
∗
I
O
U
p
r
e
d
t
r
u
t
h
Pr(Object)∗IOU^{truth}_{pred}
Pr(Object)∗IOUpredtruth是置信度;
P
r
(
C
l
a
s
s
i
)
Pr(Classi)
Pr(Classi)表示是某类别的概率 。根据条件概率公式可得某类别得概率为
P
r
(
C
l
a
s
s
i
∣
O
b
j
e
c
t
)
∗
P
r
(
O
b
j
e
c
t
)
Pr(Class_i | Object)∗Pr(Object)
Pr(Classi∣Object)∗Pr(Object)=
P
r
(
C
l
a
s
s
i
)
Pr(Class_i )
Pr(Classi) )
该模型。我们的系统将检测建模为回归问题。它将图像划分为S × S网格,并为每个网格单元预测B个边界框、这些框的置信度和C类概率。这些预测被编码为S × S × (B * 5 + C)张量。
为了评估YOLO在PASCAL VOC上的表现,我们使用S = 7(图片被分成7×7的网格,即49个grid
), B = 2(一个 grid 预测两个 bounding box
)。PASCAL VOC有20个标签类,所以C = 20(每个bounding box分别得到置信度)。我们最终的预测是一个7 × 7 × ( 2*5 + 20 ) = 7 × 7 × 30
张量。
①:将图片分成 S×S的网格,即得到S×S个网格,在每个网格中设定的B个区域内进行预测。(假设B为2,即每个网格有两个设定好的框着的区域) ②同时预测每个框着的区域是物体的概率,以及相对于设定好的框的一个偏移量(即微调框),即预测(x,y,w,h,置信度)。这时候选择置信度较高的框根据预测的x,y,w,h值进行微调框,这时候已经可以将物体给框出来了。 ③为了得到框出来的物体的类别,所以还需要同时预测条件概率Pr(Class_i | Object),由于预测(x,y,w,h,置信度)和框出来的物体的类别是同时进行的,所以有C种类别,那个格子就得有20个条件概率值,即该点处是物体的条件下是某类别的概率。 ④通过2选出来物体,通过3判断出来了物体的类别。
在统一检测开头部分总结为四句话
2.1网络设计(Network Design)
我们将该模型实现为卷积神经网络,并在PASCAL VOC检测数据集上对其进行评估[9]。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。
我们的网络架构受到GoogLeNet图像分类模型的启发[34]。我们的网络有24个卷积层,后面是2个完全连接的层。
我们没有使用GoogLeNet使用的初始模块,而是简单地使用1 × 1约简层,然后是3 × 3卷积层,类似于Lin等人[22]。完整的网络如图3所示。
图3:结构。我们的检测网络有24个卷积层,后面是2个全连接层。交替的1 × 1卷积层减少了前一层的特征空间。我们在ImageNet分类任务上以一半的分辨率(224 × 224输入图像)预训练卷积层,然后将分辨率提高一倍用于检测。
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的界限。快速YOLO使用了一个卷积层更少的神经网络(9层而不是24层),这些层中的过滤器更少。除了网络的大小,YOLO和Fast YOLO的所有训练和测试参数都是相同的。
我们网络的最终输出是7 × 7 × 30的预测张量。
网络设计部分 ①:YOLO网络结构借鉴GoogLeNet,由24个卷积层和2个全连接层组成,24个卷积层提取特征,2个全连接层预测得到((x,y,w,h,c)× bounding box的数量,20个类别的条件概率)
②:进一步理解网络的每一步
- 输入图像是448×448经过24次卷积操作后得到了7×7×1024的特征图
- 7×7×1024的特征图经过两个全连接层得到7×7×30的向量;如何理解7×7×30的向量的作用呢?7×7的原因是,最开始就将图片分成7×7的网格,每个网格(grid)有两个(B=2)bounding box,因为要对所有bounding box选中的东西进行预测其是否有物体,即置信度;以及对于bounding box的修正(x,y,w,h);还有每种类别的条件概率(类别是20);所以一个网格要预测30个参数,有7×7个网格,所以最后得到的张量是7×7×30。
2.2 训练 (training)
我们在ImageNet的1000类竞争数据集上预训练卷积层[30]。对于预训练,我们使用图3中的前20个卷积层,然后是平均池化层和完全连接层。我们对该网络进行了大约一周的训练,并在ImageNet 2012验证集上实现了单个作物前5名的准确率达到88%,与Caffe的Model Zoo中的GoogLeNet模型相当[24]。我们使用Darknet框架进行所有训练和推理[26]。
然后我们将模型转换来执行检测。Ren等人表明,在预训练网络中同时添加卷积层和连接层可以提高性能[29]。按照他们的例子,我们添加了四个卷积层和两个随机初始化权重的完全连接层。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224 × 224提高到448 × 448。
最后一层预测类概率和边界框坐标。我们通过图像的宽度和高度对边界框的宽度和高度进行标准化,使它们落在0和1之间。我们将边界框的x和y坐标参数化为特定网格单元格位置的偏移量,因此它们也被限定在0和1之间。
我们对最后一层使用线性激活函数,所有其他层使用Leaky-ReLU
我们对模型输出的平方和误差(sum-squared error) 进行优化。我们使用和平方误差,因为它很容易优化,但它并不完全符合我们最大化平均精度(average precision)的目标。它将定位误差与分类误差等同地加权,这可能不是理想的。此外,在每张图像中,许多网格单元不包含任何对象。这使得这些单元格的“置信度”得分趋近于零,通常压制了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练在早期就发散(diverge)。为了解决这个问题,我们增加了边界框坐标预测的损失,减少了不包含对象的框的置信度预测的损失。我们使用两个参数, λ c o o r d λ_coord λcoord和 λ n o o b j λ_noobj λnoobj来实现这一点。设 λ c o o r d λ_coord λcoord = 5, λ n o o b j λ_noobj λnoobj=0.5。
也是让损失更加关注物体部分
平方和误差在大框和小框中的权重也相等。我们的误差指标(error metric)应该反映出,大框里的小偏差重要性不如小框的小偏差重要性。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。
让小框得到的高和宽更加
YOLO为每个网格单元格预测多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。若哪个预测具有最高的当前IOU值,就指定一个预测器“负责”预测一个对象。这导致了边界框预测器之间的专业化。每个预测器在预测特定尺寸、长宽比或物体类别方面都做得更好,从而提高了整体召回率(recall)。
在训练过程中,我们优化了以下多部分损失函数:
请注意,如果目标存在于该网络的网络单元中(前面讨论的条件类别概率),则损失函数只惩罚分类错误。如果该预测器是“负责”地面真值框(即在该网格单元中具有最高的IOU的任何预测器),它也只惩罚边界框坐标错误,
我们在PASCAL VOC 2007年和2012年的训练和验证数据集上训练了大约135个epoch的网络。因为我们仅在Pascal VOC 2012上进行测试,所以我们在训练集里包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用batch=64,momentum=0:9,decay=0.0005
。
我们的学习率(learning rate)计划如下:对于第一个epoch,我们缓慢地将学习率从 1 0 − 3 10^{−3} 10−3提高到 1 0 − 2 10^{−2} 10−2。如果我们从一个高学习率开始,我们的模型经常由于不稳定的梯度而偏离。我们继续用 1 0 − 2 10^{−2} 10−2训练75个epoch,然后用 1 0 − 3 10^{−3} 10−3训练30个epoch,最后用 1 0 − 4 10^{−4} 10−4训练30个epoch。
为了避免过拟合,我们使用dropout和广泛的数据增强。在第一个连接层之后设置速率为0.5的dropout层,可以防止层与层之间的共适应[18]。对于数据增强,我们引入了原始图像大小的20%的随机缩放和平移。我们还在HSV色彩空间中随机调整图像的曝光和饱和度,最高可达1:5。
网络训练部分 ①:在这一部分最主要的就是得了解YOLO它的损失函数是怎么设计,以及这么设计的理由;YOLO的损失函数主体分为四个部分,由位置误差、置信度误差(含物体)、置信度误差(不含物体)、分类误差。
②:位置误差
- i = 0 i=0 i=0 到 S 2 S^2 S2是有 S 2 S^2 S2个网格; j = 0 j=0 j=0 到 B 是每个网格有B个框;而 1 i j o b j 1^{obj}_{ij} 1ijobj 是表示被选择的第 i i i 个网格和第 j j j 个框。因为并不是求所有的,只有被选择(通过
IOU
,即真实值和设定好的框计算得到的IOU
值)留下的框才会被加入计算损失,然后根据损失微调被留下的框的位置误差。- 位置误差是(x,y,w,h)的误差;对于x和y的误差来说,是框中心点的定位误差;w和h是框的高度和宽度误差;为什么x,y,w,h都是使用平方和误差来表示,而w和h却要加个根号呢?看下图所示;对于小的框而言,w和h的误差稍微大点的话是没事的,但是对于小框来说,w和h的误差稍微大一点点就会有更大的误差,所以小框的w和h应该作的更加精确一点,即w,h值很小的时候应该让w,h的值更准确;那如何让较小w,h的值更准确且同时可以容忍较大的w,h稍微有点误差?
- 为了实现严格对待小框的w,h的损失,宽松对待大框的w,h的损失这一目标,从而引进了根号,具体分析一下,为什么加了根号就能达到这个效果。通过根号的映射就可将相同的误差根据大小框分别映射,使其更能容忍大框的误差。
② 置信度误差(含物体)
- 即选出来的框在进行微调的时候要让置信度与真实IOU越接近越好。
③:置信度误差(不含物体)
- 即让不含物体的框置信度越接近零。
- 在前面还乘了一个 λ n o o b j λ_{noobj} λnoobj,在论文中提到,将 λ n o o b j λ_{noobj} λnoobj设置为0.5,同时 λ c o o r d λ_{coord} λcoord设置为5,就是因为想让损失函数更加关注物体的损失,减小对于图片背景的损失。
④:分类误差
- i = 0 i=0 i=0 到 S 2 S^2 S2是有 S 2 S^2 S2个网格,真实的每一个格子出现的某种类别的概率与预测得到的概率越接近越好。
2.4 推论(Inference)
就像在训练中一样,预测测试图像的检测只需要一次网络评估。在PASCAL VOC上,网络预测每张图像的98个边界框和每个框的类概率。YOLO在测试时非常快,因为它只需要一次网络评估,不像基于分类器的方法。
网格设计在边界框预测中加强了空间多样性。通常情况下,一个对象落在哪个网格单元是很清楚的,网络只预测每个对象的一个框。然而,一些较大的物体或靠近多个单元边界的物体可以被多个单元很好地定位。非最大抑制可以用来固定这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制在mAP中增加了2-3%。
推论部分 ①:YOLO只用一次网络,速度快。
②:对于多个单元边界的物体使用非最大抑制,但用了非极大值一直。其mAP仅仅增加2-3%。
2.5 YOLO的局限性(Limitations of YOLO)
YOLO 对边界框预测施加了很强的空间约束,因为每个网格单元只能预测两个框,并且只能有一个类。这个空间约束限制了我们的模型可以预测的附近物体的数量。我们的模型难以处理成群出现的小物体,比如鸟群。
由于我们的模型学习从数据中预测边界框,它很难泛化到新的或不寻常的长宽比或配置的对象。我们的模型还使用相对粗糙的特征来预测边界框,因为我们的架构在输入图像中有多个下采样层(downsampling layers)。
最后,我们的训练基于一个逼近检测性能的损失函数,这个损失函数无差别地处理小边界框与大边界框的误差。大边界框的小误差通常是无关要紧的,但小边界框的小误差对IOU的影响要大得多。我们的主要错误来自于不正确的定位。
YOLO的局限性 ①:对于小目标的检测效果较差,因为在第一代yolo中,通过24层的卷积操作提取到的特征感受野已经很大了,很难感知局部信息,所以对于小目标的检测效果较差。
②:每一个网格只能预测一个物体,多目标检测不行。
三、与其他检测系统比较(Comparison to Other Detection Systems)
目标检测是计算机视觉中的一个核心问题。检测流程通常是首先从输入图像中提取一组鲁棒特征 (Haar [25], SIFT [23], HOG[4],卷积特征[6] )。然后,使用分类器[36,21,13,10]或定位器[1,32]来识别特征空间中的对象。这些分类器或定位器要么以滑动窗口的方式在整个图像上运行,要么在图像中的某些区域子集上运行[35,15,39]。我们将YOLO检测系统与几个顶级检测框架进行了比较,突出了关键的相似性和差异性。
可变形零件模型(Deformable parts models)。可变形部件模型(DPM)使用滑动窗口方法进行对象检测[10]。DPM使用一个不相交的流程来提取静态特征,对区域进行分类,预测高分区域的边界框等。我们的系统用一个卷积神经网络取代了所有这些不同的部分。网络同时执行特征提取、边界盒预测、非最大值抑制和上下文推理。网络的特征feature是在在线(in-line)训练出来的而不是静态,因此可以根据特定的检测任务进行优化。我们的统一架构带来了比DPM更快、更准确的模型。
R-CNN。 R-CNN及其变体使用区域候选而不是滑动窗口来查找图像中的对象。SelectiveSearch[35]生成潜在的边界框,卷积网络提取特征,支持向量机对边界框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂的流水线的每个阶段都必须精确地独立调整,结果系统非常慢,在测试时每张图像需要40多秒[14]。
YOLO与R-CNN有一些相似之处。 每个网格单元提出潜在的边界框,并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元候选框施加了空间约束,这有助于减少对同一目标的多次检测。我们的系统提出的边界框也少得多,每张图像只有98个,而选择性搜索大约有2000个。最后,我们的系统将这些单独的组件组合成一个单一的、共同优化的模型。
其他检测器。R-CNN专注于通过共享计算和使用神经网络提出区域而不是选择性搜索来加速R-CNN框架[14][28]。虽然它们在速度和准确性上都比R-CNN有所提高,但两者的实时性仍然不足。
许多研究的重点是加快DPM流程[31][38][5]。它们加速HOG计算,使用级联,并将计算推给gpu。然而,实际上只有30Hz DPM[31]是实时运行的。
YOLO不是试图优化大型检测流程的单个组件,而是完全抛弃了大型检测流程,并且通过设计来提高速度。
人脸或人等单一类别的检测器可以高度优化,因为它们只需要处理较少的多样性[37]。YOLO是一个通用的检测器,学习同时检测各种物体。
Deep MultiBox。与R-CNN不同,Szegedy等人训练卷积神经网络来预测感兴趣的区域[8],而不是使用选择性搜索。MultiBox还可以通过用单个类预测代替置信度预测来执行单个对象检测。然而,MultiBox不能进行一般的目标检测,仍然只是更大的检测流程中的一部分,需要进一步的图像补丁分类。 YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat。 Sermanet等人训练卷积神经网络进行定位,并调整该定位器进行检测[32]。OverFeat可以有效地进行滑动窗口检测,但仍然是一个不相交的系统。OverFeat优化的是定位,而不是检测性能。与DPM一样,本地化器在进行预测时只看到本地信息。OverFeat不能对全局环境进行推理,因此需要大量的后处理来产生连贯的检测。
**MultiGrasp。**我们的工作在设计上与Redmon等人的抓握检测工作相似[27]。我们对边界框预测的网格方法是基于MultiGrasp系统对抓点的回归。然而,抓握检测是一个比物体检测简单得多的任务。MultiGrasp只需要为包含一个对象的图像预测单个可抓取区域。它不需要估计物体的大小、位置或边界,也不需要预测物体的类别,只需要找到一个适合抓取的区域。YOLO预测图像中多个类别的多个对象的边界框和类别概率。
与其他检测系统比较 DPM
用传统的HOG特征方法,也用的是传统的支持向量机SVM分类器,然后人工造一个模板,再用滑动窗口方法不断的暴力搜索整个待识别图,去套那个模板。这个方法比较大的问题就是在于设计模板,计算量巨大,而且是个静态的,没办法匹配很多变化的东西,鲁棒性差。
R-CNN
第一阶段:每个图片使用选择性搜索SS方法提取2000个候选框。
第二阶段:将每个候选框送入CNN网络进行分类(使用的SVM)。
YOLO对比他们俩都很强,YOLO和R-CNN也有相似的地方,比如也是提取候选框,YOLO的候选框就是上面说过的那98个 bounding boxes,也是用到了NMS非极大值抑制,也用到了CNN提取特征。
Other Fast Detectors
Fast和Faster R-CNN :这俩模型都是基于R-CNN的改版,速度和精度都提升了很多,但是也没办法做到实时监测,也就是说FPS到不了30,作者在这里并没有谈准确度的问题,实际上YOLO的准确度在这里是不占优势的,甚至于比他们低。
Deep MultiBox
训练卷积神经网络来预测感兴趣区域,而不是使用选择性搜索。多盒也可以用单个类预测替换置信预测来执行单个目标检测。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat
OverFeat有效地执行滑动窗口检测,优化了定位,而不是检测性能。与DPM一样,定位器在进行预测时只看到本地信息。OverFeat不能推理全局环境。
MultiGrasp
YOLO在设计上与Redmon等人的抓取检测工作相似。边界盒预测的网格方法是基于多重抓取系统的回归到抓取。
这里的总结来自于与其他检测系统比较
四、实验(Experiments)
首先,我们将YOLO与其他基于PASCAL VOC 2007的实时检测系统进行了比较。为了理解YOLO和R-CNN变体之间的差异,我们探讨了YOLO和Fast R-CNN在VOC 2007上的错误,Fast R-CNN是R-CNN表现最好的版本之一[14]。基于不同的误差分布,我们表明YOLO可以用于快速R-CNN检测的重分,并减少背景假阳性的误差,从而显着提高性能。我们还介绍了VOC 2012的结果,并将mAP与当前最先进的方法进行了比较。最后,我们在两个艺术品数据集上证明了YOLO比其他检测器更好地泛化到新的领域
4.1 与其他实时系统的比较(Comparison to Other Real-Time Systems)
许多目标检测的研究工作都集中在使标准检测流程快速。[5][38][31][14][17][28]然而,只有Sadeghi等人真正生产出了实时运行(每秒30帧或更高)的检测系统[31]。我们将YOLO与其运行在30Hz或100Hz的DPM的GPU实现进行比较。
虽然其他努力没有达到实时里程碑,但我们也比较了它们的相对mAP和速度,以检查目标检测系统中可用的准确性和性能权衡。
Fast YOLO是PASCAL上最快的目标检测方法;据我们所知,它是现存最快的物体探测器。mAP为52:7%,比之前的实时检测精度提高了两倍多。普通版本YOLO将mAP推至63:4%,同时仍然保持实时性能。
我们还使用VGG-16训练YOLO。这个模型比普通版本更准确,但也比YOLO慢得多。这对于与其他依赖于VGG-16的检测系统进行比较是有用的,但由于它比实时慢,本文的其余部分将重点放在我们更快的模型上。
最快的DPM在不牺牲太多mAP的情况下有效地加快了DPM的速度,但它仍然失去了2倍的实时性能[38]。与神经网络方法相比,DPM的检测精度相对较低,这也限制了它的发展。
减去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准确。
与其他实时系统比较 YOLO精度高,Fast YOLO速度更快。
4.2 VOC 2007误差分析(VOC 2007 Error Analysis)
为了进一步研究YOLO和最先进的检测器之间的区别,我们将详细分析VOC 2007的结果。我们将YOLO与Fast RCNN进行比较,因为Fast R-CNN是PASCAL上性能最高的检测器之一,而且它的检测是公开可用的。
我们使用Hoiem等人[19]的方法和工具,对于测试时的每个类别,我们查看该类别的前N个预测。每个预测要么是正确的,要么根据错误的类型进行分类:
- 正确: 正确的类和 IOU > 0.5(正确分类并且预测框和真实框之间的IOU大于0.5的)
- 定位: 正确类,0.1 < IOU < 0.5(正确分类,但预测框与真实框的IOU在0.1和0.5,即虽然预测对了类别,但预测框的位置不是特别合理,不过可以接受。)
- 相似: 类相似,IOU > 0.1(预测成了相近的类别,预测框与真实框的IOU大于0.1。即预测的类别虽不正确但相近,预测框的位置还可以接受。)
- 其他: 类错误,IOU > 0.1(预测类别错误,预测框与真实框的IOU大于0.1。即预测的类别不正确,但预测框还还可以。)
- 背景: IOU < 0.1,对于任何对象(预测框与真实框的IOU小于0.1,即该预测框的位置为背景,没有目标。)
图4显示了在所有20个类中平均的每种错误类型的细分。
YOLO很难正确定位对象。定位错误在YOLO错误中所占的比重超过了所有其他来源的总和。快速R-CNN的定位错误要少得多,但背景错误要多得多。13.6%的最高检测结果是假阳性,不包含任何对象。快速R-CNN预测背景检测的错误几乎是YOLO的3倍。
YOLO的定位错误率高,而Fast-Rcnn的背景错误率较高
VOC 2007误差分析
4.3 Fast R-CNN和YOLO结合(Combining Fast R-CNN and 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.0%。我们还尝试将顶级的Fast R-CNN模型与其他几个版本的Fast R-CNN模型结合起来。这些组合在mAP中产生了0.3%到0.6%之间的小幅增长,详见表2。
YOLO的提升并不仅仅是模型整合的副产品,因为不同版本的Fast R-CNN组合在一起几乎没有什么好处。更确切地说,正是因为YOLO在测试时犯了不同类型的错误,它才如此有效地提高了Fast R-CNN的表现。
不幸的是,这种组合并没有从YOLO的速度中受益,因为我们分别运行每个模型,然后再组合结果。然而,由于YOLO是如此之快,与fast R-CNN相比,它不会增加任何显著的计算时间。
YOLO和Fast-Rcnn结合后,其准确率会提高,但是由于YOLO的快速并没有提高整体的结合起来的检测速度。
Fast R-CNN和YOLO结合
4.4 VOC 2012 结果(VOC 2012 Results)
在VOC 2012测试集中,YOLO的mAP得分为57.9%。
这比目前的技术水平要低,更接近于使用VGG-16的原始R-CNN,见表3。与最接近的竞争对手相比,我们的系统在处理小物体方面遇到了困难。在奶瓶、绵羊和电视/监视器等类别上,YOLO的得分比R-CNN或Feature Edit低8-10%。然而,在猫和训练等其他类别上,YOLO的表现更高。
我们的组合快速R-CNN + YOLO模型是性能最高的检测方法之一。Fast R-CNN与YOLO的结合提高了2.3%,在公共排行榜上上升了5个名次。
Fast R-CNN从与YOLO的组合在公共排行榜上提升了5个百分点。
VOC 2012 结果
4.5泛化性-图像中人物检测(Generalizability: Person Detection in Artwork)
用于目标检测的学术数据集从相同的分布中提取训练和测试数据。在现实世界的应用中,很难预测所有可能的用例,并且测试数据可能与系统之前看到的不同[3]。我们将YOLO与毕加索数据集[12]和人-艺术数据集[3]上的其他检测系统进行比较,这两个数据集用于测试艺术品上的人检测。
图5显示了YOLO和其他检测方法的性能对比。作为参考,我们给出了对人的VOC 2007检测AP,其中所有模型仅根据VOC 2007数据进行训练。在毕加索模型上,他们接受VOC 2012的培训,而在人物艺术上,他们接受VOC 2010的培训。
R-CNN 2007年VOC的AP含量很高。然而,当应用于艺术品时,R-CNN下降相当大。R-CNN使用选择性搜索来搜索针对自然图像进行调整的边界框建议。R-CNN的分类器步骤只看到小区域,需要好的建议。
当DPM应用于艺术作品时,它能很好地保持AP。
先前的工作理论认为,DPM之所以表现良好,是因为它具有很强的物体形状和布局的空间模型。
虽然DPM不像R-CNN那样退化,但它从较低的AP开始。
YOLO对VOC 2007有良好的性能,在处理艺术品时,其AP的降解率低于其他方法。
与DPM一样,YOLO建模对象的大小和形状,以及对象之间的关系和对象通常出现的位置。艺术品和自然图像在像素水平上非常不同,但它们在物体的大小和形状方面是相似的,因此YOLO仍然可以预测良好的边界框和检测。
YOLO 效果都不错。
泛化性-图像中人物检测
五、野外实时检测(Real-Time Detection In The Wild)
YOLO是一种快速,准确的目标检测器,使其成为计算机视觉应用的理想选择。我们将YOLO连接到一个网络摄像头,并验证它保持实时性能,包括从相机获取图像和显示检测结果的时间。
由此产生的系统具有互动性和吸引力。虽然YOLO可以单独处理图像,但当它连接到网络摄像头时,它就像一个跟踪系统,可以检测物体的移动和外观变化。系统的演示和源代码可以在我们的项目网站上找到: http://pjreddie.com/yolo/.
六、结论(Conclusion)
介绍了目标检测的统一模型YOLO。我们的模型构造简单,可以直接在完整的图像上进行训练。与基于分类器的方法不同,YOLO是在直接对应于检测性能的损失函数上进行训练的,并且整个模型是联合训练的。
快速YOLO是文献中最快的通用对象检测器,YOLO推动了最先进的实时对象检测。YOLO还可以很好地推广到新的领域,使其成为依赖于快速、健壮的对象检测的应用程序的理想选择。