《You Only Look Once: Unified, Real-Time Object Detection》论文翻译

You Only Look Once: Unified, Real-Time Object Detection
Joseph Redmon∗, Santosh Divvala∗†, Ross Girshick¶, Ali Farhadi∗† University of Washington∗, Allen Institute for AI†, Facebook AI Research¶
http://pjreddie.com/yolo/

摘要

Y O L O YOLO YOLO (You Only Look Once)是一种新的目标检测方法,区别于传统的目标检测方法,后者通常将分类器用于检测任务。 Y O L O YOLO YOLO将目标检测视为回归问题,直接从图像中预测边界框和类别概率,而不是将其拆分为多个阶段。通过单一的神经网络, Y O L O YOLO YOLO能够一次性处理完整图像,直接输出边界框和类别预测。这使得整个检测过程能够通过端到端的优化,提高检测性能。

Y O L O YOLO YOLO的架构非常高效,基础版本的 Y O L O YOLO YOLO能够实时处理每秒 45 45 45帧图像。而更小版本的 F a s t   Y O L O Fast\ YOLO Fast YOLO则在每秒处理 155 155 155帧的同时,仍然能达到其他实时检测器两倍的平均精度 ( m A P ) (mAP) (mAP)。虽然 Y O L O YOLO YOLO在定位精度上略有欠缺,但相较于其他检测系统,它减少了背景假阳性预测。最后, Y O L O YOLO YOLO能够学习到非常通用的目标表示,因此在不同领域之间(例如从自然图像到艺术作品)迁移时表现更好,超越了其他方法如 D P M DPM DPM R − C N N R-CNN RCNN

1. 介绍

人类通过一眼就能迅速识别图像中的物体、物体的位置以及它们之间的关系。人类视觉系统既快速又精准,使得我们能够在几乎无需刻意思考的情况下完成复杂任务,比如驾驶。快速且准确的目标检测算法可以让计算机在没有专用传感器的情况下实现自动驾驶,帮助辅助设备实时传递场景信息给人类用户,并为通用、响应式机器人系统的开发提供可能。

目前的目标检测系统通常通过重新利用分类器来进行目标检测。这些系统会使用特定物体的分类器,并在测试图像的不同位置和尺度上进行评估。像可变形部件模型 ( D P M ) (DPM) (DPM)这样的传统方法采用滑动窗口技术,在整个图像上均匀地运行分类器[10]。而像 R − C N N R-CNN RCNN这样的较新方法则先生成图像中的潜在边界框,然后对这些候选框进行分类。分类之后,系统还需要通过后处理步骤来优化边界框,去除重复的检测结果,并根据图像中的其他物体重新评分边界框[13]。这些复杂的流程既慢又难以优化,因为每个环节都需要单独训练。

我们则将目标检测问题重新定义为一个回归问题,直接从图像像素到边界框坐标和类别概率的映射。通过我们的 Y O L O YOLO YOLO (You Only Look Once)系统,用户只需一次性查看图像,即可预测其中的物体以及它们的位置。

Y O L O YOLO YOLO (You Only Look Once)具有令人耳目一新的简洁性:如图1,它通过一个单一的卷积神经网络,同时预测多个边界框及其类别概率。 Y O L O YOLO YOLO在完整图像上进行训练,并直接优化检测性能。这种统一的模型相较于传统的目标检测方法具有几个明显优势。首先, Y O L O YOLO YOLO非常快速。由于我们将检测问题视为回归问题,因此不需要复杂的流程。只需在测试时将神经网络应用于新的图像,即可直接预测检测结果。在 T i t a n   X   G P U \rm{Titan\ X\ GPU} Titan X GPU上,我们的基础 Y O L O YOLO YOLO网络平均精度 ( m A P ) (mAP) (mAP)是其他实时检测系统的 2 2 2倍以上。有关我们系统在网络摄像头上实时运行的演示,可访问我们的项目网页:http://pjreddie.com/yolo/
在这里插入图片描述
1 1 1 Y O L O YOLO YOLO检测系统。使用 Y O L O YOLO YOLO处理图像非常简单和直接。我们的系统: ( 1 ) (1) (1)将输入图像调整为 448 × 448 448×448 448×448大小, ( 2 ) (2) (2)对图像运行一个单一的卷积神经网络, ( 3 ) (3) (3)根据模型的置信度对生成的检测结果进行阈值处理。

其次, Y O L O YOLO YOLO在做出预测时能全局地分析图像。与滑动窗口和区域提议方法不同, Y O L O YOLO YOLO在训练和测试时能够看到整个图像,因此它能够隐式地编码类别信息及物体的外观。像 F a s t   R − C N N Fast\ R-CNN Fast RCNN这样的顶尖检测方法,因为不能看到整个上下文,常常将背景区域误判为物体,而 Y O L O YOLO YOLO的背景误判比 F a s t   R − C N N Fast\ R-CNN Fast RCNN少了一半。第三, Y O L O YOLO YOLO学习到的是具有良好泛化能力的物体表示。当在自然图像上训练并在艺术作品上测试时, Y O L O YOLO YOLO明显超越了 D P M DPM DPM R − C N N R-CNN RCNN等其他顶尖方法。由于 Y O L O YOLO YOLO的泛化能力强,它在应用到新的领域或处理意外输入时不易出错。

尽管如此, Y O L O YOLO YOLO在精度上仍不及最先进的检测系统。虽然它能够快速识别图像中的物体,但在一些物体(特别是小物体)的精确定位上仍然存在挑战。我们将在实验中进一步探讨这些权衡。

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

2. 统一检测

我们将目标检测的各个独立组件整合为一个单一的神经网络。该网络利用整张图像的特征来预测每个边界框,并同时预测图像中所有类别的所有边界框。这意味着我们的网络能够全局地分析整张图像及其中的所有物体。 Y O L O YOLO YOLO的设计使得端到端的训练成为可能,并且能够以实时速度运行,同时保持较高的平均精度。

在我们的系统中,输入图像被划分为一个 S × S S×S S×S的网格。如果一个物体的中心位于某个网格单元内,则该网格单元负责检测该物体。每个网格单元会预测 B B B个边界框及其对应的置信度分数。这些置信度分数反映了模型对于该边界框包含物体的信心,同时也表示预测框的准确性。我们将置信度定义为: P r ( O b j e c t ) × I O U p r e d t r u t h {\rm{Pr(Object)}} \times {\rm{IOU}}_{{\rm{pred}}}^{{\rm{truth }}} Pr(Object)×IOUpredtruth。如果该网格单元内没有物体,置信度应为0;否则,置信度分数应等于预测框与真实框之间的交并比 ( I O U ) \rm{(IOU)} (IOU)

I O U   ( I n t e r s e c t i o n   o v e r   U n i o n ) \rm{IOU\ (Intersection\ over\ Union)} IOU (Intersection over Union)是物体检测中常用的一个衡量指标,用于评估预测框与真实框之间的重叠程度。它表示预测框与真实框交集面积与它们并集面积的比值。

具体定义如下:

IOU = Intersection Area Union Area \text{IOU} = \frac{\text{Intersection Area}}{\text{Union Area}} IOU=Union AreaIntersection Area

  • Intersection Area(交集面积) 是预测框与真实框重叠的区域的面积。
  • Union Area(并集面积) 是预测框与真实框合并后的总区域面积。

IOU的值范围是 [0, 1],其中:

  • IOU = 1 表示预测框完全与真实框重合。
  • IOU = 0 表示预测框与真实框没有任何重叠。

