YOLO_V1论文精读
YOLO_V1
本篇开始我们将学习YOLO系列目标检测算法。将从论文到代码复现,持续更新下去。希望大家看了我的文章之后会有帮助!并且在文章最后我会将写了笔记的论文链接放出来,方便大家阅读。
接下来我们精度论文,并且一起探讨YOLO是如何提出来的并且如何进行的优化,我们如何自己创造出一种新的神经网络模型呢?并且希望通过这种形式能培养大家阅读英文论文的能力,让我们一起来学习并探讨这些大佬的思路!
在此之前本人已经更新了R-CNN系列的网络模型笔记,不同于R-CNN的是YOLO是单阶段(one-stage)的目标检测算法.
论文地址:You Only Look Once
接下来我将罗列出论文中每个部分的知识点。本文中涉及的翻译均来源于【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
目录:
文章目录
摘要(Abstract)

翻译
我们提出的YOLO是一种新的目标检测方法。以前的目标检测方法通过重新利用分类器来执行检测。与先前的方案不同,我们将目标检测看作回归问题从空间上定位边界框(bounding box)并预测该框的类别概率。我们使用单个神经网络,在一次评估中直接从完整图像上预测边界框和类别概率。由于整个检测流程仅用一个网络,所以可以直接对检测性能进行端到端的优化。
我们的统一架构速度极快。我们的基本YOLO模型以45 fps(帧/秒)的速度实时处理图像。该网络的一个较小版本——Fast YOLO,以155 fps这样惊人的速度运行,同时仍然达到其他实时检测器的两倍。与最先进的(state-of-the-art,SOTA)检测系统相比,YOLO虽然产生了较多的定位误差,但它几乎不会发生把背景预测为目标这样的假阳性(False Positive)的错误。最后,YOLO能学习到泛化性很强的目标表征。当从自然图像学到的模型用于其它领域如艺术画作时,它的表现都优于包括DPM和R-CNN在内的其它检测方法。
主要知识点
RCNN系列
- 在R-CNN,SPPNET,FAST R-CNN中都是使用SS生成region proposal,然后对每个region proposal进行分类和回归计算量很大。
YOLO的简介
- 本文将检测变为一个
regression problem(回归问题),YOLO 从输入的图像,仅仅经过一个神经网络,直接得到一些bounding box以及每个bounding box所属类别的概率。
优点:
- 十分快速,可以实时处理图像
- 端到端(只需输入图像通过YOLO后即可得到预测框,类别,类概率)
- 泛化性强
因为整个的检测过程仅仅有一个网络,所以它可以直接进行端到端(end-to-end)的优化。
端到端(end-to-end): 在目标检测领域,端到端指的是:
能否直接从输入的图像数据获得最终的检测结果,而 不需要人为的特征选择或其他手动设计的功能。这类模型的训练和推理过程更加直接和高效。
1. 前言(Introduction)

