YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记

论文链接:You Only Look Once: Unified, Real-Time Object Detection

网页地址:YOLO

摘要:

我们提出了YOLO,一个新的方法用于目标检测。之前的目标检测工作都是使用分类器来做检测。相反,我们将目标检测中空间分离的边界框和相关的类概率问题使用回归来处理。在每次测试时,一个神经网络直接从全图预测出目标的边界框和所属的类别。因为整个检测流程是一个网络,它可以端到端地优化检测性能。我们提出的架构检测速度非常快,YOLO处理一张图像的速度可以达到45 FPS,更小的YOLO版本Fast YOLO,甚至可以达到155 FPS, mAP依然可以达到其它实时性检测算法的两倍。相比于最先进的检测系统,YOLO有更大的定位误差,更少的将图像背景误检成目标。最后,当从自然图像检测推广到其他领域检测,如艺术品检测。YOLO能学习到目标非常全面的特征,它优于其它的检测算法,比如DPM和R-CNN。

理解:

目前的目标检测系统,都是使用分类器来执行检测任务。为了检测一个目标,这些系统使用该目标的分类器,并在测试图像中的不同位置和尺度对其进行分类。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,分类器在整个图像上均匀间隔的位置运行,对图像的各个部分进行分类。R-CNN也是这样,先提取存在目标的候选区域,然后用CNN对这些区域进行图特征提取,最后用SVM对这些区域提取到的特征进行分类。分类完之后,使用后处理方法去精修检测出来的边界框,去掉重复检测的框,并基于场景中的其它目标对边界框重新打分。这个检测流程很复杂,因为每个模块都要单独训练,导致这个过程很慢并且很难优化。我们将目标检测重构为一个单一的回归问题,直接从图像像素预测边界框坐标和类概率。使用我们的系统,你只需要看一次图像(YOLO),就可以预测当前的目标和它们的位置。过程如下图:

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第1张图片

一个卷积网络同时预测多个边界框和这些框的类概率。YOLO对全图像进行训练,直接优化检测性能。与传统的目标检测方法相比,该统一模型具有许多优点。

  1. YOLO将目标检测问题当做回归来处理,直接用像素预测出目标的边界框和类别概率。如果当做分类问题来处理,则大概需要三个过程,首先是目标区域的提取,然后是对这些区域进行分类,最后再进行优化。相比如回归问题,有以下几个缺点:首先过程复杂,其次,对每个区域都要分类一次,这个计算代价是很大的。这也是YOLO比R-CNN系列要快的原因。
  2. YOLO是将整个图用于特征,这就使得网络的感受野非常大,很容易就能区分哪些是图像的背景,而R-CNN提取特征时,只是输入图像的局部,这就使得网络的感受野很小,不能很好区分背景(举个例子,当图像中有一头很大的大象,占了图像60%的面积,从图像整体看,很容易区分图像背景和大象,如果,仅仅从图像中截取一小部分,就很难区分这一小部分是大象身体的一部分还是背景的一部分了),所以正如摘要所说的,更少的将图像背景误检成目标。
  3. YOLO能学习到目标非常全面的特征,通过对自然图像的训练和对艺术品的测试,YOLO在很大程度上超过了DPM和R-CNN等顶级检测方法。由于YOLO泛化能力非常强,所以在应用于新域或意外输入时,它不太可能崩溃。(这个原因论文没具体说,不过原因其实和第二点是一样的,感受野大,能提取到更高维的特征,所以泛化能力强。)

网络架构: 

将目标检测的各个部分统一到一个神经网络中。我们的网络使用整个图像的特征来预测每个边界框。它还可以同时预测一个图像在所有类中的所有边界框。这意味着我们的网络对整个图像和图像中的所有对象进行全局推理。YOLO设计支持端到端训练和实时性,同时保持较高的精度。

网络将输入图像划分成S\times S网格,图像中的目标中心落在哪个网格中,哪个网格就负责检测这个目标。每个网格都只负责预测B个边框( bounding box)和每个边框对应的置信度分数,如下图所示:

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第2张图片

这些置信度分数用来表示模型对框中包含目标的置信度(即边框里面有目标概率),以及预测出的边框的准确性(即预测出的边框与真实标注边框的IOU)。通常这个置信度分数等于Pr(Object)*IOU^{truth}_{pred}。如果网格中没有目标,则置信度分数为0,如果有目标,我们希望置信度分数等于预测出的边框与真实标注边框的IOU。每个边框有5个预测值:x,y,w,h和置信度。\left ( x,y \right )坐标表示边框中心坐标相对于负责该边框的网格中心坐标的偏移量,取值是[0,1]\left ( w,h \right )表示预测出来边框的宽高和整幅图的宽高比值,取值范围[0,1]。置信度等于预测出的边框与真实标注边框的IOU。每个网格也预测C个类别的条件概率,Pr\left ( Class_{i}|Object} \right ),这些概率的条件是网格中包含了目标。我们只预测每个网格单元格的一组类概率,而不考虑框B的数量(也就是说,每个网格仅负责预测一个目标,如果两个目标的中心落在同一个网格中,那可能会丢掉那个小目标)。在测试时,会用类别的条件概率乘以每个边界框预测出来的置信度,Pr(Class_{i}|Object)*Pr(Object)*IOU^{truth}_{pred}=Pr(Class_{i})*IOU^{truth}_{pred}。这给了每个边框的特定类别的置信度分数。这些分数既包含了类出现在框中的概率,也包含了预测坐标的准确性。用S=7,B=2来评价YOLO在P ASCAL VOC的性能。P ASCAL VOC有20个标签等级,所以C=20。我们最后的预测是一个7\times 7\times 30张量。