在物体检测任务中,通常通过设定一个阈值(例如0.5)来判断一个预测是否是正确的。例如,IOU 大于某个阈值的预测框被认为是“正确的检测”,小于该阈值的预测则视为“错误的检测”或“假阳性”。

每个边界框由 5 5 5个预测值组成: x x x y y y w w w h h h c o n f i d e n c e \rm{confidence} confidence(置信度)。坐标 ( x , y ) (x, y) (x,y) 表示框的中心相对于网格单元的位置;宽度和高度是相对于整张图像进行预测的;而置信度表示预测框与任何真实框之间的 IOU \text{IOU} IOU

每个网格单元 ( g r i d c e l l ) \rm{(grid cell)} (gridcell)还预测 C C C个条件类别概率: P r ( C l a s s i ∣ O b j e c t ) {\rm{Pr(Clas}}{{\rm{s}}_i}|{\rm{Object)}} Pr(ClassiObject)。这些概率是基于该网格单元包含物体的条件进行计算的。无论边界框的数量 B B B为多少,每个网格单元只预测一组类别概率。在测试时,我们将条件类别概率与每个框的置信度预测相乘,公式为:

P r ( C l a s s i ∣ O b j e c t ) × P r ( O b j e c t ) × I O U p r e d t r u t h = P r ( C l a s s i ) × I O U p r e d t r u t h {\rm{Pr(Clas}}{{\rm{s}}_i}|{\rm{Object)}} \times {\rm{Pr(Object)}} \times {\rm{IOU}}_{{\rm{pred}}}^{{\rm{truth }}} = {\rm{Pr(Clas}}{{\rm{s}}_i}) \times {\rm{IOU}}_{{\rm{pred}}}^{{\rm{truth }}} Pr(ClassiObject)×Pr(Object)×IOUpredtruth=Pr(Classi)×IOUpredtruth

这样计算得到的结果就是每个边界框提供的特定类别的置信度得分。这些得分不仅表示该类别出现在该边界框中的概率,还反映了预测的边界框与物体的匹配程度。
在这里插入图片描述
2 2 2所用模型。我们的系统将目标检测问题建模为回归问题。它将图像划分为一个 S × S S×S S×S的网格,并为每个网格单元预测 B B B个边界框、对应的置信度以及 C C C个类别概率。这些预测结果被表示为一个 S × S × ( B × 5 + C ) S×S×(B×5+C) S×S×(B×5+C)尺寸的张量

在使用 P A S C A L   V O C \rm{PASCAL\ VOC} PASCAL VOC数据集对 Y O L O YOLO YOLO算法进行评估时,我们使用 S = 7 S=7 S=7 B = 2 B=2 B=2 P A S C A L   V O C \rm{PASCAL\ VOC} PASCAL VOC数据集包含 20 20 20个标注类别,因此 C = 20 C=20 C=20。最终的预测结果是一个 7 × 7 × 30 7×7×30 7×7×30尺寸的张量。

2.1. 网络设计

我们将该模型实现为卷积神经网络,并在 P A S C A L   V O C \rm{PASCAL\ VOC} PASCAL VOC目标检测数据集上进行评估。网络的初始卷积层负责从图像中提取特征,而全连接层则用于预测输出的概率和坐标。

我们的网络架构受到 G o o g L e N e t \rm{GoogLeNet} GoogLeNet图像分类模型的启发。该网络包含 24 24 24个卷积层,之后是 2 2 2个全连接层。与 G o o g L e N e t \rm{GoogLeNet} GoogLeNet使用的 I n c e p t i o n \rm{Inception} Inception模块不同,我们采用 1 × 1 1×1 1×1的降维层,随后接 3 × 3 3×3 3×3的卷积层,这种做法与Lin等人的设计类似。完整的网络架构如图 3 3 3所示。
在这里插入图片描述
3 3 3模型架构。检测网络由 24 24 24个卷积层后接着 2 2 2个全连接层组成。交替使用 1 × 1 1×1 1×1的卷积层来降低前面层的特征空间。首先在 I m a g e N e t \rm{ImageNet} ImageNet分类任务上对卷积层进行预训练,使用 224 × 224 224×224 224×224的输入图像(半分辨率),然后将分辨率加倍用于目标检测。

图解读示例:图 3 3 3中共有 9 9 9个模块组成总体模型架构,除输出模块外,前面 8 8 8个模块代表的层数依次是114106211,最后 2 2 2个模块是全连接层,同块中按照图里面书写的顺序连接。

我们以网络的第一个和第三个模块说明来解读,其中数字表达式字样是描述卷积神经网络 ( C N N ) (CNN) (CNN)中不同层的结构配置,具体来说:

1 1 1模块:

  1. Conv. Layer 7×7×64-s-2

    • Conv. Layer:表示这是一个卷积层 ( C o n v o l u t i o n a l   L a y e r ) \rm{(Convolutional\ Layer)} (Convolutional Layer)
    • 7×7:表示卷积核的大小是 7 × 7 7×7 7×7,也就是卷积操作使用的是 7 × 7 7×7 7×7的窗口。
    • 64:表示卷积层输出的通道数(或过滤器数)。也就是说,该卷积层会输出 64 64 64个不同的特征图 ( f e a t u r e   m a p s ) \rm{(feature\ maps)} (feature maps)
    • s-2:表示步幅 ( s t r i d e ) \rm{(stride)} (stride) 2 2 2。步幅决定了卷积核在输入图像上移动的步伐大小,步幅为 2 2 2表示卷积核每次移动 2 2 2个像素。

    综上所述,这一层的配置是使用 7 × 7 7×7 7×7大小的卷积核进行卷积操作,生成 64 64 64个特征图,并且步幅是 2 2 2

  2. Maxpool Layer 2×2-s-2

    • Maxpool Layer:表示这是一个最大池化层 ( M a x   P o o l i n g   L a y e r ) \rm{(Max\ Pooling\ Layer)} (Max Pooling Layer)
    • 2×2:表示池化窗口的大小是 2 × 2 2×2 2×2。池化操作会在这个 2 × 2 2×2 2×2的区域内取最大值。
    • s-2:表示池化操作的步幅是 2 2 2,意味着池化窗口每次也移动 2 2 2个像素。

    综上所述,这一层的配置是进行 2 × 2 2×2 2×2的最大池化操作,步幅为 2 2 2

3 3 3模块:

  1. Conv. Layer(卷积层):这个卷积层有多个卷积核或称为滤波器(一般而言,每个卷积核用于提取图像中的不同特征)。

    • 1×1×128:表示卷积核大小为 1 × 1 1×1 1×1,深度为 128 128 128,即每个卷积核的输出通道数为 128 128 128
    • 3×3×256:表示卷积核大小为 3 × 3 3×3 3×3,输出通道数为 256 256 256
    • 1×1×256:表示卷积核大小为 1 × 1 1×1 1×1,输出通道数为 256 256 256
    • 3×3×512:表示卷积核大小为 3 × 3 3×3 3×3,输出通道数为 512 512 512

    这些数字描述了每个卷积层的卷积核大小(如 1 × 1 1×1 1×1 3 × 3 3×3 3×3)以及输出通道数。

  2. Maxpool Layer(最大池化层):

    • 2×2-s-2:表示池化窗口的大小为 2 × 2 2×2 2×2,步幅 ( s t r i d e ) \rm{(stride)} (stride) 2 2 2。池化操作通常用于降低空间分辨率。

总结:

  • 卷积层 7 × 7 7×7 7×7大小的卷积核, 64 64 64个输出通道,步幅为 2 2 2
  • 池化层 2 × 2 2×2 2×2的池化窗口,步幅为 2 2 2