翻译:人们只需瞄一眼图像,立即知道图像中的物体是什么,它们在哪里以及它们如何相互作用。人类的视觉系统是快速和准确的,使得我们在无意中就能够执行复杂的任务,如驾驶。快速且准确的目标检测算法可以让计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时的场景信息,并解锁通用、响应性的机器人系统的潜能。
目前的检测系统通过重用分类器来执行检测。为了检测目标,这些系统为该目标提供一个分类器,在测试图像的不同的位置和不同的尺度上对其进行评估。像deformable parts models(DPM,可变形部分模型)这样的系统使用滑动窗口方法,其分类器在整个图像上均匀间隔的位置上运行[10]。
最近的方法,如R-CNN使用region proposal(区域候选)策略,首先在图像中生成潜在的边界框(bounding box),然后在这些框上运行分类器。在分类之后,执行用于细化边界框的后处理,消除重复的检测,并根据场景中的其它目标为边界框重新打分[13]。这些复杂的流程是很慢,很难优化的,因为每个独立的部分都必须单独进行训练。
我们将目标检测看作是一个单一的回归问题,直接从图像像素得到边界框坐标和类别概率。使用我们的系统——You Only Look Once(YOLO),便能得到图像上的物体是什么和物体的具体位置。
YOLO非常简单(见图1),它仅用单个卷积网络就能同时预测多个边界框和它们的类别概率。YOLO在整个图像上训练,并能直接优化检测性能。与传统的目标检测方法相比,这种统一的模型下面所列的一些优点
第一,YOLO速度非常快。由于我们将检测视为回归问题,所以我们不需要复杂的流程。测试时,我们在一张新图像上简单的运行我们的神经网络来预测检测结果。在Titan X GPU上不做批处理的情况下,YOLO的基础版本以每秒45帧的速度运行,而快速版本运行速度超过150fps。这意味着我们可以在不到25毫秒的延迟内实时处理流媒体视频。此外,YOLO实现了其它实时系统两倍以上的平均精度。关于我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:YOLO: Real-Time Object Detection。
第二,YOLO是在整个图像上进行推断的。与基于滑动窗口和候选框的技术不同,YOLO在训练期间和测试时都会顾及到整个图像,所以它隐式地包含了关于类的上下文信息以及它们的外观。Fast R-CNN是一种很好的检测方法[14],但由于它看不到更大的上下文,会将背景块误检为目标。与Fast R-CNN相比,YOLO的背景误检数量少了一半。
第三,YOLO能学习到目标的泛化表征(generalizable representations of objects)。把在自然图像上进行训练的模型,用在艺术图像进行测试时,YOLO大幅优于DPM和R-CNN等顶级的检测方法。由于YOLO具有高度泛化能力,因此在应用于新领域或碰到意外的输入时不太可能出故障。
YOLO在精度上仍然落后于目前最先进的检测系统。虽然它可以快速识别图像中的目标,但它在定位某些物体尤其是小的物体上精度不高。
我们在实验中会进一步探讨精度/时间的权衡。我们所有的训练和测试代码都是开源的,而且各种预训练模型也都可以下载。
主要知识点
之前的方法
- R-CNN: SS(提取候选框)+CNN+SVM+回归
YOLO
启发思路:人们瞟一眼就可以知道图片中有什么物体,在哪里以及它们是如何
相互作用的。
YOLO处理步骤非常简单!
- 将输入图像的大小调整为448*448。
- 通过卷积层提取特征
- 利用非极大值抑制(NMS)进行筛选
YOLO的定义
YOLO将目标检测问题重新定义为一个单一的
回归问题直接从图像像素到边界框坐标和类概率。使用我们的系统,你只看一次(YOLO)就可以预测什么物体存在,它们在哪里。(We reframe object detection as asingle regression problem, straight from image pixels tobounding box coordinates and class probabilities. Using our system, you only look once (YOLO) at an image to predict what objects are present and where they are.)
跟上图一样只需输入图片,经过一个单独的CNN网络就可以得到bounding box和类概率。
YOLO的优点
- YOLO十分快速。能够达到实时的要求。在 Titan X 的 GPU 上 能够达到 45 帧每秒。
- YOLO在做预测时使用的是全局图像。与FastR-CNN相比,YOLO产生的背景错误数量不到一半。
- YOLO 学到物体更泛化的特征表示。因此当应用于新域或意外输入时,不太可能崩溃。
2. 统一检测(Unified Detection)