模型是使用卷积神经网络来实现,并在P ASCAL VOC检测数据集[进行了测试。网络的初始卷积层用于从图像中提取特征,全连通层预测输出概率和坐标。网络架构受到GoogLeNet图像分类模型的启发。网络有24个卷积层,然后是两个完全连接的层。使用了1\times 1卷积后面加3\times 3卷积层,类似于Lin等人的设计,代替了GoogLeNet使用的inception模块。整个网络如下图所示(用蓝色数字标注了每层的卷积层数,共24层):

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第3张图片

论文还训练了一个快速版本的YOLO,为了打破快速目标检测的速度记录。Fast YOLO使用的神经网络具有更少的卷积层(9层而不是24层)和更少的过滤器。除了网络的大小,YOLO和Fast YOLO之间的所有训练和测试参数都是相同的。

损失函数(重点):

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第4张图片

由三部分构成,坐标损失,置信度损失和类别概率损失。损失采用的是平方和误差,这比较容易优化,但是,会将定位误差和分类误差同等处理,这是不合适的(定位误差比分类误差更重要),还有就是,很多网格并不包含目标,会使很多网格的置信度为0,导致不包含目标的网格梯度会完全覆盖掉包含目标的网格,导致训练不稳定,甚至网络发散。为了解决这个问题,给定位误差(坐标误差)乘以一个较大的权值\lambda _{coord},论文取值是5,给不包含目标的置信度误差乘以一个较小的权值\lambda _{noobj},论文取值是0.5.解释一下,公式中的1^{obj}_{i,j}表示第i个网格负责的第j个边框中是否包含目标,若包含则为1,否则为0.也就是说,只对包含目标的网格进行误差计算。1^{obj}_{i}表示第i个网格包含目标则为1,否则为0。宽度和高度之所以采用平方根相减是为了降低小误差对大边框和小边框的不同影响,因为一个小误差,对于大边框的影响不大,但是对于小边框影响可能就比较大了。这种方式并不能完全消除这种影响,也仅仅是缓解而已,所以模型的定位误差还是比较大。

网络训练:

使用PASCAL VOC 2007和2012年的训练和验证数据集对网络进行了135个epoch的训练。在整个训练过程中,使用批大小为64,动量为0.9,衰减为0.0005。学习率衰减规律,首先从0.001提高到0.01。如果使用太大的学习率,模型往往由于不稳定的梯度而发散。之后使用0.01的学习率训练75个epoch,用0.001的学习率训练30epoch,最后是用0.0001的学习率训练30个epoch。为了避免过度拟合,使用了dropout和广泛的数据增强。在第一个连接层之后,rate=0.5的dropout层阻止层之间的相互适应。为了增加数据,引入了随机缩放和平移。还随机调整图像的曝光和饱和度。

网络测试:

就像在训练中一样,对测试图像的预测检测只需要一个网络。在PASCAL VOC上,该网络预测了每幅图像的98个边界框和每个框的类概率。YOLO在测试时非常快,因为它只需要一个单一的网络测试,不像基于分类器的方法需要多个过程。网格设计在约束边界框预测中实现了空间多样性。通常情况下,一个目标落在哪个网格单元格中是很清楚的,并且网络仅为每个目标预测一个框(R-CNN系列会预测多个框,最后用非极大值抑制选取最好的一个)。然而,一些大型目标或多个单元格边界附近的目标可以被多个单元格很好地定位。非最大抑制可以用来修复这些多重检测。虽然不像R-CNN或DPM那样对性能至关重要,但非最大抑制在mAP中增加了2- 3%。

YOLO的缺点:

YOLO和Fast R-CNN的性能比较:

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第5张图片

  1. YOLO对边界框预测施加了很强的空间限制,因为每个网格单元格只能预测两个框,并且只能有一个类。这种空间约束限制了模型可以预测的邻近对象的数量。比如模型很难检测成群出现的小物体,比如鸟群。
  2. 模型学习从数据中预测边界框,它很难推广到新的或不寻常的纵横比或配置中的目标。模型也使用相对粗糙的特征来预测边界框,因为我们的架构从输入图像中有多个下采样层(可以这么理解,训练时,图像中楼房都是100 \times 200的尺寸,突然测试集里面的房子更高,都是100\times 600的,此时可能就会检测不出,或者出现漏检;即使网络有多个下采样层,可以以更大的感受野适应不同的尺寸,但是这还是远远不够,我觉得这是所有模型的通病,扩充数据集或使用数据增强应该可以缓解)。
  3. 损失函数对小边界框和大边界框中的误差处理是一样的。大边界框的小偏差通常是可以接受的,但小边界框的小偏差影响是很大的。YOLO定位不准确的原因主要就是这个。

实验结果:

YOLOv1(You Only Look Once: Unified, Real-Time Object Detection)论文笔记_第6张图片

 

参考文献:

[1].Redmon J , Divvala S , Girshick R , et al. You Only Look Once: Unified, Real-Time Object Detection[J]. 2015.

你可能感兴趣的:(目标检测)