这些配置表明网络逐渐减少空间维度(通过步幅和池化)并增加通道数(通过卷积层),这是常见的深度卷积神经网络设计方式。这些层的配置通常描述了卷积神经网络的不同部分的结构,从输入图像经过多个卷积层、池化层,最终提取出特征。每个卷积层的卷积核会学习到不同的特征,池化层则用于降低空间维度并减少计算量。

一个层可能同时使用多个卷积核,这能够帮助卷积神经网络学习到图像中的多种特征和模式,提升网络的表达能力和识别能力。每个卷积核提取不同的特征,而通过将这些特征图组合在一起,网络可以全面地理解输入数据,并用于后续的任务。

**注意:**图 3 3 3 C o n v .   L a y e r \rm{Conv.\ Layer} Conv. Layer块代表单层网络, C o n v .   L a y e r s \rm{Conv.\ Layers} Conv. Layers块代表多层网络。

我们还训练了 Y O L O YOLO YOLO的一个快速版本,旨在提高目标检测的速度。 F a s t   Y O L O Fast\ YOLO Fast YOLO使用一个更小的神经网络,其中卷积层数量减少为 9 9 9层(而不是 24 24 24层),每层的滤波器数量也较少。除了网络的大小, Y O L O YOLO YOLO F a s t   Y O L O Fast\ YOLO Fast YOLO在训练和测试参数方面是相同的。

网络的最终输出是一个用于预测的 7 × 7 × 30 7×7×30 7×7×30尺寸的张量。

2.2. 训练

我们在 I m a g e N e t   1000 \rm{ImageNet\ 1000} ImageNet 1000类竞赛数据集[30]上对卷积层进行预训练。在预训练过程中,我们使用图 3 3 3中的前 20 20 20个卷积层,后接一个平均池化层和一个全连接层。我们对这个网络进行了大约一周的训练,并在 I m a g e N e t   2012 \rm{ImageNet\ 2012} ImageNet 2012验证集上实现了单次裁剪的 T o p − 5 \rm{Top-5} Top5准确率为 88 % 88\% 88%,与 C a f f e \rm{Caffe} Caffe模型库中的 G o o g L e N e t \rm{GoogLeNet} GoogLeNet模型相当[24]。我们使用 D a r k n e t \rm{Darknet} Darknet框架进行所有的训练和推理[26]。

接着,我们将该模型转换为目标检测模型。Ren等人表明,向预训练网络中添加卷积层和全连接层可以提高性能[29]。借鉴他们的方法,我们加入了四个卷积层和两个全连接层,并随机初始化权重。由于目标检测通常需要更精细的视觉信息,因此我们将网络的输入分辨率从 224 × 224 224×224 224×224提高到 448 × 448 448×448 448×448

最终的输出层同时预测类别概率和边界框坐标。我们将边界框的宽度和高度归一化到图像的宽度和高度之间,使其落在 0 0 0 1 1 1之间。我们将边界框的 x x x y y y坐标表示为相对于特定网格单元位置的偏移量,因此它们也被限制在 0 0 0 1 1 1之间。

我们为输出层使用线性激活函数,其他所有层都使用以下的带泄漏的修正线性激活函数:

ϕ ( x ) = { x ,  if  x > 0 0.1 x ,  其它  \phi(x)= \begin{cases}x, & \text { if } x>0 \\ 0.1 x, & \text { 其它 }\end{cases} ϕ(x)={x,0.1x, if x>0 其它 

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

为了解决这个问题,我们增加了对边界框坐标预测的损失,并减少了对那些不包含物体的框的置信度预测损失。为此,我们使用了两个参数 λ c o o r d λ_{coord} λcoord λ n o o b j λ_{noobj} λnoobj。我们将 λ c o o r d λ_{coord} λcoord设置为 5 5 5 λ n o o b j λ_{noobj} λnoobj设置为 0.5 0.5 0.5

平方误差会对大框和小框的误差给予相同的权重,但实际上,我们的误差度量应考虑到在大框中的小偏差比在小框中的小偏差影响更小。为此,我们预测边界框宽度和高度的平方根,而不是直接预测它们。

Y O L O YOLO YOLO会在每个网格单元中预测多个边界框。在训练阶段,我们希望每个物体只由一个边界框预测器负责。为此,我们根据每个预测框与真实框的当前 I O U \rm{IOU} IOU值,选择一个预测器作为“负责”预测该物体的预测器。这种方法促使边界框预测器专注于某些特定的物体大小、长宽比或类别,从而提高了整体的召回率。

在训练过程中,我们优化一个包含多个部分的损失函数:

λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ c o o r d ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j o b j ( C i − C ^ i ) 2 + λ n o o b j ∑ i = 0 S 2 ∑ j = 0 B 1 i j n o o b j ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i j o b j ∑ c ∈ c l a s s e s ( p i ( c ) − p ^ i ( c ) ) 2 {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {\mathbb{1}_{ij}^{obj}\left[ {{{\left( {{x_i} - {{\hat x}_i}} \right)}^2} + {{\left( {{y_i} - {{\hat y}_i}} \right)}^2}} \right]} } \\ {\rm{ }} + {\lambda _{coord}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {\mathbb{1}_{ij}^{obj}\left[ {{{\left( {\sqrt{w_i} - \sqrt{{\hat w}_i}} \right)}^2} + {{\left( {\sqrt{h_i} - \sqrt{{\hat h}_i}} \right)}^2}} \right]} } \\ {\rm{ }}+ \sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {\mathbb{1}_{ij}^{obj}{{\left( {{C_i} - {{\hat C}_i}} \right)}^2}} } \\ {\rm{ }}+ {\lambda _{noobj}}\sum\limits_{i = 0}^{{S^2}} {\sum\limits_{j = 0}^B {\mathbb{1}_{ij}^{noobj}{{\left( {{C_i} - {{\hat C}_i}} \right)}^2}} } \\ {\rm{ }}+ \sum\limits_{i = 0}^{{S^2}} {\mathbb{1}_{ij}^{obj}\sum\limits_{c \in {\rm{classes}}} {{{({p_i}(c) - {{\hat p}_i}(c))}^2}} } λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi w^i )2+(hi h^i )2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21ijobjcclasses(pi(c)p^i(c))2

上述式中, 1 i o b j \mathbb{1}_{i}^{obj} 1iobj 表示在网格单元 i i i中是否存在物体,而 1 i j o b j \mathbb{1}_{ij}^{obj} 1ijobj 表示在网格单元 i i i中的第 j j j个边界框预测器是否“负责”该预测。

Y O L O v 1 YOLOv1 YOLOv1(You Only Look Once)的损失函数是其核心部分之一,它直接决定了模型如何优化以实现目标检测任务(边界框预测和类别分类)。 Y O L O v 1 YOLOv1 YOLOv1的损失函数设计独特,综合了定位损失(localization loss)、置信度损失(confidence loss)和分类损失(classification loss),并通过权衡不同部分的权重来平衡训练过程。以下详细解析 Y O L O v 1 YOLOv1 YOLOv1损失函数的构成、计算方式及其设计意图。

YOLOv1的基本预测机制