翻译:
我们将目标检测的独立部分(the separate components )整合到单个神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测一张图像中的所有类别的所有边界框。这意味着我们的网络对整张图像和图像中的所有目标进行全局推理(reason globally)。YOLO设计可实现端到端训练和实时的速度,同时保持较高的平均精度。
我们的系统将输入图像分成 S×S 的网格。如果目标的中心落入某个网格单元(grid cell)中,那么该网格单元就负责检测该目标。
每个网格单元都会预测 B个 边界框和这些框的置信度分数(confidence scores)。这些置信度分数反映了该模型对那个框内是否包含目标的置信度,以及它对自己的预测的准确度的估量。在形式上,我们将置信度定义为 confidence=Pr(Object)∗IOUpred truth 。如果该单元格中不存在目标(即Pr(Object)=0),则置信度分数应为 0 。否则(即Pr(Object)=1),我们希望置信度分数等于预测框(predict box)与真实标签框(ground truth)之间联合部分的交集(IOU)。
每个网格单元还预测了C类的条件概率,Pr(Classi|Object)。这些概率是以包含目标的网格单元为条件的。我们只预测每个网格单元的一组类别概率,而不考虑框B的数量。
在测试时,我们将条件类概率和单个框的置信度预测相乘:
这给我们提供了每个框的特定类别的置信度分数。这些分数既是对该类出现在框里的概率的编码,也是对预测的框与目标的匹配程度的编码
主要知识点
思想
将目标检测问题看作是一个单一的回归问题,使用整个图像(全局推理)的特征来预测边界框。将输入图像分成S*S的网格(grid cell),如果一个物体中心落入到一个cell中,那幺该cell就负责预测该物体,一个格子只能预测一个物体,生成两个预选框。
YOLO的工作流程:

- 将处理后的图片分成S * S(7 * 7)大小的网格,这里把每个网格称为grid cell。
- 每个grid cell预测B(YOLOv1中B=2)个bounding box,每个bounding box包含5个参数(x,y,w,h,c),
其中(x,y)是bounding box的中心坐标,w和h是bounding box的宽和高,c是bounding box的置信度(图中框线粗细表示置信度大小),表示预测的bounding box中包含物体的概率。
(x,y)是指bounding box的预测框的中心坐标相较于该bounding box归属的grid cell左上角的偏移量,在0-1之间,下面的图片来自【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
在上图中,绿色虚线框代表grid cell,绿点表示该grid cell的左上角坐标,为(0,0);红色和蓝色框代表该grid cell包含的两个bounding box,红点和蓝点表示这两个bounding box的中心坐标。有一点很重要,bounding box的中心坐标一定在该grid cell内部,因此,红点和蓝点的坐标可以归一化在0-1之间。在上图中,红点的坐标为(0.5,0.5),即x=y=0.5,蓝点的坐标为(0.9,0.9),即x=y=0.9。
(w,h)是指该bounding box的宽和高,但也归一化到了0-1之间,表示相较于原始图像的宽和高(即448个像素)。
如上图所示比如该框的高宽皆为44.8个像素则w=h=0.1。红框的x=0.8,y=0.5,w=0.1,h=0.2
-
每个grid cell还会预测C个类别的概率且只有一个代表类别(图中彩色的图,蓝色grid cell代表类别是狗,黄色grid cell代表类别是自行车)。
-
把每一个bounding box的置信度乘以对应的grid cell的类概率就可以得到每个bounding box的各类别概率。
从上面的介绍中我们已经知道了输入图像如何变为上图中Bounding boxes + confidence 和 Class probability map图片的,那么是如何得到最后一张图片的呢? 如下所示。
NMS
概念: 非极大值抑制(Non-Maximum Suppression,NMS)是目标检测算法中常用的一种后处理技术,用于消除多余的检测框,得到最优的检测框。

如上图所示我们对每一个bounding box得到的概率设置一个阈值比如0.1如果小于这个阈值的就设置为0,接着从大到小进行排序然后进行NMS就可以得到最终结果。那么NMS是如何工作的呢??

如上图所示两两之间进行比对,如果两个框之间的IOU(交并比)大于0.5,那么我们就将概率低的那个框删除,否则将其保留,直到遍历完。

然后跟上面一样比对剩下的bounding box,上图中是对狗这个类别的,YOLOv1中预测20各类别需要进行20次NMS这样就可以得到最终结果了,遍历过程如下所示。


通过NMS之后我们会得到上述一系列为0的稀疏矩阵,接下来我们只需要考虑那些不为0的,在原图中画出框和标上类别就可以了。如下图所示:

2.1 网络设计(Network Design)

