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

摘要:

我们提出了一种新的目标检测方法YOLO。先前的目标检测工作重新利用分类器来执行检测。相反,我们将对象检测框架为一个回归问题,空间分离的边界框和相关的类概率。在一次评估中,单个神经网络直接从完整图像预测绑定框和类概率。由于整个检测管道是一个单一的网络,因此可以在检测性能上直接进行端到端优化。

我们的统一架构非常快。我们的基本YOLO模型以每秒45帧的速度实时处理图像。该网络的一个较小版本,Fast YOLO,处理速度达到惊人的155帧每秒,同时仍然实现了其他实时探测器的两倍的mAP。与最先进的检测系统相比,YOLO产生更多的定位错误,但更不可能预测背景误报。最后,YOLO学习对象的一般表示。它优于其他检测方法,包括DPM和R-CNN,当从自然图像推广到其他领域,如艺术品。

1. 介绍

人们扫一眼图像就能立刻知道图像中有什么物体,它们在哪里,以及它们是如何相互作用的。人类的视觉系统是快速和准确的,使我们能够执行复杂的任务,如驾驶很少有意识的思考。快速、准确的目标检测算法可以让计算机在没有专门传感器的情况下驾驶汽车,使辅助设备能够向人类用户传递实时场景信息,并释放出用于通用、响应式机器人系统的潜力。

目前的检测系统利用分类器来进行检测。为了检测一个目标,这些系统对该目标进行分类器,并在测试图像的不同位置和尺度上对其进行评估。像可变形部件模型(DPM)这样的系统使用滑动窗口方法,分类器在整个图像[10]上均匀间隔的位置运行。

最近的方法,如R-CNN,使用区域建议方法首先在图像中生成潜在的边界框,然后对这些建议框运行分类器。分类后通过后处理细化边框,消除重复检测,并基于场景[13]中的其他对象对边框进行重新标记。这些复杂的管道速度很慢,很难优化,因为每个单独的组件必须单独训练。

我们重新框架对象检测作为一个单一的回归问题,直接从图像像素到边界框坐标和类概率。使用我们的系统,你只需要看一次(YOLO)的图像,就可以预测什么物体存在以及它们在哪里。

YOLO非常简单:参见图1。一个卷积网络同时预测多个包围盒和这些盒的类概率。YOLO训练全图像,并直接优化检测性能。与传统的对象检测方法相比,这个统一的模型有几个优点。

 图1:YOLO检测系统。使用YOLO处理图像简单而直接。我们的系统(1)将输入图像的大小调整为448 × 448,(2)在图像上运行一个单一的卷积网络,(3)通过模型的置信度对结果检测阈值。

首先,YOLO的速度非常快。由于我们将检测视为回归问题,因此不需要复杂的管道。我们只需在测试时在新图像上运行我们的神经网络来预测检测结果。我们的基本网络运行速度是每秒45帧,在Titan X GPU上没有批处理,一个快速版本运行速度超过每秒150帧。这意味着我们可以实时处理流媒体视频,延迟小于25毫秒。此外,YOLO的平均精度是其他实时系统的两倍多。我们的系统在网络摄像头上实时运行的演示,请参阅我们的项目网页:http://pjreddie.com/yolo/。

其次,YOLO在进行预测时,会在全球范围内对形象进行推理。与基于滑动窗口和区域提议的技术不同,YOLO在训练和测试期间看到整个图像,因此它隐式地编码有关类及其外观的上下文信息。Fast R-CNN是一种顶级检测方法[14],它将图像中的背景补丁误认为目标,因为它无法看到更大的背景。与Fast R-CNN相比,YOLO产生的背景错误数量不到一半。

第三,YOLO学习对象的泛化表征。当在自然图像上训练并在艺术品上测试时,YOLO的表现大大超过了顶级检测方法,如DPM和R-CNN。因为YOLO具有高度的泛化性,所以当应用于新领域或意外输入时,它不太可能崩溃。

YOLO在准确性方面仍落后于最先进的探测系统。虽然它可以快速识别图像中的物体,但它很难精确定位一些物体,尤其是小物体。我们在实验中进一步检验这些权衡。

我们所有的培训和测试代码都是开源的。还可以下载各种预训练模型。

2. 联合检测