在理解损失函数之前,先回顾 Y O L O v 1 YOLOv1 YOLOv1的输出:

  • 输入图像被划分为 ( S × S ) (S \times S) (S×S) 的网格(默认 ( S = 7 ) (S = 7) (S=7),即 ( 7 × 7 ) (7 \times 7) (7×7))。
  • 每个网格单元预测:
  • ( B ) (B) (B) 个边界框(默认 ( B = 2 ) (B = 2) (B=2)),每个边界框包含 5 5 5个值: ( x , y , w , h , C ) (x, y, w, h, C) (x,y,w,h,C)
    • ( x , y ) (x, y) (x,y):边界框中心坐标(相对于网格单元的偏移,归一化到 [ 0 , 1 ] [0, 1] [0,1])。
    • ( w , h ) (w, h) (w,h):边界框宽度和高度(相对于整个图像的归一化值)。
    • C C C:置信度(预测框包含目标的概率 × I o U IoU IoU)。
  • ( C ) (C) (C) 个类别概率(例如 P A S C A L V O C PASCAL VOC PASCALVOC数据集有 20 20 20类)。
  • 输出张量大小: 7 × 7 × ( 2 × 5 + 20 ) = 7 × 7 × 30 7 \times 7 \times (2 \times 5 + 20) = 7 \times 7 \times 30 7×7×(2×5+20)=7×7×30

损失函数的目标是让预测值尽可能接近真实值(ground truth),包括边界框位置、置信度和类别。


YOLOv1损失函数的完整公式

YOLOv1的损失函数由三部分组成:

  1. 定位损失(Localization Loss):衡量边界框坐标和大小的误差。
  2. 置信度损失(Confidence Loss):衡量预测框是否正确包含目标的误差。
  3. 分类损失(Classification Loss):衡量类别预测的误差。

完整损失函数如下(直接引用论文中的公式):
Loss = λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] + ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj ( C i − C ^ i ) 2 + λ noobj ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj ( C i − C ^ i ) 2 + ∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \text{Loss} = \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right] + \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 \right] + \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 + \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2 + \sum_{i=0}^{S^2} \mathbb{1}_i^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 Loss=λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi w^i )2+(hi h^i )2]+i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2+i=0S21iobjcclasses(pi(c)p^i(c))2

  • 符号说明
  • i i i:网格单元索引( 0 0 0 S 2 − 1 S^2 - 1 S21)。
  • j j j:每个网格单元的第 j j j 个边界框( j = 0 , 1 j = 0, 1 j=0,1)。
  • 1 i j obj \mathbb{1}_{ij}^{\text{obj}} 1ijobj:如果第 i i i个网格的第 j j j个边界框负责预测目标(即与真实框 I o U IoU IoU最高),则为 1 1 1,否则为 0 0 0
  • 1 i j noobj \mathbb{1}_{ij}^{\text{noobj}} 1ijnoobj:如果第 i i i个网格的第 j j j个边界框不负责预测目标,则为 1 1 1,否则为 0 0 0
  • 1 i obj \mathbb{1}_i^{\text{obj}} 1iobj:如果第 i i i个网格包含目标,则为 1 1 1,否则为 0 0 0
  • ( x i , y i , w i , h i ) (x_i, y_i, w_i, h_i) (xi,yi,wi,hi):真实边界框的坐标和大小。
  • ( x ^ i , y ^ i , w ^ i , h ^ i ) (\hat{x}_i, \hat{y}_i, \hat{w}_i, \hat{h}_i) (x^i,y^i,w^i,h^i):预测边界框的坐标和大小。
  • C i C_i Ci:真实置信度(通常是 I o U IoU IoU 1 / 0 1/0 1/0)。
  • C ^ i \hat{C}_i C^i:预测置信度。
  • p i ( c ) p_i(c) pi(c):真实类别概率(目标类别为 1 1 1,其他为 0 0 0)。
  • p ^ i ( c ) \hat{p}_i(c) p^i(c):预测类别概率。
  • λ coord = 5 \lambda_{\text{coord}} = 5 λcoord=5:定位损失的权重。
  • λ noobj = 0.5 \lambda_{\text{noobj}} = 0.5 λnoobj=0.5:无目标置信度损失的权重。

损失函数的拆解

1. 定位损失(Localization Loss)

λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 ] + λ coord ∑ i = 0 S 2 ∑ j = 0 B 1 i j obj [ ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 ] \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 \right] + \lambda_{\text{coord}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} \left[ (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 \right] λcoordi=0S2j=0B1ijobj[(xix^i)2+(yiy^i)2]+λcoordi=0S2j=0B1ijobj[(wi w^i )2+(hi h^i )2]

  • 作用:衡量预测边界框与真实边界框在位置和大小上的差异。
  • 细节
  • 坐标误差 ( x i − x ^ i ) 2 + ( y i − y ^ i ) 2 (x_i - \hat{x}_i)^2 + (y_i - \hat{y}_i)^2 (xix^i)2+(yiy^i)2使用平方误差 ( M S E ) (MSE) (MSE),直接计算中心点偏差。
  • 宽高误差 ( w i − w ^ i ) 2 + ( h i − h ^ i ) 2 (\sqrt{w_i} - \sqrt{\hat{w}_i})^2 + (\sqrt{h_i} - \sqrt{\hat{h}_i})^2 (wi w^i )2+(hi h^i )2对宽高取平方根后再计算误差。
    • 原因:直接用 ( w i − w ^ i ) 2 (w_i - \hat{w}_i)^2 (wiw^i)2 会导致大框和小框的误差影响不均。取平方根后,小框的相对误差会被放大,从而平衡大小框的训练。
  • λ coord = 5 \lambda_{\text{coord}} = 5 λcoord=5:定位误差权重较高,因为准确的边界框位置对目标检测至关重要。
  • 1 i j obj \mathbb{1}_{ij}^{\text{obj}} 1ijobj:只对“负责”预测目标的边界框计算损失(每个网格选择与真实框 I o U IoU IoU最高的边界框)。
2. 置信度损失(Confidence Loss)

∑ i = 0 S 2 ∑ j = 0 B 1 i j obj ( C i − C ^ i ) 2 + λ noobj ∑ i = 0 S 2 ∑ j = 0 B 1 i j noobj ( C i − C ^ i ) 2 \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 + \lambda_{\text{noobj}} \sum_{i=0}^{S^2} \sum_{j=0}^{B} \mathbb{1}_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2 i=0S2j=0B1ijobj(CiC^i)2+λnoobji=0S2j=0B1ijnoobj(CiC^i)2

  • 作用:衡量预测框是否正确包含目标。
  • 细节
  • 有目标的情况 1 i j obj ( C i − C ^ i ) 2 \mathbb{1}_{ij}^{\text{obj}} (C_i - \hat{C}_i)^2 1ijobj(CiC^i)2
    • C i = 1 C_i = 1 Ci=1(如果有目标,置信度应为 1 1 1,或 I o U IoU IoU)。
    • 鼓励预测置信度接近 1 1 1
  • 无目标的情况 λ noobj 1 i j noobj ( C i − C ^ i ) 2 \lambda_{\text{noobj}} \mathbb{1}_{ij}^{\text{noobj}} (C_i - \hat{C}_i)^2 λnoobj1ijnoobj(CiC^i)2
    • C i = 0 C_i = 0 Ci=0(无目标时置信度应为 0 0 0)。
    • λ noobj = 0.5 \lambda_{\text{noobj}} = 0.5 λnoobj=0.5:权重较低,因为图像中无目标的网格远多于有目标的网格,降低其对损失的贡献,避免模型偏向预测“无目标”。
  • 两部分分开:区分有目标和无目标的情况,确保置信度预测准确。
3. 分类损失(Classification Loss)

∑ i = 0 S 2 1 i obj ∑ c ∈ classes ( p i ( c ) − p ^ i ( c ) ) 2 \sum_{i=0}^{S^2} \mathbb{1}_i^{\text{obj}} \sum_{c \in \text{classes}} (p_i(c) - \hat{p}_i(c))^2 i=0S21iobjcclasses(pi(c)p^i(c))2

  • 作用:衡量类别预测的准确性。
  • 细节
  • 只对包含目标的网格 ( 1 i obj = 1 ) ( \mathbb{1}_i^{\text{obj}} = 1) (1iobj=1)计算分类损失。
  • p i ( c ) p_{i}(c) pi(c):真实类别概率(目标类别为 1 1 1,其他为 0 0 0)。
  • p ^ i ( c ) \hat{p}_{i}(c) p^i(c):预测类别概率。
  • 使用平方误差,类似于多类分类的 M S E MSE MSE

设计意图与权衡

  1. 多任务优化
  • 损失函数同时优化边界框位置、置信度和类别,体现了 Y O L O v 1 YOLOv1 YOLOv1将检测任务转化为回归问题的思想。
  1. 权重调整
  • ( λ coord = 5 ) (\lambda_{\text{coord}} = 5) (λcoord=5):定位更重要,因为边界框不准会严重影响检测效果。
  • ( λ noobj = 0.5 ) (\lambda_{\text{noobj}} = 0.5) (λnoobj=0.5):无目标网格过多,降低其权重避免模型过分抑制置信度。
  1. 平方根处理宽高
  • 防止大框和小框的误差影响不均,提升小目标检测能力。
  1. 单一网格单类别
  • 分类损失只作用于网格级别,反映了 Y O L O v 1 YOLOv1 YOLOv1每个网格只预测一个类别的设计。

计算示例

假设 ( S = 2 ) (S = 2) (S=2) 2 × 2 2×2 2×2网格), ( B = 1 ) (B = 1) (B=1),有 1 1 1个目标在第 ( 0 , 0 ) (0,0) (0,0)网格:

  • 真实值: ( x , y , w , h ) = ( 0.5 , 0.5 , 0.4 , 0.4 ) (x, y, w, h) = (0.5, 0.5, 0.4, 0.4) (x,y,w,h)=(0.5,0.5,0.4,0.4),类别“狗”,置信度 1 1 1
  • 预测值: ( x ^ , y ^ , w ^ , h ^ ) = ( 0.6 , 0.6 , 0.5 , 0.5 ) (\hat{x}, \hat{y}, \hat{w}, \hat{h}) = (0.6, 0.6, 0.5, 0.5) (x^,y^,w^,h^)=(0.6,0.6,0.5,0.5),置信度 0.9 0.9 0.9,类别“狗”概率 0.8 0.8 0.8
  • 损失:
  • 定位: 5 × [ ( 0.5 − 0.6 ) 2 + ( 0.5 − 0.6 ) 2 ] + 5 × [ ( 0.4 − 0.5 ) 2 + ( 0.4 − 0.5 ) 2 ] 5 \times [(0.5-0.6)^2 + (0.5-0.6)^2] + 5 \times [(\sqrt{0.4}-\sqrt{0.5})^2 + (\sqrt{0.4}-\sqrt{0.5})^2] 5×[(0.50.6)2+(0.50.6)2]+5×[(0.4 0.5 )2+(0.4 0.5 )2]
  • 置信度(有目标): ( 1 − 0.9 ) 2 (1-0.9)^2 (10.9)2;其他网格 0.5 × ( 0 − 预测值 ) 2 0.5 \times (0-预测值)^2 0.5×(0预测值)2
  • 分类: ( 1 − 0.8 ) 2 + ( 0 − 0.2 ) 2 (1-0.8)^2 + (0-0.2)^2 (10.8)2+(00.2)2(假设其他类预测为 0.2 0.2 0.2)。