翻译:
我们将此模型作为卷积神经网络来实现,并在Pascal VOC检测数据集[9]上进行评估。网络的初始卷积层从图像中提取特征,而全连接层负责预测输出概率和坐标。
我们的网络架构受图像分类模型GoogLeNet的启发[34]。我们的网络有24个卷积层,后面是2个全连接层。我们只使用1×1降维层,后面是3×3卷积层,这与Lin等人[22]类似,而不是GoogLeNet使用的Inception模块。
我们还训练了快速版本的YOLO,旨在推动快速目标检测的界限。快速YOLO使用具有较少卷积层(9层而不是24层)的神经网络,在这些层中使用较少的卷积核。除了网络规模之外,基本版YOLO和快速YOLO的所有训练和测试参数都是相同的。
我们网络的最终输出是7×7×30的预测张量。
主要知识点
网络结构
YOLOv1使用的网络是GOOgleNet,但是YOLOv1的网络结构并没有使用Inception模块,而是使用1 * 1的卷积核进行降维,然后使用3*3的卷积核进行特征提取。网络结构如下所示

(1)YOLO主要是建立一个CNN网络生成预测7×7×1024 的张量 。
(2)然后使用两个全连接层执行线性回归,以进行7×7×2 边界框预测。将具有高置信度得分(大于0.25)的结果作为最终预测。
(3)在3×3的卷积后通常会接一个通道数更低1×1的卷积,这种方式既降低了计算量,同时也提升了模型的非线性能力。
(4)除了最后一层使用了线性激活函数外,其余层的激活函数为 Leaky ReLU 。
(5)在训练中使用了 Dropout 与数据增强的方法来防止过拟合。
(6)对于最后一个卷积层,它输出一个形状为 (7, 7, 1024) 的张量。 然后张量展开。使用2个全连接层作为一种线性回归的形式,它输出1470个参数,然后reshape为 (7, 7, 30) 。
张量刨面图
看到上面的grid cell中的数据时我们会好奇这些数据到底是怎样获取的呢?为什么是7 * 7 * 30呢,如下所示:

如上图所示:将输入图片的大小调整为448 * 448之后经过若干个卷积层得到一个7 * 7 * 30的向量。包含所有所有预测框的坐标和置信度,类概率。我们只需要解析这个向量就可以得到我们想要的结果!每一个7 * 7 * 30的向量包含有:2个bounding box的中心点坐标,宽高,置信度信息,以及对应的20个类别的概率。
2.2训练(Training )

翻译:
我们在ImageNet的1000类竞赛数据集[30]上预训练我们的卷积层。对于预训练,我们使用图3中的前20个卷积层,接着是平均池化层和全连接层。我们对这个网络进行了大约一周的训练,并且在ImageNet 2012验证集上获得了单一裁剪图像88%的top-5准确率,与Caffe模型池中的GoogLeNet模型相当。我们使用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 和 λ n o o b j λ_{coord} 和λ_{noobj} λcoord和λnoobj来实现这一点。 我们设定$ λ_{coord}= 5 和 λ_{noobj}=0.5$。
平方和误差对大框和小框的误差权衡是一样的,而我们的错误指标(error metric)应该要体现出,大框的小偏差的重要性不如小框的小偏差的重要性。为了部分解决这个问题,我们直接预测边界框宽度和高度的平方根,而不是宽度和高度。
YOLO为每个网格单元预测多个边界框。在训练时,每个目标我们只需要一个边界框预测器来负责。若某预测器的预测值与目标的实际值的IOU值最高,则这个预测器被指定为“负责”预测该目标。这导致边界框预测器的专业化。每个预测器可以更好地预测特定大小,方向角,或目标的类别,从而改善整体召回率(recall)。
在训练期间,我们优化以下多部分损失函数