我们将目标检测的独立组件统一为一个单一的神经网络。我们的网络使用来自整个图像的特征来预测每个边界框。它还可以同时预测图像所有类的所有边界框。这意味着我们的网络会对整个图像和图像中的所有对象进行全局分析。YOLO设计可以实现端到端训练和实时速度,同时保持较高的平均精度。

我们的系统将输入图像划分为一个S × S网格。如果一个物体的中心落在一个网格单元中,该网格单元负责检测该物体。

每个网格单元格预测B边界框和这些框的置信度得分。这些置信度得分反映了模型对框包含一个对象的置信度,以及它认为它所预测的框有多准确。我们正式地将置信度定义为Pr(object)\times IOU_{pred}^{truth}Pr(object)是bounding box内存在对象的概率。如果该单元格中不存在对象,置信度得分应该为零。否则,我们希望置信度得分等于预测框与地面真实值之间的交集。

每个边界框包含5个预测:x、y、w、h和置信度。(x,y) 坐标表示相对于网格单元格边界的方框中心。预测相对于整个图像的宽度和高度。最后置信度预测表示预测框与任何地面真值框之间的IOU。

每个网格单元格还预测C条件类的概率,Pr(class_i|Object)。这些概率取决于包含对象的网格单元格。我们每个网格单元格只预测一组类概率,不管盒子B的数量是多少。在测试时,我们将条件类概率与单个框置信度预测相乘,

Pr(Class_i|Object)*Pr(Object)*IOU_{pred}^{truth}=Pr(Class_i)*IOU_{pred}^{truth}

它为每个框提供了特定于类的置信度得分。这些分数编码该类出现在方框中的概率以及预测的方框与对象的匹配程度。

图2:模型。我们的系统将检测建模为一个回归问题。它将图像划分为S × S网格,并为每个网格单元预测B边界框、这些框的置信度和C类概率。这些预测被编码为S × S × (B * 5 + C)张量。

在PASCAL VOC上评估YOLO时,我们使用S = 7, B = 2。PASCAL VOC有20个标记类,因此C = 20。我们最后的预测是7 × 7 × 30张量。

2.1. 网络设计

我们将该模型实现为卷积神经网络,并在PASCAL VOC检测数据集[9]上对其进行评估。网络的初始卷积层从图像中提取特征,而全连接层预测输出概率和坐标。

我们的网络架构受到GoogLeNet图像分类[33]模型的启发。我们的网络有24个卷积层,其次是2个全连接层。与GoogLeNet使用的初始模块不同,我们简单地使用1 × 1的约简层,然后是3 × 3的卷积层,类似于Lin等人[22]。整个网络如图3所示。

我们还训练了YOLO的快速版本,旨在推动快速对象检测的边界。Fast YOLO使用的神经网络卷积层更少(9层而不是24层),这些层中的过滤器也更少。除了网络的大小,YOLO和Fast YOLO的所有训练和测试参数都是相同的。

我们网络的最终输出是7 × 7 × 30张量的预测量。

 图3: 架构。我们的检测网络有24个卷积层,其次是2个全连接层。交替的1 × 1卷积层减少了前一层的特征空间。我们在ImageNet分类任务上以一半的分辨率(224 × 224输入图像)对卷积层进行预训练,然后将分辨率提高一倍进行检测。

2.2 训练

我们在ImageNet 1000类竞赛数据集[29]上预训练卷积层。对于预训练,我们使用图3中的前20个卷积层,然后是平均池化层全连接层。我们对这个网络进行了大约一周的训练,并在ImageNet 2012验证集上实现了88%的单株top-5准确率,与Caffe的模型动物园[24]中的GoogLeNet模型相当。

然后我们转换模型来执行检测。Ren等人的研究表明,在预训练网络中同时添加卷积层和连接层可以提高性能[28]。按照他们的例子,我们添加了四个卷积层两个完全连接的层,并随机初始化权值。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224*224提高到448*448。

我们的最后一层同时预测类概率和边界框坐标。我们用图像的宽度和高度对边界框的宽度和高度进行规范化,使它们落在0和1之间。我们将边界框的x和y坐标参数化为特定网格单元位置的偏移量,因此它们也被限定在0和1之间。