总结

Y O L O v 1 YOLOv1 YOLOv1的损失函数通过定位、置信度和分类三部分的加权和,平衡了多任务学习的需求。其设计考虑了目标检测的特性(如小目标敏感性、无目标网格过多),通过实验确定了权重和平方根处理。

注意,损失函数仅在网格单元中存在物体时才惩罚分类错误(因此前述的条件类概率)。同样,只有当该预测器“负责”真实框时(即,在该网格单元中具有最高的IOU值),才会惩罚边界框坐标误差。

我们在 P A S C A L   V O C   2007 \rm{PASCAL\ VOC\ 2007} PASCAL VOC 2007 2012 2012 2012的训练和验证数据集上训练网络约 135 135 135 e p o c h \rm{epoch} epoch。在测试 2012 2012 2012数据集时,我们还包括了 V O C   2007 \rm{VOC\ 2007} VOC 2007的测试数据进行训练。在整个训练过程中,我们使用批量大小 64 64 64,动量 0.9 0.9 0.9,衰减 0.0005 0.0005 0.0005

我们的学习率调度如下:在最初的 e p o c h \rm{epoch} epoch中,我们将学习率从 1 0 − 3 10^{-3} 103逐渐提高到 1 0 − 2 10^{-2} 102。如果我们从较高的学习率开始,模型通常会因梯度不稳定而发散。然后,我们继续以 1 0 − 2 10^{-2} 102的学习率训练 75 75 75 e p o c h \rm{epoch} epoch,接着以 1 0 − 3 10^{-3} 103训练 e p o c h \rm{epoch} epoch,最后以 1 0 − 4 10^{-4} 104训练 30 30 30 e p o c h \rm{epoch} epoch

为了避免过拟合,我们使用了 d r o p o u t \rm{dropout} dropout和广泛的数据增强。第一个连接层后使用 d r o p o u t \rm{dropout} dropout层( r a t e = 0.5 rate=0.5 rate=0.5)以防止层之间的共同适应[18]。对于数据增强,我们引入了随机缩放和最大 20 % 20\% 20%的平移。我们还随机调整图像的曝光和饱和度,最高可调整 1.5 1.5 1.5倍,使用 H S V \rm{HSV} HSV色彩空间进行调整。

2.3. 推理

与训练时相同,预测测试图像的检测结果仅需进行一次网络评估。在 P A S C A L   V O C \rm{PASCAL\ VOC} PASCAL VOC数据集上,网络每张图像会预测 98 98 98个边界框,并为每个框预测类别概率。 Y O L O YOLO YOLO在测试时非常快速,因为它只需要进行一次网络评估,避免了像基于分类器的方法那样需要多次计算。

网格设计在边界框预测中强制执行空间多样性。通常,我们能够明确判断物体属于哪个网格单元,这时网络只为每个物体预测一个框。然而,一些大物体或位于多个单元边界附近的物体可能会被多个网格单元准确定位。非最大抑制 ( N M S ) (\rm{NMS}) (NMS)可用于解决这些重复的检测问题。尽管这对性能的提升不像 R − C N N R-CNN RCNN D P M DPM DPM那样至关重要,但非最大抑制仍能提高 23 % 23\% 23% m A P mAP mAP

2.4. YOLO算法的局限性

Y O L O YOLO YOLO对边界框预测施加了较强的空间约束,因为每个网格单元最多预测两个框,并且只能分配一个类别。这种空间限制减少了模型对相邻物体的预测数量。模型在处理小物体聚集在一起时表现较差,例如鸟群。

由于我们的模型是从数据中学习边界框预测的,因此它在处理长宽比或配置不同于训练数据的物体时会遇到困难。我们的模型在预测边界框时使用了较为粗糙的特征,因为架构中存在多个对输入图像的下采样层。

最后,虽然我们使用的损失函数能够近似地反映检测性能,但它对小边界框和大边界框的误差处理是一样的。对于大框,小的误差通常影响较小,而对于小框,小的误差则对 IOU \text{IOU} IOU有更大的影响。误差的主要来源是定位不准确。