注意,如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚(penalizes)分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。
我们用Pascal VOC 2007和2012的训练集和验证数据集进行了大约 135个epoch 的网络训练。因为我们仅在Pascal VOC 2012上进行测试,所以我们的训练集里包含了Pascal VOC 2007的测试数据。在整个训练过程中,我们使用:batch size=64,momentum=0.9,decay=0.0005。
我们的学习率(learning rate)计划如下:在第一个epoch中,我们将学习率从$ 10^{-3}慢慢地提高到 10^{-2} 。如果从大的学习率开始训练,我们的模型通常会由于不稳定的梯度而发散 ( d i v e r g e ) 。我们继续以 。如果从大的学习率开始训练,我们的模型通常会由于不稳定的梯度而发散(diverge)。我们继续以 。如果从大的学习率开始训练,我们的模型通常会由于不稳定的梯度而发散(diverge)。我们继续以 10^{-2} 进行 75 个周期的训练,然后以 进行75个周期的训练,然后以 进行75个周期的训练,然后以 10^{-3} 进行 30 个周期的训练,最后以 进行30个周期的训练,最后以 进行30个周期的训练,最后以 10^{-4} $进行30个周期的训练。
为避免过拟合,我们使用了Dropout和大量的数据增强。 在第一个连接层之后的dropout层的丢弃率设置为0.5,以防止层之间的相互适应[18]。 对于数据增强(data augmentation),我们引入高达20%的原始图像大小的随机缩放和平移(random scaling and translations )。我们还在 HSV 色彩空间中以高达 1.5 的因子随机调整图像的曝光度和饱和度。
主要知识点
训练过程
- 预训练过程

