将对象检测框架为一个回归问题,回归到空间分隔的边界框和相关的类概率。在一次评估中,单个神经网络直接从完整的图像中预测边界框和类概率。由于整个检测流程是一个单一的网络,可以直接对检测性能进行端到端优化。
YOLO在准确度方面仍然落后于最先进的检测系统。虽然它可以快速识别图像中的对象,但它很难精确定位某些对象,尤其是小对象。
将目标检测的各个部分统一到一个神经网络中。网络使用整个图像的特征来预测每个边界框(bouding box)。它还可以同时预测一个图像在所有类中的所有边界框(bouding box)。
系统将输入图像划分为S×S网格(grid)。如果一个物体的中心落在一个网格单元(grid cell)中,该网格单元(grid cell)负责检测该物体。
每个网格单元格(grid cell)预测B个边界框(bounding box)和这些框的置信度得分。这些置信度评分反映了模型对框中包含目标的置信度,以及它认为框中所预测的内容有多准确。在形式上,我们定义置信度为
就是单个框的置信度,后面有用。
如果该单元格(cell)中不存在对象,则置信度得分应为零。否则,我们希望置信度得分等于预测框与真实值之间的联合(IOU)的交集。
每个边界框(bouding box)包含5个预测:x、y、w、h和置信度。(x, y)坐标表示框的中心相对于网格单元格(grid cell)的边界的坐标。宽度和高度是相对于整个图像预测的。最后,置信度预测表示预测框与任何真值框之间的IOU。
每个网格单元(grid cell)还预测C条件类概率Pr ( Classi | 对象 )。这些概率取决于包含目标的网格单元(grid cell)。我们只预测每个网格单元格(grid cell)的一组类概率,而不考虑框B的数量。
在测试时,将条件类概率和单个框的置信度预测相乘。
这给了我们每个框(box)的特定类别的置信度分数。这些分数既编码了类出现在框(box)中的概率,也编码了预测框与对象的匹配程度。
图解:
首先是模型检测作为回归问题来研究。它将图片分成S × S个网格,每个网格预测B个Bounding box、这些框(box)的置信度、C个可能类别。这些预测被编码成一个S × S × (B * 5 + C)维张量。
用S = 7, B = 2来评价YOLO在PASCAL VOC成果。PASCAL VOC有20个标签类,所以C = 20。我们最后的预测是一个7 × 7 × 30维张量。
网络的初始卷积层从图像中提取特征,而完全连接层预测输出概率和坐标。
其网络架构受到GoogLeNet图像分类模型的启发。
网络有24的卷积层 + 2个完全连接层
其网络没有使用GoogLeNet使用的inception模块,而是简单地使用了1 × 1 reduction layers 紧跟着3 × 3的卷积层中。
整个网络图:
图解:
检测网络由24个卷积层和2个全连接层组成,交替的1 × 1的卷积层减少了前一层的特征空间。在ImageNet分类任务中以一半的分辨率
(224 × 224输入图像)对卷积层进行预训练,然后将分辨率提高一倍进行检测。
网络的最终输出是预测的7 × 7 × 30维张量。
在ImageNet 1000类竞争数据集上对卷积层进行了预训练。在训练前,使用上图中的前20个卷积层,然后是平均池化层和完全连接层。
然后我们将模型转换为执行检测。Ren等人的研究表明,在预训练网络中同时添加卷积层和连接层可以提高性能。按照他们的示例,我们添加了四个卷积层和两个完全连接的层,它们的权值都是随机初始化的。检测通常需要细粒度的视觉信息,因此我们将网络的输入分辨率从224×224提高到448×448。
最后一层预测类概率和边界框坐标。我们通过图像的宽度和高度对边界框(bounding box)的宽度和高度进行归一化,使它们位于0和1之间。我们将边界框(bouding box)x和y坐标参数化为特定网格单元位置的偏移量,因此它们的边界也在0和1之间。
我们对最后一层使用线性激活函数,所有其他层都使用下面的leaky调整线性激活
我们对模型输出的平方和误差进行了优化。我们使用平方和误差是因为它很容易优化,但是它并不完全符合我们最大化平均精度的目标。它对定位误差和分类误差的权重相等,这不理想。而且,在每个图像中,许多网格单元格(grid cell)不包含任何对象。这将把这些单元格(cell)的置信度推向零,通常会压倒包含目标的单元格的梯度。这可能导致模型不稳定,导致早期训练出现分歧。
为了解决这个问题,增加了边界框坐标预测的损失,并减少了不包含对象的框的置信度预测的损失。使用两个参数,λcoord 和λnoobj实现。设置λcoord = 5和λnoobj = 5。
平方和误差也可以在大框和小框中同样加权误差。我们的误差度量应该反映出大框里的小偏差比小框里的小偏差更重要。为了部分解决这个问题,我们预测边界框(bounding box)的宽度和高度的平方根,而不是直接预测宽度和高度。
YOLO预测每个网格单元格(grid cell)有多个边界框(bounding box)。在训练时,我们只希望一个边界框预测器负责每个对象。我们指定一个预测器“负责”根据哪个预测与真实值之间具有当前最高的IOU来预测目标。这将导致边界框预测之间的专门化。每个预测器都能更好地预测特定的大小、纵横比或目标的类别,从而提高整体回忆能力。
优化的损失函数:
liobj 表示是否目标在单元格(cell)i 中。
lijobj 表示在单元格(cell) i 的第 j 个边界框(bounding box)预测器负责该预测。
注意,如果目标存在于该网格单元中(前面讨论的条件类别概率),则损失函数仅惩罚分类错误。如果预测器“负责”实际边界框(即该网格单元中具有最高IOU的预测器),则它也仅惩罚边界框坐标错误。
训练时:
batch size = 64
momentum = 0.9
decay = 0.0005
leaning rate:第一个迭代周期:10-3提高到10-2,继续以10-2训练了75个迭代周期,然后用10-3 训练30个迭代周期,最后用10-4训练30个周期。
为了避免过拟合,使用了dropout和广泛的数据增强。在第一个连接层之后,速率为0.5的dropout层阻止层之间的相互适应。为了增加数据,我们引入了随机缩放和高达原始图像大小20%的平移。我们还在HSV色彩空间中使用高达1.5倍的因子随机调整曝光和图像的饱和度。
一些大的目标或靠近多个网格单元边界的目标可以被多个网格单元很好地定位。非极大值抑制可以用来修正这些多重检测。
YOLO对边界框预测施加了很强的空间限制,因为每个网格单元(grid cell)只能预测两个框(box),并且只能有一个类,这样就约束限制了模型预测临近对象的数量,也就是说,密集的小物体效果会很差。
由于此模型学习从数据中预测边界框,因此它很难泛化到新的、不常见的方向比或配置的目标。该模型也使用相对较粗糙的特征来预测边界框,因为我们的架构具有来自输入图像的多个下采样层。
最后,当我们训练一个近似检测性能的损失函数时,我们的损失函数会同样的对待小边界框与大边界框的误差。大边界框的小误差通常是好的,但小边界框的小误差对IOU的影响要大得多。主要错误来源是不正确的定位。
可变形的部件模型Deformable parts models(DPM)使用滑动窗口方法来检测目标。DPM使用一个不相交的流程来提取静态特征、对区域进行分类、预测高得分区域的边界框等。我们的系统用一个卷积神经网络替换了所有这些不同的部分。该网络同时进行特征提取、边界框预测、非最大抑制和上下文推理。网络不再使用静态特性,而是在线训练这些特性,并针对检测任务对它们进行优化。我们的统一架构比DPM更快、更精确。
R-CNN. R-CNN及其变体使用区域建议而不是滑动窗口来查找图像中的对象。选择性搜索生成潜在的边界框,卷积网络提取特征,SVM对框进行评分,线性模型调整边界框,非最大抑制消除重复检测。这个复杂流程的每个阶段都必须独立地精确地进行调优,因此生成的系统非常慢,在测试时每张图像要花费40多秒的时间。
YOLO和R-CNN有一些相似之处。每个网格单元提出潜在的边界框,并使用卷积特性对这些框进行评分。然而,我们的系统对网格单元的建议设置了空间限制,这有助于减少对同一对象的多次检测。我们的系统也提出了更少的边界框,每张图像只有98个,而选择性搜索则只有2000个左右。最后,我们的系统将这些单独的组件组合成一个单独的、联合优化的模型。
其他快的检测器,Fast and Faster R-CNN 通过共享计算和使用神经网络替代选择性搜索来提出区域加速R-CNN框架,虽然它们提供了比R-CNN更快的速度和更高的准确度,但两者仍然不能达到实时性能。
许多研究工作集中在加快DPM流程上。它们加速HOG计算,使用级联,并将计算推动到GPU上。但是,实际上只有30Hz的DPM 可以实时运行。
YOLO不是试图优化大型检测流程的单个组件,而是完全抛弃流程,被设计为快速检测。
像人脸或行人等单类别的检测器可以高度优化,因为他们必须处理更少的变化。YOLO是一种通用的检测器,可以学习同时检测多个目标。
Deep MultiBox与R-CNN不同,Szegedy等人训练卷积神经网络来预测感兴趣的区域,而不是使用选择性搜索。MultiBox还可以用一个类预测代替置信度预测来进行单目标检测。但是,MultiBox无法执行通用的目标检测,只是一个较大的检测流程中的一小部分,需要进一步的图像patch块分类。YOLO和MultiBox都使用卷积网络来预测图像中的边界框,但YOLO是一个完整的检测系统。
OverFeat Sermanet等人训练卷积神经网络进行定位,并采用该定位器进行检测。OverFeat能够有效地进行滑动窗口检测,但仍然是一个不相交的系统。OverFeat优化定位,而不是检测性能。与DPM一样,本地化器在进行预测时只看到本地信息。OverFeat不能推断全局上下文,因此需要大量的后处理来产生一致的检测。
MultiGrasp 我们的工作在设计上类似于Redmon等人的抓取检测。我们对边界框预测的网格方法是基于MultiGrasp系统抓取的回归分析。然而,抓取检测比目标检测任务要简单得多。MultiGrasp只需要为包含一个目标的图像预测一个可以抓取的区域。不必估计目标的大小,位置或目标边界或预测目标的类别,只找到适合抓取的区域。YOLO预测图像中多个类别的多个目标的边界框和类别概率。
图解: PASCAL VOC 2007上的实时系统。比较了快速检测器的性能和速度。Fast YOLO是PASCAL VOC检测史上最快的检测器,其准确度是其他实时检测器的两倍。YOLO是10 mAP比快速版本更准确,但仍然远远高于实时速度。
VOC 2007误差分析
在测试时,对于每个类别,我们查看该类别的前N个预测。每个预测要么是正确的,要么是根据错误类型进行分类的。
图显示了在所有的20个类别上每种错误类型平均值的分解图。
图解: 误差分析,Fast R-CNN vs**.** YOLO 这些图显示了各种类别的前N个预测中定位错误和背景错误的百分比(N = #表示目标在那个类别中)。
YOLO比Fast R-CNN的背景误检要少得多。通过使用YOLO消除Fast R-CNN的背景检测,我们获得了显著的性能提升。对于R-CNN预测的每个边界框,我们检查YOLO是否预测一个类似的框。如果是这样,我们根据YOLO预测的概率和两个盒子之间的重叠来对这个预测进行提升。
图解:
2007年VOC模型组合试验,结合各种模型与最佳版本的快速R-CNN。其他版本的Fast R-CNN只提供了一点的好处,而YOLO提供了一个显着的性能提升。
图解:
PASCAL VOC 2012排行榜,YOLO与截至2015年11月6日的完整comp4(外部数据允许)公众排行榜进行了比较。给出了各种检测方法的平均平均精度和每类平均精度。YOLO是唯一的实时探测器。Fast R-CNN + YOLO排名第四,比Fast R-CNN高2.3%。
图解:
图5显示了YOLO和其它检测方法之间的比较性能。作为参考,我们在person上提供VOC 2007的检测AP,其中所有模型仅在VOC 2007数据上训练。在Picasso数据集上的模型在VOC 2012上训练,而People-Art数据集上的模型则在VOC 2010上训练。
图解:
定性的结果。YOLO运行的样本艺术作品和来自互联网的自然图像。虽然它确实认为一个人是一架飞机,但它基本上是准确的。
它可以检测超过9000个类别,改进后的yolov2使用一种新颖的多尺度训练方法,同样的YOLOv2模型可以以不同的尺寸运行,在速度和精度上有了简单的权衡。最后提出了一种联合训练目标检测与分类的方法。
1、我们提出了一种新的方法来利用我们已有的大量分类数据,并利用它来扩大现有检测系统的范围,我们的方法使用对象分类的层次视图,该视图允许我们将不同的数据集组合在一起。
2、我们还提出了一种联合训练算法,使我们能够对目标检测器进行检测和分类数据的训练。我们的方法利用标记检测图像来学习精确定位目标,同时使用分类图像来增加其词汇量和鲁棒性。
首先,我们改进YOLO基础检测系统,产生最先进的实时检测器YOLOv2。然后利用我们的数据集组合方法和联合训练算法对来自ImageNet的9000多个类别以及COCO的检测数据训练了一个模型。
与最先进的检测系统相比,YOLO有很多缺点。
YOLO存在大量的定位误差;
与基于区域建议的方法相比,YOLO的召回率相对较低。
计算机视觉一般趋向于更大、更深的网络。更好的性能通常取决于训练更大的网络或将多个模型组合在一起。然而,使用YOLOv2,我们想要一个更精确的探测器,仍然是快速的。我们不是扩展网络,而是简化网络,然后使表示更容易学习。我们从过去的工作中汇集了各种各样的想法与我们自己的新概念,以提高YOLO的表现。结果摘要见表2:
表二图解:
从YOLO到YOLOv2的路径。大多数列出的设计结论导致mAP的显著增加。有两个例外是切换到带有锚框的全卷积网络和使用新网络。切换到锚框方式的方法不改变mAP情况下,增加了召回,而使用新的网络削减了计算量33%。
Batch Normalization批量归一化,收敛性方面呢提高了,消除了其他形式的归一化。在YOLO中对所有卷积层添加批量归一化后,mAP得到了2%以上的改进。批处理规范化还有助于对模型进行规范化。通过批处理归一化,我们可以在不过度拟合的情况下从模型中删除drop - out。
High Resolution Classifier高分辨率的分类器,目前所有的检测方法都使用在ImageNet上预先训练的分类器,从AlexNet开始,大多数分类器对小于256×256的输入图像进行操作,原YOLO以224×224 训练分类器网络,将检测分辨率提高到448。这意味着网络必须同时切换到学习目标检测和调整到新的输入分辨率。
对于YOLOv2,我们首先ImageNet上以448×448的分辨率对分类网络进行10个迭代周期的微调。这给了网络时间来调整其滤波器以便更好地处理更高分辨率的输入。然后,我们在检测上微调得到的网络。这个高分辨率分类网络增加了近4%的mAP。
**Convolutional With Anchor Boxes.**带有锚框的卷积,YOLO使用卷积特征提取器上的完全连接层直接预测包围框的坐标。代替直接预测坐标的Faster R-CNN预测边界框使用手动选择的先验。仅使用卷积层,区域建议网络(RPN)在Faster R-CNN预测偏移量和锚框的置信度。由于预测层是卷积的,RPN在特征图的每个位置预测这些偏移量。预测偏移量而不是坐标简化了问题,使网络更容易学习。
我们从YOLO中移除全连接层,并使用锚框来预测边界框。首先,我们消除一个池层,使网络的卷积层的输出具有更高的分辨率,我们还将网络缩小到416输入图像,而不是448×448。这样做是因为我们想要在特征图中有奇数个位置,所以只有一个中心单元格。物体,尤其是大物体,往往占据图像的中心,所以最好在中心有一个位置来预测这些物体,而不是四个都在附近的位置。YOLO的卷积层将图像采样率降低了32倍,所以通过使用416的输入图像,我们得到了13 ×13的输出特征图。
当移动到锚框时,我们还将类预测机制与空间位置中分离,从而为每个锚框预测类和对象。在YOLO之后,对象预测仍然预测ground truth和建议框的IOU,而类预测则预测给定一个对象的类的条件概率。
Dimension Clusters维度聚类。在与YOLO一起使用锚框时,遇到了两个问题。首先,框的尺寸是手工挑选的。网络可以学会适当地调整方框,但如果我们为网络选择更好的先验,我们可以使网络更容易学会预测良好的检测。取代手工选择先验,在训练集的边界框上运行k-means聚类来自动地找到好的先验。如果我们使用标准k-means与欧几里得距离,较大的框产生的误差比较小框产生的误差要大。然而,我们真正想要的是导致良好的IOU分数的先验,这是独立于框的大小。因此,对于距离度量,我们使用:
我们对k的不同值运行k-means,并用最接近的质心绘制平均IOU,见图2。我们选择k = 5作为模型复杂度和高召回率之间的一个很好的折衷。聚类中心中心体与人工选择的锚盒有显著不同。有更少的短的,宽的框和更多的高,细的框。
图二解析:
VOC和COCO的聚类盒尺寸。我们在边界框的维度上运行k-means聚类,为我们的模型获得良好的先验。左图显示了k的不同选择所得到的平均IOU。我们发现k = 5可以很好地权衡模型的召回率和复杂性。右图显示了VOC和COCO的相对中心。这两种先验都倾向于更薄、更高的盒子,而COCO比VOC的尺寸变化更大。
我们将平均IOU与聚类策略的最近先验值和表1中手动选择的锚框进行比较。仅有5个先验中心的平均IOU为61.0,其性能类似于9个锚盒的60.9。如果我们使用9个中心,我们会看到更高的平均IOU。这表明使用k-means来生成我们的边界框会以更好的表示开始训练模型,并使得任务更容易学习。
表一解释:
VOC 2007上最接近先验的边界框平均IOU VOC 2007上目标的平均IOU与其最接近的,使用不同生成方法之前未经修改的平均值。聚类结果比使用手工选择的先验结果要更好。
Direct location prediction直接位置预测。当YOLO使用锚框时,我们会遇到第二个问题:模型不稳定,特别是在早期的迭代过程中。大部分的不稳定来自预测边界框的(x,y)位置。在区域提出网络中,网络预测值t_x和t_y,(x,y)中心坐标计算如下:
例如,一个tx = 1的预测会将盒子右移一个锚框的宽度,一个tx = -1的预测会将盒子左移相同的宽度。
这个公式是不受限制的,所以任何锚盒都可以在图像任一点结束,而不管在哪个位置预测该边界框。随机初始化模型需要很长时间才能稳定以预测合理的偏移量。
我们没有预测偏移量,而是按照YOLO的方法预测相对于网格单元位置的位置坐标。这限制了落到 0 0 0和 1 1 1之间的真实值。我们使用逻辑激活来限制网络的预测落在这个范围内。
网络预测输出特征映射中每个单元的5个边界框。网络预测每个边界框的5个坐标, t x t_x tx, t y t_y ty, t w t_w tw, t h t_h th和 t o t_o to。如果单元从图像的左上角偏移了 ( c x , c y ) (c_x, c_y) (cx,cy),并且边界框先验的宽度和高度为 p w p_w pw, p h p_h ph,那么预测对应:
由于我们对位置预测进行了约束,使得参数化更容易学习,使得网络更加稳定。与使用锚框的版本相比,使用维度集群和直接预测包围框中心位置将YOLO提高近5%。
**Fine-Grained Features.**细粒度特征。这个修改后的YOLO在13×13特征映射上预测检测结果。虽然这对于大型目标来说已经足够了,但它可以从用于定位较小目标的更细粒度的特征中受益。Faster R-CNN和SSD都在网络的各种特征映射上运行他们提出的网络,以获得一系列的分辨率。我们采用不同的方法,仅仅添加一个透明层,从26x26分辨率的更早层中提取特征。
透传层通过将相邻的特征叠加到不同的通道而不是空间位置来连接高分辨率和低分辨率的特征,类似于ResNet中的身份映射。这将把26×26×512 feature map转换为13×13×2048 feature map,可以将其与原始特征连接起来。我们的检测器运行在这个扩展的功能映射之上,因此它可以访问细粒度的功能。这带来了1%的性能提升。
图三解释:
**具有维度先验和位置预测的边界框。**我们预测边界框的宽度和高度作为聚类中心的偏移量。我们使用sigmoid函数预测边界框相对于滤波器应用位置的中心坐标。
Multi-Scale Training多尺度训练。原始的YOLO使用的输入分辨率为448×448。通过添加锚框,我们将分辨率更改为416×416。然而,由于我们的模型只使用卷积和池化层,因此可以动态调整大小。我们希望YOLOv2能够健壮地运行在不同大小的图像上,所以我们将其训练到模型中。
我们没有固定的输入图像大小,每隔几次迭代就改变网络。每隔10个批次我们的网络会随机选择一个新的图像尺寸大小。由于我们的模型缩减了32倍,我们从下面的32的倍数中选择:{320,352,…,608}。因此**最小的选项是320×320,最大的是608×608。**我们调整网络的尺寸并继续训练。
这个制度迫使网络学习如何在各种输入维度上做好预测。这意味着相同的网络可以预测不同分辨率下的检测结果。在更小尺寸上网络运行速度更快,因此YOLOv2在速度和准确性之间提供了一个简单的折衷。
在低分辨率YOLOv2作为一个便宜,相当准确的检测器。在288×288时,其运行速度超过90FPS,mAP与Fast R-CNN差不多。这使其成为小型GPU,高帧率视频或多视频流的理想选择。
在高分辨率下,YOLOv2是VOC 2007上最先进的检测器,达到了78.6 mAP,同时仍保持运行在实时速度之上。请参阅表3,了解YOLOv2与VOC 2007其他框架的比较。图4
表3解释:
**PASCAL VOC 2007的检测框架。**YOLOv2比先前的检测方法更快,更准确。它也可以以不同的分辨率运行,以便在速度和准确性之间进行简单折衷。每个YOLOv2条目实际上是具有相同权重的相同训练模型,只是以不同的大小进行评估。所有的时间信息都是在Geforce GTX Titan X(原始的,而不是Pascal模型)上测得的。
Further Experiments,进一步实验,我们在VOC 2012上训练YOLOv2进行检测。表4显示了YOLOv2与其他最先进的检测系统的比较性能。YOLOv2取得了73.4 mAP同时运行速度比竞争方法快的多。我们在COCO上进行了训练,并在表5中与其他方法进行比较。在VOC度量(IOU = 0.5)上,YOLOv2得到44.0 mAP,与SSD和Faster R-CNN相当。
表四图解:
PASCAL VOC2012 test上的检测结果。YOLOv2与最先进的检测器如具有ResNet的Faster R-CNN、SSD512在标准数据集上运行,YOLOv2比它们快2-10倍。
为了最大限度提高性能,我们从头开始设计YOLOv2。大多数检测框架依赖于VGG-16作为的基本特征提取器。VGG-16是一个强大的,准确的分类网络,但它是不必要的复杂。在单张图像224×224分辨率的情况下VGG-16的卷积层运行一次传递需要306.90亿次浮点运算。
YOLO框架使用基于Googlenet架构的自定义网络。这个网络比VGG-16更快,一次前馈传播只有85.2亿次的操作。然而,它的准确性比VGG-16略差。在ImageNet上,对于单张裁剪图像,224×224分辨率下的top-5准确率,YOLO的自定义模型获得了 88.0 88.0% 88.0,而VGG-16则为 90.0 90.0% 90.0。
**Darknet-19.**我们提出了一个新的分类模型作为YOLOv2的基础。与VGG模型类似,我们大多使用3×3滤波器,并在每个池化步骤之后使通道(channels)数量加倍。按照Network in Network(NIN)的工作,我们使用全局平均池化做预测以及1×1滤波器来压缩3×3卷积之间的特征表示。我们使用批标准化来稳定训练,加速收敛,并正则化模型。
我们的最终模型叫做Darknet-19,它有19个卷积层和5个最大池化层。完整描述请看表6。Darknet-19只需要55.8亿次运算来处理图像,但在ImageNet上却达到了 72.9 72.9% 72.9的top-1准确率和 91.2 91.2% 91.2的top-5准确率。
Training for classification我们在标准ImageNet 1000类分类数据集上对网络进行训练,初始学习率为0.1,多项式速率衰减为4,权值衰减为0.0005,动量为0.9。在训练中,我们使用标准的数据增强技巧,包括随机作物、旋转、色调、饱和度和曝光位移。
如上所述,在我们对224×224的图像进行初始训练之后,我们对网络在更大的尺寸448上进行了微调。对于这种微调,我们使用上述参数进行训练,但是只有10个迭代周期,并且以 1 0 − 3 10^{−3} 10−3的学习率开始。在这种更高的分辨率下,我们的网络达到了 76.5 76.5% 76.5的top-1准确率和 93.3 93.3% 93.3的top-5准确率。
Training for detection检测训练。我们修改这个网络进行检测,删除了最后一个卷积层,加上了三个具有1024个滤波器的3×3卷积层,其后是最后的1×1卷积层与我们检测需要的输出数量。对于VOC,我们预测5个边界框,每个边界框有5个坐标和20个类别,所以有125个滤波器。我们还添加了从最后的3×3×512层到倒数第二层卷积层的直通层,以便我们的模型可以使用细粒度特征。
我们训练网络160个迭代周期,初始学习率为 1 0 − 3 10^{−3} 10−3,在60个和90个迭代周期时将学习率除以10。我们使用0.0005的权重衰减和0.9的动量。我们对YOLO和SSD进行类似的数据增强,随机裁剪,色彩偏移等。我们对COCO和VOC使用相同的训练策略。
我们提出了一个联合训练分类和检测数据的机制。我们的方法使用标记为检测的图像来学习边界框坐标预测和目标之类的特定检测信息以及如何对常见目标进行分类。它使用仅具有类别标签的图像来扩展可检测类别的数量。
在训练期间,我们混合来自检测和分类数据集的图像。当我们的网络看到标记为检测的图像时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,我们只能从该架构的分类特定部分反向传播损失。
这种方法提出了一些挑战。检测数据集只有通用目标和通用标签,如“狗”或“船”。分类数据集具有更广更深的标签范围。ImageNet有超过一百种品种的狗,包括Norfolk terrier,Yorkshire terrier和Bedlington terrier。如果我们想在两个数据集上训练,我们需要一个连贯的方式来合并这些标签。
大多数分类方法使用跨所有可能类别的softmax层来计算最终的概率分布。使用softmax假定这些类是相互排斥的。这给数据集的组合带来了问题,例如你不想用这个模型来组合ImageNetCOCO,因为类Norfolk terrier和dog不是相互排斥的。
我们可以改为使用多标签模型来组合不假定互斥的数据集。这种方法忽略了我们已知的关于数据的所有结构,例如,所有的COCO类是互斥的。
Hierarchical classification分层分类。ImageNet标签是从WordNet中提取的,这是一个构建概念及其相互关系的语言数据库[12]。在WordNet中,Norfolk terrier和Yorkshire terrier都是terrier的下义词,terrier是一种hunting dog,hunting dog是dog,dog是canine等。分类的大多数方法为标签假设一个扁平结构,但是对于组合数据集,结构正是我们所需要的。
WordNet的结构是有向图,而不是树,因为语言是复杂的。例如,dog既是一种canine,也是一种domestic animal,它们都是WordNet中的同义词。我们不是使用完整的图结构,而是通过从ImageNet的概念中构建分层树来简化问题。
为了构建这棵树,我们检查了ImageNet中的视觉名词,并查看它们通过WordNet图到根节点的路径,在这种情况下是“物理对象”。许多同义词通过图只有一条路径,所以首先我们将所有这些路径添加到我们的树中。然后我们反复检查我们留下的概念,并尽可能少地添加生长树的路径。所以如果一个概念有两条路径到一个根,一条路径会给我们的树增加三条边,另一条只增加一条边,我们选择更短的路径。
最终的结果是WordTree,一个视觉概念的分层模型。为了使用WordTree进行分类,我们预测每个节点的条件概率,以得到同义词集合中每个同义词下义词的概率。例如,在terrier节点我们预测:
如果我们想要计算一个特定节点的绝对概率,我们只需沿着通过树到达根节点的路径,再乘以条件概率。所以如果我们想知道一张图片是否是Norfolk terrier,我们计算:
为了分类目的,我们假定图像包含一个目标: P r ( physical object ) = 1 Pr(\text{physical object}) = 1 Pr(physical object)=1。
为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有将标签空间从1000扩展到1369的中间节点。在训练过程中,我们将真实标签向树上面传播,以便如果图像被标记为Norfolk terrier,则它也被标记为dog和mammal等。为了计算条件概率,我们的模型预测了具有1369个值的向量,并且我们计算了相同概念的下义词在所有同义词集上的softmax,见图5。
图五解释:
在ImageNet与WordTree上的预测。大多数ImageNet模型使用一个较大的softmax来预测概率分布。使用WordTree,我们可以在共同的下义词上执行多次softmax操作。
使用与以前相同的训练参数,我们的分级Darknet-19达到 71.9 71.9% 71.9的top-1准确率和 90.4 90.4% 90.4的top-5准确率。尽管增加了369个额外的概念,而且我们的网络预测了一个树状结构,但我们的准确率仅下降了一点点。以这种方式进行分类也有一些好处。在新的或未知的目标类别上性能会缓和地降低。例如,如果网络看到一只狗的照片,但不确定它是什么类型的狗,它仍然会高度自信地预测“狗”,但是在下义位扩展之间有更低的置信度。
这个构想也适用于检测。现在,我们不是假定每张图像都有一个目标,而是使用YOLOv2的目标预测器给我们 P r ( physical object ) Pr(\text{physical object}) Pr(physical object)的值。检测器预测边界框和概率树。我们遍历树,在每个分割中采用最高的置信度路径,直到达到某个阈值,然后我们预测目标类。
Dataset combination with WordTree联合分类和检测。我们可以使用WordTree以一种合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的同步集。图6显示了一个使用WordTree组合ImageNet和COCO标签的示例。WordNet是非常多样化的,所以我们可以在大多数数据集中使用这种技术。
图六解析:
Dataset combination with WordTree 使用WordTree层次结构组合数据集。使用WordNet概念图,我们构建了一个可视化概念的层次树。然后,我们可以通过将数据集中的类映射到树中的同步集来合并数据集。这是一个简化的WordTree视图,用于演示。
Joint classification and detection. 联合分类与检测。现在我们可以使用WordTree组合数据集,我们可以在分类和检测上训练联合模型。我们想要训练一个非常大规模的检测器,所以我们使用COCO检测数据集和完整的ImageNet版本中的前9000个类来创建我们的组合数据集。我们还需要评估我们的方法,以便从ImageNet检测挑战中添加任何尚未包含的类。该数据集的相应WordTree有9418个类别。ImageNet是一个更大的数据集,所以我们通过对COCO进行过采样来平衡数据集,使得ImageNet仅仅大于4:1的比例。
用这个数据集,我们训练了YOLO9000。我们使用基本的YOLOv2架构,但是只有3个先验而不是5个先验来限制输出大小。当我们的网络看到检测图像时,我们会正常地反向传播损耗。对于分类损失,我们只在标签对应级别或更高级别上反向传播损失。例如,如果这个标签是狗,我们会把任何错误分配给树下的预测,德国牧羊犬和金毛寻回犬,因为我们没有那个信息。
当它看到一个分类图像时,我们只是反向传播分类损失。要做到这一点,我们只需找到预测该类的最高概率的边界框,然后仅计算其预测树的损失。我们还假设预测框与地面真实标签至少重叠了3个IOU,并基于此假设反向传播对象丢失。
通过这种联合训练,YOLO9000学会了使用COCO中的检测数据在图像中找到目标,并使用ImageNet中的数据对各种目标进行分类。
我们在ImageNet检测任务上评估YOLO9000。ImageNet的检测任务与COCO共享44个目标类别,这意味着YOLO9000只能看到大多数测试图像的分类数据,而不是检测数据。YOLO9000在从未见过任何标记的检测数据的情况下,整体上获得了19.7 mAP,在不相交的156个目标类别中获得了16.0 mAP。这个mAP高于DPM的结果,但是YOLO9000在不同的数据集上训练,只有部分监督。它也同时检测9000个其他目标类别,所有的都是实时的。
当我们分析YOLO9000在ImageNet上的表现时,我们发现它很好地学习了新的动物种类,但是却在像服装和设备这样的学习类别中挣扎。新动物更容易学习,因为目标预测可以从COCO中的动物泛化的很好。相反,COCO没有任何类型的衣服的边界框标签,只针对人,因此YOLO9000正在努力建模“墨镜”或“泳裤”等类别。
表七解释:
在ImageNet上最好和最差的类。在156个弱监督类中AP值最高和最低的类。YOLO9000为各种各样的动物学习良好的模型,但却很难适应新课程,比如服装或设备。
我们介绍了YOLOv2和YOLO9000,两个实时检测系统。YOLOv2在各种检测数据集上都是最先进的,也比其他检测系统更快。此外,它可以运行在各种图像大小,以提供速度和准确性之间的平滑折衷。
YOLO9000是一个通过联合优化检测和分类来检测9000多个目标类别的实时框架。我们使用WordTree将各种来源的数据和我们的联合优化技术相结合,在ImageNet和COCO上同时进行训练。YOLO9000是在检测和分类之间缩小数据集大小差距的重要一步。
我们的许多技术都可以泛化到目标检测之外。我们对ImageNet的WordTree表示为图像分类提供了更丰富,更详细的输出空间。使用分层分类的数据集组合在分类和分割领域将是有用的。像多尺度训练这样的训练技术可以为各种视觉任务提供益处。
对于未来的工作,我们希望使用类似的技术来进行弱监督的图像分割。我们还计划使用更强大的匹配策略来改善我们的检测结果,以在训练期间将弱标签分配给分类数据。计算机视觉受到大量标记数据的祝福。我们将继续寻找方法,将不同来源和数据结构的数据整合起来,形成更强大的视觉世界模型。
在输入320×320的图片后,YOLOv3能在22毫秒内完成处理,并取得28.2mAP的成绩。它的精度和SSD相当,但速度要快上3倍。和旧版数据相比,v3版进步明显。在Titan X环境下,YOLOv3的检测精度为57.9 AP50,用时51ms;而RetinaNet的精度只有57.5 AP50,但却需要198ms,相当于YOLOv3的3.8倍。
图一解析:
我们从Focal Loss的paper中调整了这个数字。与性能相当的其他检测方法相比,YOLOv3的运行速度要快得多。无论是M40还是Titan X,它们基本上是相同的GPU。
Bounding Box Prediction边界框预测
按照YOLO9000,我们的系统预测使用维度聚类作为anchor boxes(锚框)来预测边界框(bounding boxes)。网络预测每个边界框的4个坐标,tx, ty, tw, th。如果单元格从图像的左上角的偏移量是(cx,cy),并且它对应的先验边界框(bounding box prior )的宽和高为pw、ph,那么预测值将会由以下式子给出:
在训练期间,我们使用误差平方和损失函数。如果预测坐标的所对应的标注值是,那么我们的梯度就是标注值(通过标注框算出)和预测值的差:
。标注值可以通过以上式子的逆用而轻易算出。
YOLOv3使用逻辑回归预测每个边界框的客观得分。如果边界框先验( bounding box prior)与真值(ground truth)对象的重叠超过任何其他边界框先验,则该值应为1。如果边界框先验不是最好的,但是重叠了超过某个阈值的ground truth对象,我们忽略预测。我们使用的阈值为0.5。我们的系统只为每个ground truth对象分配一个边界框。如果先前的边界框并未分配给相应对象,那它只是检测错了对象,而不会对坐标或分类预测造成影响。
Class Prediction类别预测
每个框使用多标签分类预测边界框可能包含的类。我们没有使用softmax,因为我们发现它对于良好的性能是不必要的,相反,我们只是使用独立的逻辑分类器。在训练过程中,我们使用二元交叉熵损失(binary cross-entropy loss)进行类预测。
当我们移动到更复杂的领域,比如开放图像数据集时,这个选择会有所帮助。在这个数据集中有许多重叠的标签(即女人和人)。使用softmax会假定每个框只有一个类,而通常情况并非如此。多标签方法可以更好地对数据建模。
图二解析:
**带有维度先验和位置预测的边界框。**我们预测边框的宽度和高度作为聚类中心的偏移量。我们使用sigmoid函数预测边框相对于滤波器应用位置的中心坐标。
Predictions Across Scales跨尺度预测
YOLOv3预测了三种不同尺度的boxes。我们的系统使用与特征金字塔网络相似的概念从这些尺度中提取特征。我们在基本特征提取器中增加了几个卷积层,并用最后的卷积层预测一个三维张量编码:边界框、框中目标和分类预测。在COCO数据集实验中,我们的神经网络分别为每种尺寸各预测了3个边界框,所以得到的张量是N ×N ×[3∗(4+ 1+ 80)],其中包含4个边界框offset、1个目标预测以及80种分类预测。
接下来,我们从之前的两层中提取特征图,并将其2倍上采样。我们还从网络的早期获取一个feature map,并使用连接将其与我们的上采样特性合并。该方法允许我们从上采样的特征中获取更有意义的语义信息,并从早期的特征图中获取更细粒度的信息。然后,我们再添加几个卷积层来处理这个组合的特征图,并最终预测出一个类似的张量,尽管现在是原来的两倍。
我们再次执行相同的设计来预测最终尺度的框(8×8)。因此,我们对第三尺度的预测得益于所有的先验计算以及网络早期的细粒度特性。
YOLOv3依旧使用K-Means聚类方法来确定先验边框。在实验中,我们选择了9种先验边框和3种尺寸特征图,然后将9种先验边框均匀分给3种尺寸的特征图。在COCO数据集上,这9个聚类先验框尺寸分别是:(10×13)、(16×30)、(33×23)、(30×61)、(62×45)、(59×119)、(116 × 90)、(156 × 198)、(373 × 326)。
Feature Extractor特征提取。我们使用了一个新网络来实现特征提取。我们的新网络融合了YOLOv2、Darknet-19和残差网络。我们的网络使用了连续的3×3和1×1卷积层,也使用了一些残差块。它明显变得大了许多,它共有53个卷积层。
网络在性能上远超Darknet-19,在效率上也优于ResNet-101和ResNet-152。这里是一些网络在ImageNet上的实验结果:
表二:
网络的比较。每种网络的准确率,数十亿次操作,每秒十亿次浮点运算和FPS。
每个网络都在相同的配置下进行训练,均用256 ×256的图片进行测试,得到单尺寸大小图片的测试精度。运行时间通过在Titan X上处理256 × 256图片测出。所以,Darknet-53不仅精度可以媲美最先进的分类器,而且它有较少浮点运算操作,更快的速度。Darknet-53比ResNet-101性能更好而且要快1.5倍。Darknet-53性能与ResNet-152相近,但是要比它快2倍。
Darknet-53每秒浮点运算次数也是最高的。这说明我们的网络结构能够更好地利用GPU,使其预测效率更高,速度更快。ResNets更慢,大抵是因为其层数太多,所以不是那么有效率。
我们依旧只是训练完整的图像,没有将难以正确分类的样本反复训练,也没有进行其他任何操作。我们所用的多尺度训练、大量数据增强和批标准化等操作也均符合标准。我们在darknet框架下进行训练和测试。
表三:RetinaNet处理一张图像的时间是YOLOv3的3.8倍。 YOLOv3比SSD要好得多,并且在AP50标准下可以与最先进的模型媲美!
对于COCO数据集那些奇怪的mAP评价指标,YOLOv3的表现与DSSD相当,却要快3倍。但不得不承认,它仍然比像RetinaNet这样的模型要落后许多。
但是,当我们用以前的评价指标,即IOU=0.5时的mAp(表中的AP50)来评价YOLOv3时,我们发现它是真的强。它几乎可与RetinaNet比肩,且远高于DSSD。这表明YOLOv3是一个非常强大的检测器,擅长为目标生成合适的边框。但是,随着IOU阈值的增加,YOLOv3性能显著下降,这表明YOLOv3在努力的使框与物体完美对齐。
在过去,YOLO一直在和小物体检测较劲。但是,现在我们可能要改变工作的重心。因为虽然通过新的多尺度预测,YOLOv3已具有相对较高的AP性能。 但是,它在中型和大型物体检测上的性能还相对较差。这可能需要更多的调研和实验才能知道如何去改进这一点。
当我们基于AP50指标绘制精度与速度的关系时(参见图3)我们看到YOLOv3比起其他检测系统具有显着的优势。也就是说,它更快更好。
Anchor box x; y offset predictions. 锚框x,y的偏移检测。我们尝试使用普通的锚框预测机制来预测x;使用线性激活将y偏移量作为框宽或框高的倍数。我们发现该方法降低了模型的稳定性,效果不佳。
Linear x; y predictions instead of logistic线性x,y预测而不是逻辑预测。我们尝试使用线性激活来直接预测x,y的偏移,而不是使用逻辑激活。这降低了mAP成绩。
**Focal loss.**我们尝试使用focal loss,但它大概降低了2个点的mAP。 这可能是因为具有单独的对象预测和条件类别预测的YOLOv3对于focal loss试图解决的问题已经具有相当的鲁棒性。是对于大多数例子,类别预测没有损失?还是其他什么原因?我们并不完全确定。
Dual IOU thresholds and truth assignment. 双IOU阈值和真值分配。在训练期间,Faster- R-CNN用了两个IOU阈值,如果预测的边框与标注边框的重合度不低于0.7,那判定它为正样本。如果在0.3-0.7之间,则忽略。如果低于0.3,就判定它为负样本。我们也尝试了这种方法,但最终的效果并不好。
YOLOv3是一个很棒的检测器,它由准又快。虽然它在COCO数据集上,0.3和0.95IOU下的平均AP并不好,但在旧的0.5 IOU的检测指标下,它还是非常不错的。
那我们改变指标干嘛?最初的COCO论文里也只有这样一句模棱两可的话:评估完成,就会生成完整的评估结果。但是Russakovsky等曾经指出,人类很难区分0.3与0.5的IOU的边框!“训练人类用肉眼区分0.3和0.5IOU的边框是一件超级难的事”[18]。既然人类都难以分辨,那这个指标有多重要。