3. 与其它检测方法进行比较

目标检测是计算机视觉中的核心任务。检测流程通常从输入图像中提取一组鲁棒的特征(例如Haar特征 [25]、SIFT特征 [23]、HOG特征 [4] 和卷积特征 [6])。接着,使用分类器 [36, 21, 13, 10] 或定位器 [1, 32] 来识别特征空间中的物体。这些分类器或定位器要么通过滑动窗口方法遍历整个图像,要么在图像的特定区域子集上运行 [35, 15, 39]。我们将 Y O L O YOLO YOLO检测系统与其他顶级检测框架进行对比,突出了它们的相似性和差异。

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

R-CNN
Y O L O YOLO YOLO及其变种使用区域提议代替滑动窗口来检测图像中的物体。选择性搜索 [35] 生成潜在的边界框,卷积网络提取特征, S V M \rm{SVM} SVM对框进行打分,线性模型调整边界框,非最大抑制去除重复检测。每一阶段都需要独立地进行精确调整,因此该系统非常缓慢,在测试时每张图像处理需要超过 40 40 40秒 [14]。

Y O L O YOLO YOLO R − C N N R-CNN RCNN有一些相似之处。每个网格单元会提议潜在的边界框,并使用卷积特征为这些框评分。然而,我们的系统对网格单元的提议施加了空间约束,帮助减少对同一物体的多重检测。我们的系统提议的边界框远少于 R − C N N R-CNN RCNN,每张图像只有 98 98 98个边界框,而选择性搜索生成的约 2000 2000 2000个。最重要的是,我们将这些不同的组件结合成一个统一优化的模型。

其他快速检测器
F a s t   R − C N N Fast\ R-CNN Fast RCNN F a s t e r   R − C N N Faster\ R-CNN Faster RCNN 专注于通过共享计算和使用神经网络代替选择性搜索来加速 R − C N N R-CNN RCNN框架 [14][28]。尽管它们比 R − C N N R-CNN RCNN在速度和准确性上有所提升,但两者依然没有达到实时性能。

许多研究工作致力于加速 D P M \rm{DPM} DPM管道 [31][38][5],它们通过加速 H O G \rm{HOG} HOG计算、使用级联方法和将计算推送到 G P U \rm{GPU} GPU来提高速度。然而,只有 30 H z 30\rm{Hz} 30Hz D P M \rm{DPM} DPM [31] 能够在实时条件下运行。

Y O L O YOLO YOLO不同于尝试优化大型检测管道的做法,它完全抛弃了复杂的管道结构,并通过设计实现了快速的检测性能。

像人脸或行人这样的单类检测器可以通过高度优化来处理更少的变化 [37]。 Y O L O YOLO YOLO是一个通用检测器,能够同时学习检测多种不同物体。

Deep MultiBox
R − C N N R-CNN RCNN不同,Szegedy等人训练了一个卷积神经网络来预测兴趣区域 [8],而不是使用选择性搜索。 M u l t i B o x MultiBox MultiBox也可以通过将置信度预测替换为单一类别预测来执行单一物体检测。然而, M u l t i B o x MultiBox MultiBox无法进行通用物体检测,仍然只是一个更大检测管道中的一部分,需要额外的图像块分类。 Y O L O YOLO YOLO M u l t i B o x MultiBox MultiBox都使用卷积网络来预测图像中的边界框,但 Y O L O YOLO YOLO是一个完整的检测系统。

OverFeat
Sermanet等人训练了一个卷积神经网络来进行定位任务,并将该定位器调整为进行检测 [32]。 O v e r F e a t OverFeat OverFeat有效地执行滑动窗口检测,但它仍然是一个分离的系统。 O v e r F e a t OverFeat OverFeat优化的是定位而非检测性能。像 D P M DPM DPM一样,OverFeat的定位器在预测时只能看到局部信息,无法推理全局上下文,因此需要大量的后处理才能生成连贯的检测结果。

MultiGrasp
我们的工作在设计上与Redmon等人的抓取检测工作 [27] 类似。我们采用网格方式进行边界框预测,灵感来源于 M u l t i G r a s p MultiGrasp MultiGrasp系统的回归方法。然而,抓取检测任务要比物体检测简单得多。 M u l t i G r a s p MultiGrasp MultiGrasp只需要为包含一个物体的图像预测一个抓取区域,它无需估算物体的大小、位置或边界,也不需要预测物体的类别,只需找到一个适合抓取的区域。而 Y O L O YOLO YOLO则同时预测图像中多个物体和类别的边界框以及类别概率。

4. 实验

首先,我们在 P A S C A L   V O C   2007 \rm{PASCAL\ VOC\ 2007} PASCAL VOC 2007数据集上将 Y O L O YOLO YOLO与其他实时检测系统进行比较。为了理解 Y O L O YOLO YOLO R − C N N R-CNN RCNN变体之间的差异,我们分析了 Y O L O YOLO YOLO F a s t R − C N N Fast R-CNN FastRCNN R − C N N R-CNN RCNN的高性能版本之一)在 V O C   2007 \rm{VOC\ 2007} VOC 2007上的错误 [14]。通过比较不同的错误类型,我们表明 Y O L O YOLO YOLO能够重新评分 F a s t R − C N N Fast R-CNN FastRCNN的检测结果,并有效减少背景假阳性错误,从而显著提升性能。接着,我们展示了 V O C   2012 \rm{VOC\ 2012} VOC 2012的实验结果,并将 m A P mAP mAP与当前的最先进方法进行了对比。最后,我们证明了 Y O L O YOLO YOLO在两个艺术作品数据集上相较于其他检测器具有更强的领域泛化能力。

4.1 与其它实时检测系统对比

有许多关于目标检测的研究致力于提升标准检测流水线的速度。然而,只有Sadeghi等人真正开发出了一个能够实时运行(每秒 30 30 30帧或更高)的检测系统[31]。我们将 Y O L O YOLO YOLO 与他们实现的 与他们实现的 与他们实现的 G P U \rm{GPU} GPU D P M DPM DPM进行了对比,该系统的运行频率为 30 H z \rm{30Hz} 30Hz 100 H z \rm{100Hz} 100Hz。尽管其他方法未能实现实时性能,我们还是对它们的 m A P mAP mAP和速度进行了比较,以分析目标检测系统在准确性和性能之间的平衡。

F a s t   Y O L O Fast\ YOLO Fast YOLO r m P A S C A L rm{PASCAL} rmPASCAL数据集上最快的目标检测方法;据我们所知,它是目前最快的现有目标检测器。它的 m A P mAP mAP 52.7 % 52.7\% 52.7%,是之前实时检测方法的两倍多。 Y O L O YOLO YOLO m A P mAP mAP提升至 63.4 % 63.4\% 63.4%,同时依然保持实时性能。

我们还使用 V G G − 16 VGG-16 VGG16训练了 Y O L O YOLO YOLO。这个模型更为准确,但速度比 Y O L O YOLO YOLO慢得多。它适合与依赖 V G G − 16 VGG-16 VGG16的其他检测系统进行比较,但由于速度较慢,本文其余部分将集中讨论我们的更快模型。
在这里插入图片描述
1 1 1 P A S C A L   V O C   2007 \rm{PASCAL\ VOC\ 2007} PASCAL VOC 2007上的实时系统。比较了快速检测器的性能和速度。 F a s t Y O L O Fast YOLO FastYOLO P A S C A L   V O C \rm{PASCAL\ VOC} PASCAL VOC检测中记录的最快检测器,其准确度仍是其他任何实时检测器的两倍。 Y O L O YOLO YOLO比快速版本的准确度高 10   m A P 10\ mAP 10 mAP,同时在速度上仍然远超实时要求。