- 训练检测网络
经过上一步的预训练,就已经把主干网络的前20个卷积层给训练好了,前20层的参数已经学到了图片的特征。接下来的步骤本质就是迁移学习,在训练好的前20层卷积层后加上4层卷积层和2层全连接层,然后在目标检测的任务上进行迁移学习。除最后一层使用ReLu激活函数,其他层均采用leaky ReLU激活函数。
leaky ReLU相对于ReLU函数可以解决在输入为负值时的零梯度问题。YOLOv1中采用的leaky ReLU函数的表达式为:
ϕ ( x ) = { x , i f x > 0 0.1 x , o t h e r w i s e \phi(x) = \left\{\begin{matrix}x, & if ~~ x > 0 \\ 0.1x, & otherwise\end{matrix}\right. ϕ(x)={x,0.1x,if x>0otherwise
损失函数

看到这里有人脑袋大了全是公式但是不用慌如上图所示分成了5部分:
- 负责检测物体的bbox中心点定位误差
- 负责检测物体的bbox宽高定位误差
- 负责检测物体的bbox置信度误差
- 不负责检测物体的bbox置信度误差
- 负责检测物体的grid cell分类误差
因为YOLOv1是回归问题所有损失我们都可以直接看作两点之间求距离,这样看起来是不是就简单多了。
问题一: 为什么使用平方和误差
原因: 易于优化
问题二: 平方和误差的缺陷
回答: 它分给分类误差和定位误差的缺陷是一样的,
问题三: 很多框没有包含任何目标,这将这些单元格的“置信度”分数推向零,通常压制了包含目标的单元格的梯度。这可能导致模型不稳定,从而导致训练在早期就发散
解决方案: 引用两个参数 λ c o o r d 和 λ n o o b j λ_{coord} 和λ_{noobj} λcoord和λnoobj来实现这一点。 我们设定$ λ_{coord}= 5 和 λ_{noobj}=0.5$。
问题四: 平方和误差对大框和小框的误差权衡是一样的,而我们的错误指标(error metric)应该要体现出,大框的小偏差的重要性不如小框的小偏差的重要性。为了部分解决这个问题,我们对预测边界框宽度和高度加根号,而不是宽度和高度。
原因:
从上图我们可以清晰的看出加了根号之后,小框产生的误差会更大,即对小框的惩罚更加严重。
2.3 推论(Inference)

翻译:
就像在训练中一样,预测测试图像的检测只需要一次网络评估。在Pascal VOC上,每张图像上网络预测 98 个边界框和每个框的类别概率。YOLO在测试时非常快,因为它只需要一次网络评估(network evaluation),这与基于分类器的方法不同。
网格设计强化了边界框预测中的空间多样性。通常一个目标落在哪一个网格单元中是很明显的,而网络只能为每个目标预测一个边界框。然而,一些大的目标或接近多个网格单元的边界的目标能被多个网格单元定位。非极大值抑制(Non-maximal suppression,NMS)可以用来修正这些多重检测。非最大抑制对于YOLO的性能的影响不像对于R-CNN或DPM那样重要,但也能增加2−3%的mAP。
主要知识点
(1)预测测试图像的检测只需要一个网络评估。
(2)测试时间快
(3)当图像中的物体较大,或者处于 grid cells 边界的物体,可能在多个 cells 中被定位出来。
(4)利用NMS去除重复检测的物体,使mAP提高,但和RCNN等相比不算大。
2.4 YOLO的局限性(Limitations of YOLO)

翻译:
由于每个格网单元只能预测两个框,并且只能有一个类,因此YOLO对边界框预测施加了很强的空间约束。这个空间约束限制了我们的模型可以预测的邻近目标的数量。我们的模型难以预测群组中出现的小物体(比如鸟群)。
由于我们的模型学习是从数据中预测边界框,因此它很难泛化到新的、不常见的长宽比或配置的目标。我们的模型也使用相对较粗糙的特征来预测边界框,因为输入图像在我们的架构中历经了多个下采样层(downsampling layers)。
最后,我们的训练基于一个逼近检测性能的损失函数,这个损失函数无差别地处理小边界框与大边界框的误差。大边界框的小误差通常是无关要紧的,但小边界框的小误差对IOU的影响要大得多。我们的主要错误来自于不正确的定位。
主要知识点
(1) 每个格网单元只能预测两个框,并且只能有一个类(容易出现漏检),因此YOLO对边界框预测施加了很强的空间约束。
(2) 由于我们的模型学习是从数据中预测边界框,因此它很难泛化到新的、不常见的长宽比或配置的目标。
(3) 由于我们的模型使用相对较粗糙的特征来预测边界框,因此它难以预测小物体(感受野较大,小目标特征无法在后面的特征中体现出来)。
(4) 大边界框的小误差通常是无关要紧的,但小边界框的小误差对IOU的影响要大得多。
3. 与其他目标检测算法的比较(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及其变体(variants)使用区域候选而不是滑动窗口来查找图像中的目标。选择性搜索[35]生成潜在的边界框(Selective Search generates potential bounding boxes),卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测(eliminates duplicate detections)。 这个复杂流水线的每个阶段都必须独立地进行精确调整(precisely tuned independently),所得到的系统非常缓慢,在测试时间每个图像需要超过40秒[14]。
YOLO与R-CNN有一些相似之处。每个网格单元提出潜在的边界框并使用卷积特征对这些框进行评分。然而,我们的系统对网格单元的候选框施加空间限制,这有助于缓解对同一目标的多次检测的问题。 我们的系统还生成了更少的边界框,每张图像只有98个,而选择性搜索则有约2000个。最后,我们的系统将这些单独的组件(individual components)组合成一个单一的、共同优化的模型。
其它快速检测器。 Fast R-CNN 和 Faster R-CNN 通过共享计算和使用神经网络替代选择性搜索[14],[28]来提出候选区域来加速 R-CNN 框架。虽然它们提供了比 R-CNN 更快的速度和更高的准确度,但仍然不能达到实时性能。
许多研究工作集中在加快DPM流程上[31] [38] [5]。它们加速HOG计算,使用级联(cascades),并将计算推动到(多个)GPU上。但是,实际上只有30Hz的DPM [31]可以实时运行。
YOLO并没有试图优化大型检测流程的单个组件,相反,而是完全抛弃(throws out…entirely)了大型检测流程,并通过设计来提高速度。
像人脸或行人等单个类别的检测器可以高度优化,因为他们只需处理较少的多样性[37]。YOLO是一种通用的检测器,它可以同时(simultaneously)检测多个目标。
Deep MultiBox。与R-CNN不同,Szegedy等人 训练一个卷积神经网络来预测感兴趣的区域(regions of interest,ROI)[8],而不是使用选择性搜索。 MultiBox还可以通过用单个类别预测替换置信度预测来执行单个目标检测。 但是,MultiBox无法执行一般的目标检测,并且仍然只是较大检测流水线中的一部分,需要进一步的图像补丁分类。 YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat。Sermanet等人训练了一个卷积神经网络来执行定位,并使该定位器进行检测[32]。OverFeat高效地执行滑动窗口检测,但它仍然是一个不相交的系统(disjoint system)。OverFeat优化了定位功能,而不是检测性能。像DPM一样,定位器在进行预测时只能看到局部信息。OverFeat无法推断全局上下文,因此需要大量的后处理来产生连贯的检测。
MultiGrasp。我们的系统在设计上类似于Redmon等[27]的抓取检测。 我们的网格边界框预测方法基于MultiGrasp系统进行回归分析。 然而,抓取检测比物体检测要简单得多。 MultiGrasp只需要为包含一个目标的图像预测一个可抓取区域。 它不必估计目标的大小,位置或边界或预测它的类别,只需找到适合抓取的区域就可以了。 而YOLO则是预测图像中多个类的多个目标的边界框和类概率。
主要知识点
- DPM
用传统的HOG方法和传统的SVM分类器,人工造一个模板,再用滑动窗口方法不断的暴力搜索去匹配那个模板。
缺点:
计算量巨大,由于是静态特征,无法匹配日变化的东西,鲁棒性差
- R-CNN
- 使用SS方法提取2000个候选框
- 将每个候选框送入CNN提取特征,
- 使用SVM分类器进行分类
- Other Fast Detectors
FAST 和 FASTERR-CNN是基于R-CNN的改版,速度和精度都提升了,但是也没法做到实时,但是精度比YOLO高,作者这里没有提及
- Deep MultiBox
Deep MultiBox:通过CNN来预测感兴趣区域而不是选择性搜索。YOLO和MultiBox都是使用CNN来预测图像中的边界框,但YOLO是一个完整的系统
- OverFeat
有效的执行滑动窗口,优化了定位,而不是检测性能与DPM一样只看得到本地信息(缺乏上下文联系)
- MultiGrasp
YOLO在设计上与Redmon等人的抓取检测工作相似。边界盒预测的网格方法是基于多重抓取系统的回归到抓取。
4. 实验(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可以推广到新的数据
主要知识点
- 使用YOLO重构FAST R-CNN可以显著提高性能
- YOLO在两个艺术品数据集上比其他检测器更能更好的推广到新领域(YOLO泛化性强)
4.1 与其他实时系统比较(Comparison to Other RealTime Systems)

翻译
目标检测方面的许多研究工作都集中在使标准的检测流程更快[5],[38],[31],[14],[17],[28]。然而,只有Sadeghi等人实际上产生了一个实时运行的检测系统(每秒30帧或更好)[31]。我们将YOLO与DPM的GPU实现进行了比较,其在30Hz或100Hz下运行。虽然其它的算法没有达到实时性的标准,我们也比较了它们的mAP和速度的关系,从而探讨目标检测系统中精度和性能之间的权衡。
Fast YOLO是PASCAL上最快的目标检测方法;据我们所知,它是现有的最快的目标检测器。具有52.7%的mAP,实时检测的精度是以前的方法的两倍以上。普通版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又快又准
4.2 VOC 2007误差分析(VOC 2007 Error Analysis)

翻译:
为了进一步研究YOLO和最先进的检测器之间的差异,我们详细分析了VOC 2007的分类(breakdown)结果。我们将YOLO与Fast R-CNN进行比较,因为Fast R-CNN是PASCAL上性能最高的检测器之一并且它的检测代码是可公开得到的。
我们使用Hoiem等人的方法和工具[19],对于测试的每个类别,我们查看该类别的前N个预测。每个预测都或是正确的,或是根据错误的类型进行分类:
- Correct: correct class and IOU>0.5
- Localization: correct class, 0.1<IOU<0.5
- Similar: class is similar, IOU>0.1
- Other: class is wrong, IOU>0.1
- Background: IOU<0.1 for any object(所有目标的IOU都<0.1)
YOLO难以正确地定位目标,因此定位错误比YOLO的所有其他错误总和都要多。Fast R-CNN定位错误更少,但把背景误认成目标的错误比较多。它的最高检测结果中有13.6%是不包含任何目标的误报(false positive,背景)。 Fast R-CNN把背景误认成目标的概率比YOLO高出3倍。
主要知识点
- YOLO定位错误率高于FAST R-CNN;FAST R-CNN背景误报率高于YOLO
4.3 Fast R-CNN与YOLO的结合( Combining Fast R-CNN and YOLO)

翻译:
在VOC 2012测试集中,YOLO的mAp得分是57.9%。这比现有最先进的技术水平低,更接近使用VGG-16的原始的R-CNN,见表3。与其最接近的竞争对手相比,我们的系统很难处理小物体上(struggles with small objects)。在瓶子、羊、电视/监视器等类别上,YOLO得分比R-CNN和Feature Edit低8-10%。然而,在其他类别,如猫和火车YOLO取得了更好的表现。
我们的Fast R-CNN + YOLO模型组合是性能最高的检测方法之一。 Fast R-CNN与YOLO的组合提高了2.3%,在公共排行榜上提升了5个位置
主要知识点

- Fast R-CNN从与YOLO的组合中得到2.3%的改进,在公共排行榜上提升了5个百分点
- 但是组合方式不受益于YOLO的速度
4.5 泛化性:图像中的人物检测(Generalizability: Person Detection in Artwork)

翻译:
用于目标检测的学术数据集的训练和测试数据是服从同一分布的。但在现实世界的应用中,很难预测所有可能的用例,他的测试数据可能与系统已经看到的不同[3]。我们将YOLO与其他检测系统在毕加索(Picasso)数据集[12]和人物艺术(People-Art)数据集[3]上进行了比较,这两个数据集用于测试艺术品上的人物检测。
作为参考(for reference),我们提供了VOC 2007的人形检测的AP,其中所有模型仅在VOC 2007数据上训练。在Picasso数据集上测试的模型在是在VOC 2012上训练,而People-Art数据集上的模型则在VOC 2010上训练。
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泛化能力强,在艺术图像上表现良好
5. 自然环境下的实时检测(Real-Time Detection In The Wild)

翻译:
YOLO是一款快速,精确的物体检测器,非常适合计算机视觉应用。 我们将YOLO连接到网络摄像头,并验证它是否保持实时性能,包括从摄像头获取图像并显示检测结果的时间。
由此产生的系统是互动的和参与的。 虽然YOLO单独处理图像,但当连接到网络摄像头时,它的功能类似于跟踪系统,可在目标移动并在外观上发生变化时检测目标。 系统演示和源代码可在我们的项目网站上找到:YOLO: Real-Time Object Detection。
主要知识点

- YOLO在实时检测中表现良好,如上图所示,除了第二行第二个将人误判为飞机以外,别的没问题。
6. 结论(Conclusion)

翻译:
我们介绍YOLO——一种用于物体检测的统一模型。 我们的模型构造简单,可以直接在完整图像上训练。 与基于分类器的方法不同,YOLO是通过与检测性能直接对应的损失函数进行训练的,并且整个模型是一起训练的。
快速YOLO是文献中最快的通用目标检测器,YOLO推动实时对象检测的最新技术。 YOLO还能很好地推广到新领域,使其成为快速,鲁棒性强的应用的理想选择。
YOLOv1到这里就结束了,从上面我们学到了目标检测领域从之前的多步骤一味的追求精度而抛弃实际的应用到YOLOv1的统一检测,并且能在实时监测中表现良好,并且泛化能力强。 当我们设计网络的时候,我们不仅要追求精度,还要考虑实际的应用,以及泛化能力。
遗留问题:
- 由于每个grid cell只预测2个边界框,并且每个边界框预测5个值,所以每个grid cell最多预测2个物体,如果超过2个物体,那么YOLO可能会丢失一些物体。
- 由于采用平方差作为损失函数,所以YOLOv1存在定位误差。
- 精度并没有Fast R-CNN高
YOLO实现
这里的实现推荐一个大佬的deep-learning-for-image-processing
接下来我们YOLOv2见
更多推荐




所有评论(0)