【论文#目标检测】You Only Look Once: Unified, Real-Time Object Detection

目录

  • 摘要
  • 1.引言
  • [2.统一检测(Unified Detection)](#2.统一检测(Unified Detection))
    • [2.1 网络设计](#2.1 网络设计)
    • [2.2 训练](#2.2 训练)
    • [2.3 推理](#2.3 推理)
    • [2.4 YOLO模型的局限](#2.4 YOLO模型的局限)
    • 3.与其他检测系统的对比
  • 4.实验
    • [4.1 与其他实时系统的对比](#4.1 与其他实时系统的对比)
    • [4.2 VOC 2007误差分析](#4.2 VOC 2007误差分析)
    • [4.3 Fast R-CNN和YOLO的结合](#4.3 Fast R-CNN和YOLO的结合)
    • [4.4 VOC 2012结果](#4.4 VOC 2012结果)
    • [4.5 泛化能力:艺术作品中的人物检测](#4.5 泛化能力:艺术作品中的人物检测)
    • 5.野外的实时目标检测
  • 6.结论

Author: Joseph Redmon; Santosh Divvala; Ross Girshick; Ali Farhadi

Published in: 2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR)

Date of Conference: 27-30 June 2016

Date Added to IEEE Xplore: 12 December 2016

ISBN Information:

Electronic ISBN:978-1-4673-8851-1

Print on Demand(PoD) ISBN:978-1-4673-8852-8

Electronic ISSN: 1063-6919

DOI: 10.1109/CVPR.2016.91

Publisher: IEEE

Conference Location: Las Vegas, NV, USA

摘要

我们提出了YOLO,这是一种新的目标检测方法。以往的目标检测工作是将分类器重新用于检测任务。而我们则将目标检测定义为一个回归问题,即预测空间上分离的边界框以及相关的类别概率。YOLO使用一个单一的神经网络,直接从完整图像中预测边界框和类别概率,仅需一次评估即可完成。由于整个检测流程是一个单一的网络,因此可以直接针对检测性能进行端到端优化。

我们的统一架构极其快速。我们的基础YOLO模型能够以每秒45帧的速度实时处理图像。网络的一个更小版本,即快速YOLO(Fast YOLO),能够以每秒155帧的惊人速度运行,同时其平均精度均值(mAP)是其他实时检测器的两倍。与最先进的检测系统相比,YOLO在定位精度上存在更多误差,但在背景区域预测误检的可能性更低。最后,YOLO能够学习到非常通用的目标表示。在从自然图像泛化到其他领域(如艺术作品)时,YOLO的表现优于其他检测方法,包括DPM和R-CNN。

1.引言

人类只需瞥一眼图像,就能立刻知道图像中有哪些物体、它们的位置以及它们之间的相互关系。人类的视觉系统快速且准确,使我们能够在几乎无需有意识思考的情况下完成诸如驾驶等复杂任务。如果能够开发出快速且准确的目标检测算法,计算机将能够在没有专用传感器的情况下驾驶汽车,辅助设备将能够实时向人类用户传递场景信息,同时也能为通用且响应迅速的机器人系统带来无限潜力。

目前的目标检测系统是将分类器重新用于检测任务。为了检测一个物体,这些系统会将该物体的分类器在测试图像的不同位置和尺度上进行评估。例如,可变形部件模型(DPM)等系统采用滑动窗口方法,分类器会在整个图像上以均匀间隔的位置运行。

更近期的方法,如R-CNN,采用区域建议方法首先在图像中生成潜在的边界框,然后对这些建议框运行分类器。在分类之后,会使用后处理来细化边界框、消除重复检测,并根据场景中的其他物体重新对边界框进行评分[13]。这些复杂的流程速度慢且难以优化,因为每个单独的组件都必须分别进行训练。

我们将目标检测重新定义为一个单一的回归问题,直接从图像像素到边界框坐标和类别概率。使用我们的系统,你只需要看一次(YOLO)图像,就能预测出图像中存在哪些物体以及它们的位置。

YOLO非常简洁:见图1。一个单一的卷积网络同时预测多个边界框以及这些边界框的类别概率。YOLO在完整图像上进行训练,并直接优化检测性能。这种统一的模型相比传统的目标检测方法具有诸多优势。

首先,YOLO极其快速。由于我们将检测定义为一个回归问题,因此我们不需要复杂的流程。在测试时,我们只需在新图像上运行我们的神经网络以预测检测结果。我们的基础网络在Titan X GPU上无需批量处理即可达到每秒45帧,而一个更快的版本能够达到每秒150帧以上。这意味着我们可以在实时流视频中进行处理,延迟小于25毫秒。此外,YOLO的平均精度均值是其他实时系统的两倍以上。有关我们的系统在摄像头实时运行的演示,请访问我们的项目网页:YOLO: Real-Time Object Detection

其次,YOLO在进行预测时会考虑图像的整体信息。与基于滑动窗口和区域建议的技术不同,YOLO在训练和测试时都能看到整张图像,因此它会隐式地编码有关类别及其外观的上下文信息。一种顶级的检测方法Fast R-CNN [14] 会将图像中的背景区域误认为是物体,因为它无法看到更大的上下文。相比之下,YOLO的背景误检数量不到Fast R-CNN的一半。

第三,YOLO能够学习到具有泛化能力的物体表示。当在自然图像上进行训练并在艺术作品上进行测试时,YOLO的表现远远超过了DPM和R-CNN等顶级检测方法。由于YOLO具有很强的泛化能力,因此在应用于新领域或意外输入时,它更不容易出现故障。

然而,YOLO在准确性方面仍然落后于最先进的检测系统。尽管它能够快速识别图像中的物体,但在精确定位某些物体(尤其是小物体)时存在困难。我们在实验中进一步探讨了这些权衡。

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

2.统一检测(Unified Detection)

我们将目标检测的各个分离组件统一为一个单一的神经网络。我们的网络使用整个图像的特征来预测每个边界框,并且同时预测图像中所有类别对应的全部边界框。这意味着我们的网络会对整个图像以及图像中的所有物体进行全局推理。

YOLO的设计使得端到端的训练和实时速度得以实现,同时保持了较高的平均精度。

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

每个网格单元会预测 B B B 个边界框以及这些边界框的置信度分数。这些置信度分数反映了模型对于边界框内是否包含物体的信心,以及它认为所预测边界框的准确性。从形式上讲,我们定义置信度为 Pr ( Object ) × IOU truth pred \text{Pr}(\text{Object}) \times \text{IOU}_{\text{truth}}^{\text{pred}} Pr(Object)×IOUtruthpred。如果某个网格单元内不存在物体,那么置信度分数应该为零。否则,我们希望置信度分数等于预测边界框与真实边界框之间的交并比 ( I O U ) (IOU) (IOU)。

每个边界框包含 5 个预测值: x 、 y 、 w 、 h x、y、w、h x、y、w、h 和置信度。其中, ( x , y ) (x, y) (x,y) 坐标表示边界框中心相对于网格单元边界的相对位置。宽度和高度则是相对于整个图像进行预测的。最后,置信度预测表示预测边界框与任何真实边界框之间的交并比 ( I O U ) (IOU) (IOU)。

每个网格单元还会预测 C C C 个条件类别概率, P r ( C l a s s i ∣ O b j e c t ) Pr(Classi|Object) Pr(Classi∣Object)。这些概率是在网格单元包含物体的条件下计算的。无论边界框的数量 B B B 是多少,我们每个网格单元只预测一组类别概率。

在测试时,我们将条件类别概率与各个边界框的置信度预测值相乘。

这为我们提供了每个边界框的类别特定的置信度分数。这些分数既编码了该类别出现在边界框内的概率,也反映了预测的边界框与物体的契合程度。

在 PASCAL VOC 数据集上评估 Y O L O YOLO YOLO 时,我们使用 S = 7 S = 7 S=7, B = 2 B = 2 B=2。PASCAL VOC 包含 20 个标记的类别,因此 C = 20 C = 20 C=20。我们的最终预测是一个 7 × 7 × 30 7 \times 7 \times 30 7×7×30 的张量。

注解

(1)在训练时,数据集中会有对应的坐标点,所以能够确定当前物体所属哪个网格,而每个网格对应的边界框大小似乎没有具体说明,应该是在训练过程之中逐步学习的

2.1 网络设计

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

我们的网络架构受到 GoogLeNet 图像分类模型[33]的启发。我们的网络包含 24 层卷积层,后面接着 2 层全连接层。与 GoogLeNet 使用的 Inception 模块不同,我们简单地使用了 1×1 的降维层,后面跟着 3×3 的卷积层,类似于 Lin 等人的方法[22]。完整的网络结构如图 3 所示。

我们还训练了一个快速版本的 YOLO,旨在突破快速目标检测的极限。快速 YOLO 使用的神经网络包含更少的卷积层(9 层而不是 24 层),并且这些层中的过滤器数量也更少。除了网络的大小之外,YOLO 和快速 YOLO 在训练和测试中的所有参数都保持一致。

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

2.2 训练

我们在 ImageNet 1000 类竞赛数据集[29]上对卷积层进行预训练。在预训练中,我们使用图 3 中的前 20 层卷积层,后面跟着一个平均池化层和一个全连接层。我们训练这个网络大约一周时间,在 ImageNet 2012 验证集上单裁剪图像的 top-5 准确率达到了 88%,与 Caffe 模型库[24]中的 GoogLeNet 模型相当。

然后我们将模型转换为执行检测任务。Ren 等人表明,在预训练的网络中添加卷积层和全连接层可以提高性能[28]。我们效仿他们的方法,添加了四层卷积层和两层全连接层,这些层的权重是随机初始化的。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从 224×224 提高到 448×448。

我们的最后一层同时预测类别概率和边界框坐标。我们将边界框的宽度和高度通过图像宽度和高度进行归一化,使其值介于 0 和 1 之间。我们还将边界框的 x 和 y 坐标参数化为特定网格单元位置的偏移量,因此它们的值也被限制在 0 和 1 之间。

我们在最后一层使用线性激活函数,而所有其他层都使用以下的带泄露的修正线性激活函数:

我们在模型的输出中优化均方误差。我们使用均方误差是因为它易于优化,然而它并不完全符合我们最大化平均精度的目标。它将定位误差与分类误差同等对待,这可能并不理想。此外,在每张图像中,许多网格单元并不包含任何物体。这会将这些单元的"置信度"分数推向零,通常会压倒包含物体的单元的梯度。这可能导致模型不稳定,使得训练在早期就发散。

为了解决这个问题,我们增加了边界框坐标预测的损失,同时减少了不包含物体的边界框的置信度预测的损失。我们使用两个参数, λ coord \lambda_{\text{coord}} λcoord 和 λ noobj \lambda_{\text{noobj}} λnoobj 来实现这一点。我们将 λ coord \lambda_{\text{coord}} λcoord 设置为 5, λ noobj \lambda_{\text{noobj}} λnoobj 设置为 0.5。

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

Y O L O YOLO YOLO 每个网格单元会预测多个边界框。在训练时,我们只想让一个边界框预测器对每个物体负责。我们根据哪个预测与真实边界框的当前交并比 ( I O U ) (IOU) (IOU)最高,来指定一个预测器对预测物体"负责"。这会导致边界框预测器之间的分工。每个预测器会更好地预测某些大小、宽高比或类别的物体,从而提高整体的召回率。

在训练过程中,我们优化了以下多部分损失函数:

其中, obj i \text{obj}{i} obji 表示第 i i i 个网格单元是否包含物体,而 obj i j \text{obj}{ij} objij 表示第 i i i 个网格单元中的第 j j j 个边界框预测器是否对该物体的预测"负责"。

请注意,损失函数仅在网格单元中存在物体时才会惩罚分类误差(因此前面提到的条件类别概率)。它也仅在该预测器对真实边界框"负责"时(即在该网格单元的所有预测器中具有最高的 I O U IOU IOU)才会惩罚边界框坐标误差。

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

我们的学习率安排如下:在最初的几个轮次中,我们将学习率从 1 0 − 3 10^{-3} 10−3 缓慢提高到 1 0 − 2 10^{-2} 10−2。如果从高学习率开始,我们的模型通常会因为梯度不稳定而发散。我们继续使用 1 0 − 2 10^{-2} 10−2 训练 75 轮,然后使用 1 0 − 3 10^{-3} 10−3 训练 30 轮,最后使用 1 0 − 4 10^{-4} 10−4 训练 30 轮。

为了避免过拟合,我们使用了 Dropout 和广泛的数据增强技术。在第一个全连接层之后使用了速率为 0.5 的 Dropout 层,以防止层之间的协同适应[18]。对于数据增强,我们引入了最多可达原始图像尺寸 20% 的随机缩放和平移。我们还在 HSV 色彩空间中随机调整图像的曝光度和饱和度,调整因子最高可达 1.5。

注解

YOLO整个网络的前向传播过程

复制代码
# 提取原始特征
InputImg(448x448x3) * Conv_1(7x7x64-s-2)  = feature_1(224x224x64)
# 保留关键特征
feature_1(224x224x64) * MaxPool(2x2-s-2)  = feature_2(112x112x64)

# 提取更多特征,扩展通道数
feature_2(112x112x64) * Conv_2(3x3x192)   = feature_3(112x112x192)
feature_3(112x112x192) * MaxPool(2x2-s-2) = feature_4(56x56x192)

# 降维,通道交互
feature_4(56x56x192) * Conv_3(1x1x128) = feature_5(56x56x128)
# 空间特征提取,扩展通道数
feature_5(56x56x128) * Conv_4(3x3x256) = feature_6(56x56x256)
# 维持通道数,增强非线性
feature_7(56x56x256) * Conv_5(1x1x256) = feature_7(56x56x256) 
# 捕获高级语义,提升模型容量
feature_8(56x56x256) * Conv_6(3x3x512)   = feature_8(56x56x512) 
feature_8(56x56x512)  * MaxPool(2x2-s-2) = feature_9(28x28x512)

# 4次 {1x1x256, 3x3x512} 操作
feature_9(28x28x512) * Conv_7(4 * {1x1x256, 3x3x512}) = feature_10(28x28x512)
# 1次 {1x1x512, 3x3x1024} 操作
feature_10(28x28x512) * Conv_8({1x1x512, 3x3x1024})   = feature_11(28x28x1024)
# 1次池化
feature_11(28x28x1024) * MaxPool(2x2-s-2) = feature_12(14x14x1024)

# 2次 {1x1x512, 3x3x1024}
feature_12(14x14x1024) * Conv_9(2 * {1x1x512, 3x3x1024})     = feature_13(14x14x1024)
feature_13(14x14x1024) * Conv_10({3x3x1024}, {3x3x1024-s-2}) = feature_14(7x7x1024)

# 2次 {3x3x1024}
feature_15(7x7x1024) * Conv_11(2* {3x3x1024}) = feature_16(7x7x1024)

# 2个全连接层
feature_16(7x7x1024) * full connect layer = feature_17(4096)
feature_17(4096) * full connect layer     = Output(7x7x30)

(1)网络输入的第1层,使用的卷积层为7x7x64-s-2,表明卷积核大小为7x7,有64个通道,步长(stride)=2,对于7x7卷积核,填充(padding)通常为3。如果输入图像为448x448x3,卷积之后的输出为224x224x64。这里使用的64个通道,指的是使用了64个卷积核,对一张图像进行了滤波,存储在输出的"64"里面,每个卷积核都不同,因此提取的特征也不会相同。卷积核的初始值是随机的,但是随着训练的不断迭代,卷积核会逐渐调整,最终取得最佳的参数

(2)对于整个网络而言,低层级(前面的卷积核)卷积输出的是图像的纹理信息,例如汽车轮廓等,高层级(接近输出的卷积核)卷积输出的是图像的类别

(3)第2层是池化层 maxpool 2x2-s-2,卷积核为2x2,对前一层输出的每2x2小块,取其中的最大值,保留其中的关键特征,同时也降低分辨率,减小计算量

(4)第3层是3x3x192,这里没有给出步长,应该是1,对于3x3卷积核,填充通常为1。这里将通道数扩充至192,是为了捕捉更多的信息,但图像分辨率不变,避免信息丢失

(5)第4层池化层 maxpool 2x2-s-2,保留关键特征

(6)第5层到第9层,进行4次卷积和1次池化。先进行1x1x128的卷积,这里的计算方式是,将56x56图像乘以1x1的卷积核,获得特征图,因为一共有192个通道,所以得到192张特征图,随后将这192个特征图按照权重系数和偏置项,进行合并成为一个特征图;因为一共有128个卷积核,所以输出128个特征图,输出的维度就是56x56x128。将192个通道缩减成为128个通道,主要的好处是将多个通道信息融合起来。随后进行3次卷积和1次池化,卷积操作输出的通道数依次增加,最大为512,主要好处是空间特征提取,捕获高级语义,池化操作进行了下采样,保留了高级语义

(7)进行4次 {1×1×256,3×3×512} 操作,目的是深度特征提取和参数效率优化,进行4次操作应该是考虑到模型的参数量和任务的复杂程度决定的,如果任务简单或要求更快速度,可以减少层数,如果任务要求精度更高,需要增加层数。同时,具体应用时也要考虑硬件资源

(8)后续进行了反复的特征提取和参数效率优化,维度上升到了1024,7x7x1024

(9)经过2个全连接层,第1个全连接层,将7x7x1024转换为4096,计算方式为,先将7x7x1024展开,得到7x7x1024 = 50176,这是一个1维矩阵(50176x1),随后与系数矩阵(4096x50176)相乘,得到4096x1的矩阵。第2个全连接层,系数矩阵为1470x4096,与4096x1矩阵相乘,得到1470x1的输出,再进行reshape得到7x7x30。最终输出的7x7x30的含义是,一张图像划分为7x7个网格区域,每个网格区域有30个通道值,前10个数值表示边界框box1[x, y, w, h, confidence],box2[x, y, w,h confidence],后20个数值表示各个类的概率,概率最高的那个类别被认为是这个区域所描述的类别,例如 "狗" 这个类别的概率最高,这个区域就被认为是狗。输出为20个类别,是因为PASCAL VOC的类别是20个类别,如果更换数据集,可能需要重新修改网络

(10)进入全连接层之前,数据维度是7x7x1024,即1024维度,VGG16使用的是512维度,可能是认为1024更能适应复杂场景,所以增加了一倍,也有可能是进行了消融实验确立了1024个维度比较合适

(11)7x7x1024中的1024维度没有具体的实际意义,但是转换到最终输出的7x7x30是有具体意义的,这是由损失函数约束的,通过损失函数强制对齐真实标签,即将输出的7x7x30中的30纳入到损失函数中计算

(12)在前向传播完成一次之后,会根据损失函数的公式来计算当前参数对应的损失值,然后反向传播计算梯度:

假设损失函数为
L = 1 3 [ ( a p r e d − a t r u e ) 2 + ( b p r e d − b t r u e ) 2 + ( c p r e d − c t r u e ) 2 ] \begin{align} L = \frac{1}{3}[(a_{pred}- a_{true})^2 + (b_{pred}- b_{true})^2 + (c_{pred}- c_{true})^2] \end{align} L=31[(apred−atrue)2+(bpred−btrue)2+(cpred−ctrue)2]

对每个预测值的偏导数为
∂ L ∂ a p r e d = 2 3 ( a p r e d − a t r u e ) ∂ L ∂ b p r e d = 2 3 ( b p r e d − b t r u e ) ∂ L ∂ c p r e d = 2 3 ( c p r e d − c t r u e ) \begin{align} \frac{\partial{L}}{\partial a_{pred}} = \frac{2}{3}(a_{pred} - a_{true}) \\ \frac{\partial{L}}{\partial b_{pred}} = \frac{2}{3}(b_{pred} - b_{true}) \\ \frac{\partial{L}}{\partial c_{pred}} = \frac{2}{3}(c_{pred} - c_{true}) \end{align} ∂apred∂L=32(apred−atrue)∂bpred∂L=32(bpred−btrue)∂cpred∂L=32(cpred−ctrue)

可以合并为梯度向量
∇ y p r e d L = [ ∂ L ∂ a p r e d , ∂ L ∂ b p r e d , ∂ L ∂ c p r e d ] \begin{align} \nabla_{y_{pred}} L = [\frac{\partial{L}}{\partial a_{pred}}, \frac{\partial{L}}{\partial b_{pred}}, \frac{\partial{L}}{\partial c_{pred}}] \end{align} ∇ypredL=[∂apred∂L,∂bpred∂L,∂cpred∂L]

假设输出层为全连接层,没有激活函数,权重矩阵为 W o u t W_{out} Wout,偏置项为 b o u t b_{out} bout,全连接层前一层的输出为 h h h,有
y p r e d = [ a p r e d , b p r e d , c p r e d ] y p r e d = W o u t ∗ h + b o u t \begin{align} y_{pred} = [a_{pred}, b_{pred}, c_{pred}] \\ y_{pred}=W_{out} * h+b_{out} \end{align} ypred=[apred,bpred,cpred]ypred=Wout∗h+bout

权重梯度和偏置项梯度分别为
∂ L ∂ W o u t = ∇ y p r e d L ∗ h T ∂ L ∂ b o u t = ∇ y p r e d L \begin{align} \frac{\partial{L}}{\partial W_{out}} &= \nabla_{y_{pred}} L * h^{T} \\ \frac{\partial{L}}{\partial b_{out}} &= \nabla_{y_{pred}} L \end{align} ∂Wout∂L∂bout∂L=∇ypredL∗hT=∇ypredL

再向前一层进行传播,以此类推,在进行了一次前向传播之后,获得了 a p r e d , b p r e d , c p r e d a_{pred}, b_{pred}, c_{pred} apred,bpred,cpred,就可以计算当前参数对应的梯度了
∇ h L = W o u t T ∗ ∇ y p r e d L \begin{align} \nabla_{h} L = W_{out}^{T} * \nabla_{y_{pred}} L \end{align} ∇hL=WoutT∗∇ypredL

(13)参数的更新依赖于前面计算的梯度和学习率 η \eta η

假设当前参数的梯度为 ∂ L ∂ θ \frac{\partial L}{\partial \theta} ∂θ∂L,更新之后的参数为
θ n e w = θ o l d − η ∗ ∂ L ∂ θ \theta_{new} = \theta_{old} - \eta * \frac{\partial L}{\partial \theta} θnew=θold−η∗∂θ∂L

因此,在训练初期可以使用较大学习率,实现快速收敛,训练后期可以降低学习率,避免出现较大调整参数的误差(越过了最佳值)

2.3 推理

与训练时一样,对测试图像进行检测预测仅需要一次网络评估。在 PASCAL VOC 上,网络每张图像预测 98 个边界框以及每个边界框的类别概率。YOLO 在测试时极其快速,因为它只需要进行一次网络评估,这与基于分类器的方法不同。

网格设计强制了边界框预测的空间多样性。通常情况下,一个物体落入哪个网格单元是显而易见的,网络只为每个物体预测一个边界框。然而,一些大物体或靠近多个单元边界的物体可以通过多个单元很好地定位。可以使用非极大值抑制来解决这些多重检测问题。尽管对于 R-CNN 或 DPM 来说非极大值抑制对性能至关重要,但对于 Y O L O YOLO YOLO 来说并非如此,但它可以提高 2-3% 的平均精度均值(mAP)。

2.4 YOLO模型的局限

Y O L O YOLO YOLO 对边界框预测施加了很强的空间约束,因为每个网格单元只预测两个边界框,并且只能有一个类别。这种空间约束限制了我们的模型能够预测的附近物体的数量。我们的模型在处理成群出现的小物体(例如一群鸟)时会遇到困难。

由于我们的模型从数据中学习预测边界框,因此它在泛化到具有新或不寻常的宽高比或配置的物体时会遇到困难。我们的模型在预测边界框时也使用了相对粗糙的特征,因为我们的架构中有多个从输入图像下采样的层。

最后,尽管我们在一个近似检测性能的损失函数上进行训练,但我们的损失函数在小边界框和大边界框中对误差同等对待。在大边界框中的小误差通常是无害的,但在小边界框中的小误差对 IOU 的影响要大得多。

我们的主要误差来源是定位不准确。

3.与其他检测系统的对比

目标检测是计算机视觉中的一个核心问题。检测流程通常首先从输入图像中提取一组鲁棒的特征(Haar[25]、SIFT[23]、HOG[4]、卷积特征[6])。然后,使用分类器[35, 21, 13, 10]或定位器[1, 31]在特征空间中识别物体。这些分类器或定位器要么以滑动窗口的方式在整个图像上运行,要么在图像的某些子区域上运行[34, 15, 38]。

我们将 YOLO 检测系统与几个顶级检测框架进行了比较,突出了关键的相似之处和差异。

可变形部件模型(DPM)采用滑动窗口方法进行目标检测[10]。DPM 使用一个分离的流程来提取静态特征、分类区域、预测高分区域的边界框等。我们的系统用一个单一的卷积神经网络替换了所有这些分散的部分。该网络同时执行特征提取、边界框预测、非极大值抑制和上下文推理。与静态特征不同,网络在线训练特征,并针对检测任务对它们进行优化。我们的统一架构使得模型比 DPM 更快速、更准确。

R-CNN(区域卷积神经网络)及其变体使用区域建议而不是滑动窗口来在图像中寻找物体。Selective Search(选择性搜索)[34] 生成潜在的边界框,卷积网络提取特征,支持向量机(SVM)对边界框进行评分,线性模型调整边界框,非极大值抑制(Non-Max Suppression)消除重复检测。这个复杂流程的每个阶段都必须独立地精确调整,最终得到的系统非常慢,在测试时每张图像需要超过 40 秒[14]。

YOLO 与 R-CNN 有一些相似之处。每个网格单元都会提出潜在的边界框,并使用卷积特征对这些边界框进行评分。然而,我们的系统对网格单元的提议施加了空间约束,这有助于减少对同一物体的多次检测。我们的系统提出的边界框数量也远远少于选择性搜索(Selective Search),每张图像仅提出 98 个边界框,而选择性搜索则会提出约 2000 个。最后,我们的系统将这些单独的组件整合成一个单一的、联合优化的模型。

其他快速检测器:Fast R-CNN 和 Faster R-CNN 专注于通过共享计算和使用神经网络来提出区域(而不是选择性搜索)来加快 R-CNN 框架的速度[14][27]。尽管它们在速度和准确性上优于 R-CNN,但两者仍未达到实时性能。

许多研究工作都集中在加快 DPM 流程的速度[30][37][5]。它们加快了 HOG(方向梯度直方图)的计算速度,使用级联,并将计算推向 GPU。然而,只有 30Hz DPM[30] 能够真正实现实时运行。

Y O L O YOLO YOLO 并非试图优化一个大型检测流程中的各个单独组件,而是完全抛弃了整个流程,其设计本身就具备快速性。

针对单一类别(如人脸或人体)的检测器可以通过处理更少的变化来实现高度优化[36]。YOLO 是一个通用检测器,能够同时学习检测多种物体。

Deep MultiBox:与 R-CNN 不同,Szegedy 等人训练了一个卷积神经网络来预测感兴趣区域[8],而不是使用选择性搜索。MultiBox 也可以通过将置信度预测替换为单一类别预测来执行单目标检测。然而,MultiBox 无法执行通用目标检测,它仍然是一个更大检测流程中的一个环节,需要进一步对图像块进行分类。YOLO 和 MultiBox 都使用卷积网络来预测图像中的边界框,但 YOLO 是一个完整的检测系统。

OverFeat:Sermanet 等人训练了一个卷积神经网络来执行定位,并将该定位器改编为执行检测[31]。OverFeat 高效地执行滑动窗口检测,但它仍然是一个分离的系统。OverFeat 优化的是定位性能,而不是检测性能。像 DPM 一样,定位器在进行预测时只能看到局部信息。OverFeat 无法对全局上下文进行推理,因此需要大量的后处理才能产生连贯的检测结果。

MultiGrasp。我们的工作在设计上与 Redmon 等人[26]关于抓取检测的工作类似。我们对边界框预测的网格化方法基于 MultiGrasp 系统对抓取的回归。然而,抓取检测比目标检测要简单得多。MultiGrasp 只需要为包含一个物体的图像预测一个可抓取区域。它不需要估计物体的大小、位置或边界,也不需要预测其类别,只需要找到一个适合抓取的区域。而 YOLO 能够预测图像中多个类别、多个物体的边界框和类别概率。

4.实验

首先,我们在 PASCAL VOC 2007 数据集上将 YOLO 与其他实时检测系统进行比较。为了理解 YOLO 和 R-CNN 变体之间的差异,我们分析了 YOLO 和 Fast R-CNN(R-CNN 的一种表现最佳的版本[14])在 VOC 2007 上的错误。基于不同的错误分布,我们展示了 YOLO 可以用于重新评估 Fast R-CNN 的检测结果,并减少背景误检的错误,从而显著提升性能。我们还展示了 VOC 2012 的结果,并与当前最先进的方法比较了平均精度均值(mAP)。最后,我们在两个艺术作品数据集上展示了 YOLO 比其他检测器更好地泛化到新领域的能力。

4.1 与其他实时系统的对比

在目标检测领域,许多研究工作都集中在加快标准检测流程的速度上。[5][37][30][14][17][27] 然而,只有 Sadeghi 等人真正开发出了一个能够实现实时运行(每秒30帧或更高)的检测系统[30]。我们将 YOLO 与他们实现的 DPM 的 GPU 版本进行了比较,该版本的运行速度可以达到 30Hz 或 100Hz。

尽管其他努力未能达到实时性的里程碑,我们还是比较了它们的相对 mAP(平均精度均值)和速度,以考察目标检测系统中可用的精度与性能之间的权衡。

Fast YOLO 是 PASCAL 上最快的检测方法;据我们所知,它是现存最快的检测器。其 mAP(平均精度均值)为 52.7%,比以往实时检测的研究成果准确率高出一倍以上。YOLO 在保持实时性能的同时,将 mAP 推高至 63.4%。

我们还使用 VGG-16 训练了 YOLO。这一模型的准确率更高,但速度也明显慢于 YOLO。它对于与其他依赖 VGG-16 的检测系统进行比较是有用的,但由于其速度低于实时性,本文其余部分将专注于我们更快的模型。

最快的 DPM(可变形部件模型)在不牺牲太多 mAP 的情况下有效加快了 DPM 的速度,但其速度仍比实时性能慢了两倍[37]。此外,它还受到 DPM 在检测精度上相对较低的限制,与基于神经网络的方法相比,DPM 的检测精度较低。

R-CNN 减去 R 用静态边界框提议取代了选择性搜索[20]。虽然它的速度比 R-CNN 快得多,但由于缺乏良好的提议,它仍然达不到实时性,并且在准确性上受到了显著的打击。

Fast R-CNN 加快了 R-CNN 的分类阶段,但它仍然依赖于选择性搜索,而选择性搜索每张图像生成边界框提议可能需要大约 2 秒。因此,尽管它具有较高的 mAP(平均精度均值),但以每秒 0.5 帧的速度,它仍然远远达不到实时性。

最近的 Faster R-CNN 用神经网络取代了选择性搜索来提出边界框,这与 Szegedy 等人的方法类似[8]。在我们的测试中,他们最准确的模型达到了每秒 7 帧,而一个更小、准确度稍低的模型则以每秒 18 帧的速度运行。Faster R-CNN 的 VGG-16 版本比 YOLO 高出 10 个百分点的 mAP,但速度也比 YOLO 慢了 6 倍。Zeiler-Fergus 版本的 Faster R-CNN 只比 YOLO 慢 2.5 倍,但准确度也较低。

4.2 VOC 2007误差分析

为了进一步探讨 YOLO 与最先进的检测器之间的差异,我们对 VOC 2007 上的结果进行了详细的分析。我们将 YOLO 与 Fast R-CNN 进行比较,因为 Fast R-CNN 是 PASCAL 上表现最佳的检测器之一,且其检测结果是公开可用的。

我们采用了 Hoiem 等人[19]的方法和工具。在测试时,对于每个类别,我们查看该类别的前 N 个预测结果。每个预测结果要么是正确的,要么会根据错误的类型进行分类:

图 4 展示了每种错误类型在所有 20 个类别中的平均分布情况。

YOLO 在精确定位物体方面存在困难。定位错误占 YOLO 错误总数的比例超过了所有其他错误来源的总和。相比之下,Fast R-CNN 的定位错误要少得多,但背景误检错误却多得多。其最高置信度的检测中有 13.6% 是不包含任何物体的误检。Fast R-CNN 预测背景误检的可能性几乎是 YOLO 的 3 倍。

4.3 Fast R-CNN和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 结合。这些集成模型仅产生了 0.3% 到 0.6% 的小幅度 mAP 提升,具体细节见表 2。

YOLO 带来的提升并不是模型集成的简单副产品,因为结合不同版本的 Fast R-CNN 几乎没有好处。相反,正是因为 YOLO 在测试时犯了不同类型的错误,它才如此有效地提升了 Fast R-CNN 的性能。

不幸的是,这种组合并没有从 YOLO 的速度中受益,因为我们分别运行每个模型,然后结合结果。然而,由于 YOLO 非常快,与 Fast R-CNN 相比,它并没有增加任何显著的计算时间。

4.4 VOC 2012结果

在 VOC 2012 测试集上,YOLO 的平均精度均值(mAP)为 57.9%。这一成绩低于当前的最高水平,更接近于使用 VGG-16 的原始 R-CNN,具体见表 3。与最接近的竞争对手相比,我们的系统在处理小物体时表现欠佳。在诸如瓶子、羊和电视/显示器等类别上,YOLO 的得分比 R-CNN 或特征编辑低 8-10%。然而,在其他类别(如猫和火车)上,YOLO 的表现更为出色。

我们结合 Fast R-CNN 和 YOLO 的模型是表现最佳的检测方法之一。Fast R-CNN 通过与 YOLO 的结合获得了 2.3% 的性能提升,在公开排行榜上跃升了 5 个名次。

4.5 泛化能力:艺术作品中的人物检测

目标检测的学术数据集通常从同一分布中抽取训练数据和测试数据。在现实世界的应用中,很难预测所有可能的用例,测试数据可能会与系统之前见过的数据有所不同[3]。我们在两个用于测试艺术作品中人物检测的数据集------毕加索数据集[12]和人物艺术数据集[3]上,将 YOLO 与其他检测系统进行了比较。

图 5 展示了 YOLO 与其他检测方法之间的比较性能。作为参考,我们给出了在 VOC 2007 数据集上仅使用 VOC 2007 数据训练的人物检测平均精度(AP)。在毕加索数据集上,模型是使用 VOC 2012 数据进行训练的,而在人物艺术数据集上,模型是使用 VOC 2010 数据进行训练的。

R-CNN 在 VOC 2007 上具有较高的平均精度(AP),但在应用于艺术作品时,其性能显著下降。R-CNN 使用选择性搜索(Selective Search)来生成边界框提议,而选择性搜索是针对自然图像调整的。R-CNN 中的分类器步骤仅查看小区域,并且需要良好的提议。

DPM(可变形部件模型)在应用于艺术作品时能够很好地保持其平均精度(AP)。先前的研究认为,DPM 表现良好是因为它对物体的形状和布局有很强的空间模型。尽管 DPM 的性能下降幅度没有 R-CNN 那么大,但它从较低的 AP 开始。

YOLO 在 VOC 2007 上表现出色,并且在应用于艺术作品时,其平均精度(AP)的下降幅度小于其他方法。与 DPM 一样,YOLO 建模了物体的大小和形状,以及物体之间的关系和物体通常出现的位置。艺术作品和自然图像在像素级别上非常不同,但在物体的大小和形状方面却有相似之处,因此 YOLO 仍然可以预测出良好的边界框和检测结果。

5.野外的实时目标检测

YOLO 是一种快速且准确的目标检测器,使其非常适合计算机视觉应用。我们将 YOLO 连接到网络摄像头,并验证了它能够保持实时性能,包括从摄像头获取图像和显示检测结果的时间。

最终的系统具有交互性和吸引力。尽管 YOLO 是逐帧处理图像的,但当连接到网络摄像头时,它就像一个跟踪系统,能够检测到物体的移动和外观变化。该系统的演示视频和源代码可以在我们的项目网站上找到:YOLO: Real-Time Object Detection

6.结论

我们提出了YOLO,这是一个用于目标检测的统一模型。我们的模型构建简单,并且可以直接在完整图像上进行训练。与基于分类器的方法不同,YOLO是在一个直接与检测性能相对应的损失函数上进行训练的,并且整个模型是联合训练的。

Fast YOLO 是文献中最快的通用目标检测器,而 YOLO 则将实时目标检测技术推向了新的高度。此外,YOLO 还能够很好地泛化到新的领域,使其非常适合依赖快速、稳健目标检测的应用场景。

相关推荐
訾博ZiBo10 分钟前
AI日报 - 2025年3月23日
人工智能
大腾智能40 分钟前
大腾智能受邀出席2025华为云城市峰会暨东莞市人工智能大模型中心开服活动
人工智能·中小企业数字化·工业软件·工业数字化
白雪讲堂42 分钟前
GEO与AISEO全面解析
人工智能
大数据追光猿1 小时前
【大模型面试知识】基础问题分析&总结
数据库·人工智能·深度学习·语言模型·ai编程
噔噔噔噔@1 小时前
举例说明自然语言处理(NLP)技术
人工智能·自然语言处理
HABuo1 小时前
【YOLOv8】YOLOv8改进系列(9)----替换主干网络之RepViT
人工智能·深度学习·yolo·目标检测·计算机视觉
Blossom.1181 小时前
区块链技术在供应链管理中的应用与创新
人工智能·阿里云·区块链·人机交互·智能合约·数据可视化·信任链
豆芽8192 小时前
深度学习与计算机视觉方向
人工智能·python·深度学习·opencv·机器学习·计算机视觉
IT古董2 小时前
【漫话机器学习系列】152.ReLU激活函数(ReLU Activation Function)
人工智能·深度学习·机器学习
挣扎与觉醒中的技术人2 小时前
【硬核实战】ETCD+AI智能调度深度整合!从架构设计到调优避坑,手把手教你打造高可用调度系统!
大数据·人工智能·etcd