F a s t e d   D P M Fasted\ DPM Fasted DPM有效加速了 D P M DPM DPM的速度,几乎不牺牲 m A P mAP mAP,但它仍未能达到实时标准,速度差距为 2 2 2倍[38]。此外, D P M DPM DPM的检测精度相比神经网络方法较低。

R − C N N   m i n u s   R R-CNN\ minus\ R RCNN minus R用静态边界框提议代替了选择性搜索[20]。虽然它比 R − C N N R-CNN RCNN快得多,但仍未达到实时性能,且由于提议不佳,准确度下降了。

F a s t   R − C N N Fast\ R-CNN Fast RCNN加速了 R − C N N R-CNN RCNN的分类阶段,但仍依赖选择性搜索,这一过程每张图像约需 2 2 2秒来生成边界框提议。因此,尽管它有较高的 m A P mAP mAP,但其速度只有 0.5   f p s 0.5\rm\ fps 0.5 fps,仍无法达到实时要求。

最近的 F a s t e r R − C N N Faster R-CNN FasterRCNN用神经网络替代了选择性搜索来生成边界框,类似于Szegedy等人[8]的方法。在我们的测试中,最准确的模型运行速度为 7   f p s 7\rm \ fps 7 fps,而较小、精度较低的模型能达到 18   f p s 18\rm \ fps 18 fps F a s t e r   R − C N N Faster\ R-CNN Faster RCNN V G G − 16 VGG-16 VGG16版本在 m A P mAP mAP上比 Y O L O YOLO YOLO 10 10 10个(百分)点,但速度却是 Y O L O YOLO YOLO 6 6 6倍慢。ZeilerFergus版的 F a s t e r R − C N N Faster R-CNN FasterRCNN Y O L O YOLO YOLO 2.5 2.5 2.5倍,但准确度较低。

4.2 VOC 2007集上的错误分析

为了深入分析 Y O L O YOLO YOLO与现有顶尖检测器的区别,我们对 V O C   2007 VOC\ 2007 VOC 2007的数据进行了详细分析。我们将 Y O L O YOLO YOLO F a s t   R − C N N Fast\ R-CNN Fast RCNN进行对比,因为 F a s t   R − C N N Fast\ R-CNN Fast RCNN P A S C A L \rm{PASCAL} PASCAL上最具竞争力的检测器之一,而且它的检测结果是公开的。

我们采用Hoiem等人[19]的方法,对每个类别的测试数据进行评估。在测试阶段,我们检查每个类别的前 N N N个预测结果,并根据预测的准确性将其分类为不同类型的错误:

  • 正确:类别正确, I O U \rm{IOU} IOU大于0.5
  • 定位错误:类别正确,但0.1小于 I O U \rm{IOU} IOU小于0.5
  • 相似:类别相似, I O U \rm{IOU} IOU大于0.1
  • 其他:类别错误, I O U \rm{IOU} IOU大于0.1
  • 背景错误 I O U \rm{IOU} IOU小于0.1的所有预测
    在这里插入图片描述
    **图4:Fast R-CNN与YOLO的错误分析:**该图展示了在各类别前 N N N个检测中,定位错误和背景错误的百分比( N N N代表该类别中的物体数量)。

4 4 4展示了平均跨所有 20 20 20个类别的每种错误类型的细分。

从图 4 4 4可以看出, Y O L O YOLO YOLO在物体定位方面存在困难。其定位错误的比例高于其他类型的错误总和。相比之下, F a s t   R − C N N Fast\ R-CNN Fast RCNN的定位错误较少,但背景错误显著更多。 F a s t   R − C N N Fast\ R-CNN Fast RCNN 13.6 % 13.6\% 13.6%的前 N N N个检测结果为错误的正样本,实际上并没有物体。 F a s t   R − C N N Fast\ R-CNN Fast RCNN预测背景的频率几乎是 Y O L O YOLO YOLO 3 3 3倍。

4.3 将Fast R-CNNYOLO结合起来应用

Y O L O YOLO YOLO F a s t   R − C N N Fast\ R-CNN Fast RCNN在背景误报方面明显更少。通过结合 Y O L O YOLO YOLO来去除 F a s t   R − C N N Fast\ R-CNN Fast RCNN中的背景预测,我们获得了显著的性能提升。对于 R − C N N R-CNN RCNN预测的每一个边界框,我们会检查 Y O L O YOLO YOLO是否预测到了一个类似的框。如果有相似的框,我们会根据 Y O L O YOLO YOLO的预测概率以及两个框之间的重叠度来增强该预测的可信度。

V O C   2007 \rm{VOC\ 2007} VOC 2007测试集上,最好的 F a s t   R − C N N Fast\ R-CNN Fast RCNN模型的 m A P mAP mAP 71.8 % 71.8\% 71.8%。当与 Y O L O YOLO YOLO结合时, m A P mAP mAP提高了 3.2 % 3.2\% 3.2%,达到了 75.0 % 75.0\% 75.0%。我们还尝试将顶级的 F a s t   R − C N N Fast\ R-CNN Fast RCNN模型与多个不同版本的 F a s t   R − C N N Fast\ R-CNN Fast RCNN结合,但这些组合仅带来了 0.3 % 0.3\% 0.3% 0.6 % 0.6\% 0.6%的小幅提升,具体数据见表 2 2 2
在这里插入图片描述
**表2:VOC 2007模型组合实验。**我们分析了将不同模型与最佳版本的 F a s t   R − C N N Fast\ R-CNN Fast RCNN组合的效果。其他版本的 F a s t   R − C N N Fast\ R-CNN Fast RCNN几乎没有带来任何提升,而 Y O L O YOLO YOLO则提供了显著的性能提升。

Y O L O YOLO YOLO的提升并不是简单的模型集成效应,因为不同版本的 F a s t   R − C N N Fast\ R-CNN Fast RCNN组合几乎没有带来好处。实际上, Y O L O YOLO YOLO之所以如此有效,是因为它在测试时犯了与 F a s t   R − C N N Fast\ R-CNN Fast RCNN不同类型的错误,这使得它能显著提升 F a s t   R − C N N Fast\ R-CNN Fast RCNN的性能。

虽然这种组合并没有发挥 Y O L O YOLO YOLO的速度优势(因为每个模型是分别运行后再组合结果),但由于 Y O L O YOLO YOLO的速度非常快,因此相比 F a s t   R − C N N Fast\ R-CNN Fast RCNN,它不会显著增加计算时间。

4.4 VOC 2012集上运行的结果

V O C   2012 \rm{VOC\ 2012} VOC 2012测试集上, Y O L O YOLO YOLO的平均精度 ( m A P ) (mAP) (mAP) 57.9 % 57.9\% 57.9%。虽然这一成绩低于当前的最先进技术,但它接近使用 V G G − 16 VGG-16 VGG16的原始 R − C N N R-CNN RCNN(见表 3 3 3)。与其主要竞争对手相比, Y O L O YOLO YOLO在小物体检测上存在一定劣势。在 b o t t l e \rm{bottle} bottle(瓶子)、 s h e e p \rm{sheep} sheep (羊)和 t v / m o n i t o r \rm{tv/monitor} tv/monitor(电视/显示器)等类别中, Y O L O YOLO YOLO的得分比 R − C N N R-CNN RCNN F e a t u r e E d i t Feature Edit FeatureEdit 8 − 10 % 8-10\% 810%。然而,在 c a t \rm{cat} cat(猫)和 t r a i n \rm{train} train(火车)等类别中, Y O L O YOLO YOLO的表现超过了其他方法。

