YOLOv1 论文学习笔记
前言
本文是自己阅读原论文You Only Look Once:Unified, Real-Time Object Detection时所总结的学习笔记,接下来会介绍原论文的Abstract(概括)、Introduction(介绍)、Unified Detection(统一检测)这三部分,并在每一部分呈现原英语论文、自己理解的中文翻译和阅读理解后的笔记,希望能帮助大家更加深刻地理解该论文,如有不足之处,还请大家指正。
Abstract(概括)
我们提出了一种新的目标检测方法YOLO,以往关于目标检测的工作是将分类器重新用于执行检测。然而,我们是将目标检测当作成一个回归问题来构建空间分离的bounding boxes和相关的类概率。一个单一的神经网络直接从评估里的整张图片中预测bounding boxes和类概率。由于整个检测管道是单一的网络,因此可以直接对检测性能进行端到端的优化。
笔记:
1.bounding boxes(包围盒):框住目标物体的边框。
2.YOLO可以进行端到端的优化因为其检测管道是单一的网络,这也是为什么YOLO检测速度快的一个原因。
我们的统一架构是非常快的。我们的基础YOLO模型以每秒45帧的速度实时处理图像。一个较小版本的网络,Fast YOLO,以令人震惊的每秒155帧进行处理的同时仍然可以实现其他实时探测器两倍的mAP(Mean Average Precision)(平均AP值)。与最先进的检测系统相比,YOLO产生了更多的定位错误,但很少可能会在背景的预测上产生假阳性。最后,YOLO学习了很多目标对象的广泛表现。当从自然图像推广到其他领域如艺术品时,它优于其他检测方法,包括DPM和R-CNN。
笔记:
1.mAP(Mean Average Precision)(平均AP值): 所有类别的平均精度求和除以所有类别。
2.AP(average precision)(平均精度):P-R曲线所围成图形的面积。
3.P(precision)(精准度):预测为正的且事实正的占所有事实正的比例。
TP(True Positive) (真阳性):事实是正的预测为正。
FP(False Positive) (假阳性):事实是负的预测为正。
FN(False Negative) (假阴性):事实是正的预测为负。
TN(True Negative) (真阴性):事实是负的预测为负。
4.R(recall)(召回率):预测为正的且事实正的占所有预测正的比例
1.Introduction(介绍)
人类瞥了一眼图像就立即知道图像中的物体是什么,它们在哪里,以及它们是如何相互作用的。人类的视觉系统是快速和准确的,允许我们执行复杂的任务,如没有很多意识想法的驾驶。快速、准确的目标检测算法将允许计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传达实时场景信息,并表现出一般目标和反应灵敏的机器人系统的潜能。
当前的检测系统重新使用分类器来执行检测。为了检测一个对象,这些系统为该对象采取分类器并在测试图像中的不同位置和尺度上对其进行评估。一些系统像deformable parts models (DPM)使用滑动窗口的方法,就是让分类器在整个图像上以均匀间隔位置的方式运行。
图1:YOLO检测系统。用YOLO处理图像是简单明了的。 我们的系统(1)将输入图像调整到448x448,(2)在图像上运行一个卷积网络,(3)通过模型的置信度阈值处理所得到的检测结果。
笔记:
1.阈值处理:即图像二值化。是图像分割的一种最简单的方法。二值化可以把灰度图像转换成二值图像。把大于某个临界灰度值的像素灰度设为灰度极大值,把小于这个值的像素灰度设为灰度极小值,从而实现二值化。
大多数最新的方法如R-CNN使用region proposal(候选区域)的方法去首先在图像中生成潜在的包围框,然后在这些候选框上运行分类器。在分类之后,后处理被用来改善bounding boxes,消除重复检测,并根据场景中的其他对象重新划分边框。这些复杂的管道是缓慢和难以优化的,因为每个单独的组件必须单独训练。
笔记:
1.region proposal(候选区域):图像中目标物体可能存在的区域。
我们将对象检测重新划分为一个单一的回归问题,直接从图像像素到bounding box的坐标和类概率。使用我们的系统you only look once (YOLO)在一副图像上来预测哪些对象存在以及它们在哪里。
YOLO简单得让人欣喜:看图一。单个卷积网络同时预测这些框的多个bounding boxes和类概率。YOLO在整张图像上训练并直接优化检测性能。
该统一模型相比于传统的目标检测方法具有几个优点。
首先,Yolo非常快。由于我们将检测作为一个回归问题因此我们不需要一个复杂的管道。我们只需在测试时的一张新图像上运行神经网络来预测检测结果。我们的基础网络在泰坦xGPU上没有批处理的情况下以每秒45帧的速度运行,而快速版本运行则超过150个FPS。这意味着我们可以在小于25毫秒的延迟下实时处理流视频。此外,YOLO达到了其他实时系统mAP的两倍以上。有关我们的系统在网络摄像机上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/
笔记:
1.FPS:FPS是图像领域中的定义,是指画面每秒传输帧数,通俗来讲就是指动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。
第二,YOLO在做预测时是对图片进行全局推理。与基于滑动窗口和候选区域的技术不同,YOLO能在训练和测试的时候看到整张图片,因此它能毫无保留地把关于类和表现的复杂信息编译成计算机语言。Fast R-CNN,一种顶级的检测方法,因为不能看见更多的背景而把一张含有目标对象的图像背景块弄错。与Fast R-CNN相比,YOLO的背景误差不到一半。
第三,YOLO学习目标对象可归纳的表现。当在自然图像上训练并在艺术品上测试时,YOLO较顶级检测方法如DPM和R-CNN有很大的优势。由于YOLO是高度可归纳的,所以当应用于新域或意外输入时它很少可能会崩溃。
YOLO在准确性上仍然落后于最先进的检测系统。 虽然它可以快速识别图像中的对象,但它很难精确地定位一些对象,特别是小对象。 我们在实验中进一步研究了这些权衡。
我们所有的训练和测试代码都是开源的。各种预训练的模型也可以下载。
笔记:
YOLO优点概括:
1.检测快
2.延迟低
3.mAP高
4.背景误差少
5.检测领域广
2.Unified Detection(统一检测)
我们将目标检测的独立的成分统一为一个单一的神经网络。我们的网络使用来自整个图像的特征来预测每个bounding box。它还同时预测图像中所有类中的所有bounding boxes。这意味着我们的网络全局推理整张图像以及图像中的所有目标对象。该YOLO的设计能够在端到端的训练和实时速度的同时保持较高的平均精度。
我们的系统将输入的图像划分为SxS的网格。如果该目标对象的中心落入网格单元中,那么这个网格单元负责检测该对象。
每个网络格预测B个bounding boxes和这些边框的置信分数。这些置信分数反映了模型对边框包含一个目标对象的置信度,以及它认为边框预测的准确性。我们在形式上把置信度定义成
如果该单元格中不存在对象,则置信分数应为零。除此之外,我们希望把置信分数等同于在预测的边框和真实边框之间intersection over union (IOU)。
笔记:
1.IOU:交并比
如图所示,交并比指的是绿色区域占蓝绿黄区域的比值,即AB的交集与AB并集之比。
每个网格单元还预测C个条件类概率
这些概率取决于包含目标对象的网格单元。我们仅仅预测每个网格单元的一组类概率,不管边框的数量B。
在测试时,我们将条件类概率和单个框置信度预测相乘
这给了我们每个框的特定类的置信度分数。这些分数编码了该类出现在框中的概率,以及预测的框与对象的匹配程度。
图2:模型。 我们的系统模型检测将作为一个回归问题。它将图像划分为SxS的网格,并且对于每个网格单元预测B个bounding boxes、边框的置信度和C个类概率。这些预测将会被编码成一个S x S x (B * 5 + C)的张量。
为了在PASCAL VOC上评估YOLO,我们将S = 7,
B = 2。PASCAL VOC有20个标签类,因此C = 20。我们的最终预测是一个7 x 7 x 30的张量。
2.1. Network Design(网络设计)
我们用卷积神经网络来实现这种模型,并在PASCAL VOC检测数据集上对其进行评估。网络的初始卷积层从图像中提取特征的同时完全连接层预测输出的概率和坐标。
我们的网络架构的灵感来自于图像分类中的谷歌网络模型。我们的网络有24个卷积层,然后紧接着的是2个完全连接层。与谷歌网络使用的初始模型不同,我们只使用1x1还原层,然后是3x3卷积层,类似于Lin等人使用的结构。 完整的网络如图3所示。
我们还训练了一个快速版本的YOLO,旨在推动快速目标检测的边界。Fast YOLO使用的神经网络具有较少的卷积层(九个而不是二十四个)和较少的过滤器除了网络的大小,所有的训练和测试参数在YOLO和Fast YOLO之间是相同的。
笔记:
1.该网络实现如下:首先是用一个7x7步长为2的卷积层和2x2的最大池化层,然后用3x3的卷积层和2x2的最大池化层,接着1x1与3x3卷积层和2x2的最大池化层交替多次后得到7x7深度为1024的特征矩阵,经过一层全连接层变成4096维度的向量,最后经过一层连接层变成7x7x30的张量。
2.该张量展开图如下:
7x7可以认为是上文所说7x7的网络格,将每一份的深度展开来看是由两个bounding box和20个类组成,每个bounding box含有xy(坐标)、wh(宽高)和confidence(置信度)这五个参数。
图3:结构。我们的检测网络有24个卷积层,然后紧跟着的是2个完全连接的层。交替使用1x1卷积层来减少前一层的特征空间。我们将Image Net分类任务上的卷积层预先训练为分辨率的一半(224x224输入图像),然后将分辨率加倍进行检测。
我们网络的最终输出是预测的7x7x30的张量。
2.2. Training(训练)
我们在ImageNet 1000-class competition数据集上对我们的卷积层进行了预训练。对于预训练,我们使用图3中的前20个卷积层,然后是平均池层和完全连接层。我们对这个网络训练大约一周,并在Image Net2012验证集上实现了单个作物前5名88%的精度,与Caffe的模型中的GoogLeNet模型相当。对于所有的训练和推理,我们使用Darknet框架来进行。
然后,我们将模型转换为执行检测。Ren等人表明在预先训练的网络中加入卷积层和全连接层可以提高性能。在它们的例子中,我们添加了四个卷积层和两个具有随机初始化权值的全连接层。检测通常需要精确的视觉信息,因此,我们将网络的输入分辨率从224x224提高到448x448。
我们的最后一层预测类概率和bounding box坐标。 我们通过图像宽度和高度对bounding box宽度和高度进行归一化,使它们介于0到1之间,我们将bounding box 的x和y坐标参数化为特定网格单元位置的偏移量,因此它们也被限制在0到1之间。
我们对最后一层使用线性激活函数,对其他所有的层使用leaky校正线性激活:
笔记:
这个激活函数是ReLU函数的变体——Leaky ReLU
该损失方程的优点是不会过拟合
我们优化了我们模型输出中的平方和误差。我们使用和平方误差,因为它很容易优化,但它并不完全符合我们最大限度地提高平均精度的目标。它将定位误差与可能不理想的分类误差赋予相等的权重。另外,在每个图像中,许多网格单元不包含任何对象。这将这些单元格的“置信度”分数推到零,这往往压倒了确实包含对象的单元格的梯度。这可能导致模型不稳定从而引起训练早期发散。
为了解决这个问题,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信预测的损失。我们使用两个参数,去完成这个。我们令
平方和误差在大边框和小边框中也同样有权重错误。我们的误差度量应该反映出大盒子中的小偏差比小盒子中的小偏差小。为了部分解决这一问题,我们直接预测bounding box宽度和高度的平方根,而不是宽度和高度。
YOLO在每一个网络格中预测出多个bounding boxes。在训练时,我们只希望一个bounding box预测器负责每个对象。我们指定了一个和真实物体位置有最高的IOU的预测器来“负责”预测一个对象,这导致了bounding box预测器之间的专门化。每个预测器更好地预测某些大小、纵横比或对象类别,从而提高总体召回率。
在训练过程中,我们优化了以下多个部分的损失方程:
其中表示对象是否出现在单元格i中,
表示单元格i中的jth边界框预测器对该预测“负责。
笔记:
1.该公式可分为三部分进行理解:第一部分是第一第二行公式表示为bounding box的损失方程,第二部分是第三第四行公式表示为confidence的损失方程,第三部分是最后一行公式表示为classes的损失方程。
请注意,如果网格单元中存在一个对象,则损失函数只会惩罚分类错误(因此前面讨论了条件类概率)。 如果该预测器是“负责”真实框( 在该网格单元中,任何预测器的IOU都是最高的),它还只惩罚bounding box坐标错误。
我们在PASCAL VOC 2007 and 2012的训练和验证数据集上对该网络进行了大约135期的训练。在2012进行测试时,我们还用了包括用于训练的VOC 2007测试数据。 在整个训练过程中,我们使用的批次大小为64,动量为0.9,衰减为0.0005。
我们的学习速度安排如下:在最初的几期,我们慢慢地将学习速度从提高到
。如果我们以高学习率开始,我们的模型经常由于不稳定的梯度而发散。我们继续用
训练75个期,然后用
训练30期,最后用
训练30期。
为了防止过拟合,我们使用dropout和广泛数据增强。 在第一个连接层之后,速率为0.5的dropout层防止了层与层之间互相适应。 对于数据增强,我们引入了多达20%的原始图像大小的随机缩放和平移。 我们还在HSV颜色空间中随机调整图像的曝光和饱和度,最高可达1.5倍。
笔记:
1.dropout层 :防止过拟合的一个层
2.HSV:色调H、饱和度S、明度V
2.3. Inference (推理)
就像在训练中一样,预测测试图像的检测只需要一个网络评估。 在PASCAL VOC上,该网络在每个图像上预测98个bounding boxes和每个框的类概率。 YOLO在测试时非常快,因为它只需要一个单一的网络评估,不像基于分类器的方法。
该网格的设计在bounding box的预测中强制空间多样性。 通常,目标对象落入到哪个网格单元是很清楚的,网络只为每个对象预测一个框。然而,一些大型物体或物体在多个网络格附近的能够被多个网络格很好地定位。非极大值抑制可用于修复这些多重检测。尽管性能对R-CNN 或者 DPM并不是关键的,但非极大值抑制能在mAP中增加了2-
3%。
2.4. Limitations of YOLO(YOLO的局限性)
Yolo对边界框预测施加了很强的空间约束,因为每个网格单元只预测两个框,并且只能有一个类。 这种空间约束限制了我们的模型可以预测的附近物体的数量。 我们的模型难以处理成群出现的小物体,例如成群的鸟。
由于我们的模型学会从数据中预测边界框,因此它难以用新的或不寻常的纵横比的结构去归纳目标。 我们的模型还使用相对粗糙的特征来预测bounding boxes,因为我们的结构具有来自输入图像中的多个下采样层。
最后,当我们训练一个接近检测性能的损失函数时,我们的损失函数在小bounding boxes和大bounding boxes中处理相同的错误。 大边框中的小错误通常是良性的,但小边框中的小错误对IOU有很大的影响。 我们的主要错误来源是错误的定位。