我们为最后一层使用线性激活函数和所有其他层使用以下泄漏纠正线性(leaky rectifified linear)激活:

                                                                \phi(x) = \begin{cases} x & \text{ if } x>0 \\ 0.1x& \text{ otherwise } \end{cases}

我们对模型输出的平方和误差进行优化。我们使用平方和误差,因为它很容易优化,但它并不完全符合我们的目标最大化平均精度。它对定位误差和分类误差的权重是相等的,可能并不理想。此外,在每幅图像中,许多网格单元格不包含任何对象。这将使这些单元格的“置信度”得分接近于零,通常压倒了包含对象的单元格的梯度。这可能会导致模型不稳定,导致训练早期偏离。

为了弥补这一点,我们增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。我们使用两个参数:\lambda_{coord}\lambda_{noobj}来实现这一目标。我们设置\lambda_{coord}=5 和 \lambda_{noobj}=0.5

 平方和误差在大框和小框中的权重也相等。我们的误差度量应该反映出大框里的小偏差比小框里的小偏差影响小。为了部分解决这个问题,我们预测边界框宽度和高度的平方根,而不是直接预测宽度和高度。

YOLO预测每个网格单元有多个边界框。在训练时,我们只希望一个边界框预测器负责每个对象。我们指定一名预测器负责预测一个对象,根据该预测与地面真实值之间的当前IOU最大。这导致边界框预测器之间的专门化。每个预测者都能更好地预测特定的尺寸、纵横比或对象的类别,从而提高整体回忆能力。

在培训过程中,我们优化了以下多个部分损失函数。(位置误差(坐标和框的长,宽)+置信度误差(含object)+置信度误差(不含object)+分类误差)

\lambda_{coord}\sum ^{S^2}_{i=0} \sum_{j=0}^{B} \mathbb{I}_{ij}^{obj} [ (x_i-\hat{ x_i } )^2 + (y_i - \hat{ y_i } )^2 ] + \\ \lambda_{coord} \sum_{i=0}^{S^2}\sum_{j=0}^{B} \mathbb{I}_{ij}^{obj} [(\sqrt{w_i} - \sqrt{\hat{w_i}})^{2} + (\sqrt{h_i} - \sqrt{\hat{h_i}})^{2} ] + \\ \sum_{i=0}^{S^2} \sum_{j=0}^B \mathbb{I}_{ij}^{obj} (C_i-\hat{C_i})^2 + \\ \lambda_{noobj}\sum_{i=0}^{S^2}\sum_{j=0}^{B}\mathbb{I}_{ij}^{noobj} (C_i-\hat{C_i})^2 +\\ \sum_{i=0}^{S^2}\mathbb{I}_i^{obj} \sum_{c\in classes}( p_{i}(c) - \hat{p_i}(c))^2 \ (3) 

其中\mathbb{I}_{i}^{obj}表示对象是否出现在单元格i中,\mathbb{I}_{ij}^{obj}表示第i个单元格中的第j个边界框预测器“负责”该预测。

 请注意,如果网格单元中存在对象,则损失函数只惩罚分类错误(因此前面讨论的条件类概率)。如果预测器负责真实框(也就是有着那个网格中任意预测器的最高IOU值),它也只惩罚边界框坐标错误。

我们利用PASCAL VOC 2007和2012年的训练和验证数据集对网络进行了约135个epoch的训练。在2012年的测试中,我们还包含了VOC 2007的测试数据用于培训。在整个训练过程中,我们使用的批大小为64,动量为0.9,衰减为0.0005。

我们的学习率计划如下:在第一个时期,我们慢慢地将学习率从10e-3提到10e-2。如果我们以较高的学习率开始,我们的模型经常会因为不稳定的梯度而偏离。我们继续训,10e-2为75个时代,10e-3为30个时代,最后10e-4为30个时代.

为了避免过拟合,我们使用了dropout和广泛的数据增强。在第一个连接层之后,速率= .5的dropout层阻止了层[18]之间的共同适应。对于数据增强,我们引入了随机缩放和多达原始图像大小20%的平移。我们还在HSV颜色空间中随机调整图像的曝光和饱和度,最高可达1.5倍。

2.3 推理

猜你喜欢

转载自blog.csdn.net/qq_39696563/article/details/125794647