我们的 F a s t   R − C N N Fast\ R-CNN Fast RCNN Y O L O YOLO YOLO的组合模型表现出色。通过与 Y O L O YOLO YOLO结合, F a s t   R − C N N Fast\ R-CNN Fast RCNN的得分提升了 2.3 % 2.3\% 2.3%,使其在公共排行榜上升了 5 5 5个名次。
在这里插入图片描述
表3:PASCAL VOC 2012数据集上的排行榜。 Y O L O YOLO YOLO 2015 2015 2015 11 11 11 6 6 6日的完整 c o m p 4 \rm{comp4} comp4(允许外部数据)公共排行榜进行比较。展示了多种检测方法的平均精度 ( m A P ) (mAP) (mAP)以及每个类别的平均精度。 Y O L O YOLO YOLO是唯一达到实时检测的模型。 F a s t R − C N N   +   Y O L O Fast R-CNN\ +\ YOLO FastRCNN + YOLO组合方法排名第四,比 F a s t   R − C N N Fast\ R-CNN Fast RCNN提升了 2.3 % 2.3\% 2.3%

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

学术数据集中的物体检测任务通常使用相同分布的数据进行训练和测试。但在现实应用中,难以预测所有可能的使用场景,测试数据很可能与系统之前接触过的数据有所不同[3]。我们将 Y O L O YOLO YOLO与其他物体检测系统在 P i c a s s o \rm{Picasso} Picasso数据集[12]和 P e o p l e − A r t \rm{People-Art} PeopleArt数据集[3]上进行对比,这两个数据集专门用于测试艺术作品中的人物检测能力。

5 5 5展示了 Y O L O YOLO YOLO与其他方法的比较结果。在此,我们提供了 V O C   2007 \rm{VOC\ 2007} VOC 2007数据集上人物检测的AP值,所有模型仅使用 V O C   2007 \rm{VOC\ 2007} VOC 2007的数据进行训练。在 P i c a s s o \rm{Picasso} Picasso数据集上,模型使用 V O C   2012 \rm{VOC\ 2012} VOC 2012进行训练,而在 P e o p l e − A r t \rm{People-Art} PeopleArt数据集上,使用的是 V O C   2010 \rm{VOC\ 2010} VOC 2010
在这里插入图片描述
5 5 5:在 P i c a s s o \rm{Picasso} Picasso P e o p l e − A r t \rm{People-Art} PeopleArt数据集上的泛化结果。

R − C N N R-CNN RCNN V O C   2007 \rm{VOC\ 2007} VOC 2007上的 A P AP AP值较高,但在应用于艺术作品时,性能大幅下降。 R − C N N R-CNN RCNN使用选择性搜索来生成边框提议,而这种方法主要针对自然图像进行调优。 R − C N N R-CNN RCNN的分类器只能处理小区域,因此它依赖于高质量的边框提议。

D P M DPM DPM在处理艺术作品时的 A P AP AP表现较为稳定,已有研究认为 D P M DPM DPM能取得较好的效果,因为它具有强大的空间模型,能够捕捉物体的形状和布局。尽管 D P M DPM DPM在艺术作品中的表现没有 R − C N N R-CNN RCNN那么显著下降,但它的初始 A P AP AP值较低。

Y O L O YOLO YOLO V O C   2007 \rm{VOC\ 2007} VOC 2007上的表现良好,并且当应用于艺术作品时,它的 A P AP AP下降幅度比其他方法小。与 D P M DPM DPM类似, Y O L O YOLO YOLO能够建模物体的大小、形状、物体间的关系以及物体常见的出现位置。尽管艺术作品和自然图像在像素级别上差异较大,但它们的物体大小和形状相似,这使得 Y O L O YOLO YOLO能够继续准确地预测边框并进行物体检测。

5. 野外场景实时检测

Y O L O YOLO YOLO是一款既快速又精确的物体检测器,非常适合应用于计算机视觉领域。我们将其连接到网络摄像头,验证了它在获取图像和显示检测结果的过程中仍能保持实时性能。

该系统具有互动性和吸引力。尽管 Y O L O YOLO YOLO是针对单独图像进行处理,但当它连接到摄像头时,便能像一个跟踪系统一样,在物体移动和外观变化时持续检测它们。系统的演示和源代码可以在我们的项目网站上找到:http://pjreddie.com/yolo/
在这里插入图片描述
6 6 6定性结果。展示了 Y O L O YOLO YOLO在一些来自互联网的艺术作品和自然图像上的定性结果。整体上,它大多数情况下是准确的,尽管它错误地将一位人物识别为飞机。

6. 总结

我们介绍了 Y O L O YOLO YOLO,一个统一的目标检测模型。该模型构建简单,且可以直接在完整图像上进行训练。与基于分类器的方法不同, Y O L O YOLO YOLO使用一个直接与检测性能相关的损失函数进行训练,整个模型是联合优化的。

F a s t   Y O L O Fast\ YOLO Fast YOLO是目前文献中最快的通用目标检测器,而 Y O L O YOLO YOLO则推动了实时目标检测的最新进展。 Y O L O YOLO YOLO在新领域的推广能力也很强,因此非常适合那些需要快速且稳健目标检测的应用。

致谢: 本研究得到 O N R   N 00014 − 13 − 1 − 0720 、 N S F I I S − 1338054 \rm{ONR\ N00014-13-1-0720、NSF IIS-1338054} ONR N000141310720NSFIIS1338054以及 A l l e n   D i s t i n g u i s h e d   I n v e s t i g a t o r   A w a r d \rm{Allen\ Distinguished\ Investigator\ Award} Allen Distinguished Investigator Award的资助。

### 关于YOLO V1论文PDF下载 YOLO (You Only Look Once) 是一种实时目标检测算法,其首个版本由 Joseph Redmon 等人在2015年提出[^4]。该论文的全名是 **"You Only Look Once: Unified, Real-Time Object Detection"**,并被提交至 CVPR 2016 大会发表。 要获取 YOLO V1 的 PDF 文件,可以通过以下几种方式: #### 官方资源 - 如果您有访问学术数据库的权利(例如 IEEE Xplore 或 ACM Digital Library),可以直接通过这些平台搜索论文标题 “You Only Look Once: Unified, Real-Time Object Detection”,通常能够找到官方发布的 PDF 版本。 #### 开放存取网站 - 可以尝试在 arXiv 上查找这篇论文。Joseph Redmon 将许多研究工作发布到 arXiv 平台上,因此可以在 https://arxiv.org/ 输入关键词或作者名称进行检索[^5]。 #### 学术搜索引擎 - 利用 Google Scholar (https://scholar.google.com/)输入完整的论文标题或者部分关键字如 "YOLO unified real-time object detection" 进行查询。有时会出现免费链接指向预印本或其他开放源文件。 #### 社区分享站点 - 部分技术爱好者可能会上传高质量扫描件或电子档至 GitHub、ResearchGate 等社交科研网络上供同行学习交流之用,请注意版权规定勿用于商业用途之外的目的。 以下是实现简单的目标检测代码片段作为补充说明: ```python import torch from torchvision import models # 加载预训练模型 model = models.detection.fasterrcnn_resnet50_fpn(pretrained=True) # 设置为评估模式 model.eval() # 假设 img 已经准备好 img_tensor = ... # 转换成 tensor 类型 prediction = model([img_tensor]) print(prediction) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值