一、概述

相对于YOLOv1,改进后的v2版使用一种新的、多尺度的训练方法,相同的YOLOv2模型可以在不同的尺寸运行,在速度和准确性之间达到简单的折中。这个模型由于可以对9000类目标进行分类,因此称为YOLO9000,但是依然能实时的运行。文章的最后提出了一种联合训练目标检测与分类的方法。这种方法同时在COCO检测数据集和ImageNet分类数据集同时训练YOLO9000。这种联合训练可使YOLO9000预测没有标记检测数据的对象。

通常情况下用于分类和标记等其他任务的数据集相比,检测数据集是有限的。最常见的检测数据集包含成千上万的图像和几十到几百个标签。分类数据集包含数以百万计的图像,有数万或数十万个类别。在数据量方面作者希望将检测扩展到对象分类的级别。然而,用于检测的标记图像要比用于分类或标记的标记昂贵得多。并且在不久的将来,不太可能看到与分类数据集规模相同的检测数据集。

本文提出了一种利用现有大量分类数据的新方法,并将其用于扩展现有检测系统的范围。我们的方法使用对象分类的层次视图,允许将不同的数据集组合在一起。还提出了一种联合训练算法,能够在检测和分类数据上训练目标检测器。这种方法利用标记检测图像来学习精确定位目标,同时利用分类图像来增加词汇量和鲁棒性。通过这种方法,对YOLO9000进行了训练,这是一个实时的对象检测器,可以检测9000多个不同的对象类别。首先,在YOLO检测系统的基础上进行了改进,以生产最先进的实时检测器YOLOv2。然后利用数据集组合方法和联合训练算法对ImageNet中的9000多个类和COCO中的检测数据进行模型训练。

二、YOLO9000的改进

与Fast R-CNN相比YOLO具有明显的定位误差,与基于区域建议的方法相比YOLO具有更低的召回率。因此在YOLO9000中主要关注在保持分类精度的同时提升召回率和定位精度。然而,对于YOLOv2,想要的是一个更准确、仍然快速的探测器。没有扩大网络,而是简化了网络,然后使表示更容易学习。从过去的工作中收集了各种各样的想法和的新概念,以提高YOLO的性能,结果见下表:

YOLO v2_卷积

(1)批归一化

批处理标准化在消除对其他形式的正则化的需要的同时,显著改善了收敛性。通过在YOLO中添加所有卷积层的批处理标准化,我们得到了超过2%的mAP改进。批处理规范化也有助于模型的规范化。通过批处理归一化,可以在不过度拟合的情况下从模型中去除误差。

(2)高分辨率的分类器

所有最先进的检测方法都使用预先在ImageNet上训练好的分类器。AlexNet大多数分类器操作输入图像小于256×256。将原YOLO训练分类器网络的分辨率为224×224,把分辨率提升到448来进行检测。这意味着网络必须同时切换到学习对象检测和调整新的输入分辨率。对YOLOv2首先在ImageNet上首先在448x448完全分辨率上微调分类网络这给网络时间来调整它的滤波器更好地工作在更高的分辨率输入。然后,对检测结果网络进行微调。这个高分辨率的分类网络增加了将近4%的mAP。

(3)与Anchor Box的卷积

YOLO使用卷积特征提取器上的全连接层直接预测bounding box的坐标,而不是像Faster R-CNN那样使用手工挑选的先验来预测bounding box。在Faster R-CNN中,仅使用卷积层的区域建议网络(RPN)可以预测anchor boxes的偏移量和置信度。由于预测层是卷积的,RPN在feature map的每个位置预测这些偏移。预测偏移量而不是坐标简化了问题,使网络更容易学习。由于预测层是卷积的,RPN在feature map的每个位置预测这些偏移。预测偏移量而不是坐标简化了问题,使网络更容易学习。

从YOLO中移除全连接层,并使用anchor box 来预测bounding box。首先,消除了一个池化层,使网络的卷积层的输出具有更高的分辨率。也对网络进行减少操作使得输入图像416而不是448×448。这样做是因为想在feature map中有奇数个位置,所以只有一个中心单元格。目标,尤其是大的目标,往往占据图像的中心,最好在中心有一个位置来预测这些物体,而不是四个都在附近的地点。YOLO卷积层对图像进行32倍的下采样,因此使用一个输入图像416中得到一个13×13的feature map。

当移动anchor box时,也将类预测机制从空间位置解除出来,而不是为每个锚盒预测类和对象。在YOLO之后,目标预测仍然预测ground truth和所提box的IOU,而分类概率则预测该类在有对象的情况下的条件概率。使用anchor box后精度会有略微的下降。YOLO对每张图片的预测只有98个盒子,但是使用anchor box以后模型预测超过了1000个

(4)维度聚类

当YOLO与anchor box一起使用时,遇到两个问题。首先,box的尺寸是手工挑选的。网络可以学会适当地调整box,但如果为网络选择更多的先验知识来开始,可以使网络更容易地学会预测好的检测。没有手工选择先验,而是在训练集的边界框上运行k-means聚类,自动找到好的先验。如果欧几里得距离下的标准欧拉距离,那么大的box会比小的box产生更多的误差。然而,真正想要的是能够得到好的IOU分数的先验知识,这与盒子的大小无关。因此,对距离度量使用:

                                                                  YOLO v2_聚类_02

对k的不同值运行k均值,用最近的质心绘制平均IOU,选择k = 5时可得到模型复杂度和高召回率之间的一个很好的折衷。聚类中心明显得和手工挑选的anchor box不同。有更少的矮宽的box和高窄的box。

将平均欠条与最接近之前的聚类策略和表1中手动选择的锚盒进行比较。在只有5个先验的情况下,质心的表现类似于9个锚箱,平均欠条为61.0,而平均欠条为60.9。如果使用9个质心,会看到一个更高的平均借据。这表明使用k-means来生成边界框将以更好的表示方式启动模型,并使任务更容易。

(5)直接位置预测

当与YOLO和anchor一起使用时,遇到的第二个问题:模型不稳定性,特别是在早期迭代中。大部分的不稳定性来自于对盒子(x, y)位置的预测。在区域建议网络中,网络预测值tx和ty, (x, y)中心坐标计算方法为:

                                                                                YOLO v2_聚类_03

例如,预测tx = 1将把box向右移动anchor box的宽度,tx =−1将把box向左移动anchor box左移相同的数量。这个公式是不受约束的,所以任何anchor box都可以停在图像中的任何一点,不管box预测的是什么。在随机初始化的情况下,该模型需要很长时间才能稳定地预测合理的偏移量。没有预测偏移量,而是采用YOLO的方法,预测相对于网格单元位置的位置坐标。这限制了ground truth落在0和1之间。使用逻辑激活来约束网络的预测落在这个范围内。 

该网络预测在输出特征映射中的每个单元上有5个bounding box。该网络预测每个边界框的5个坐标,tx, ty, tw, th和to。如果单元格与图像左上角偏移(cx, cy),且bounding box先验知识具有宽度和高度pw, ph,则预测对应于:

                                                            YOLO v2_卷积_04

由于对位置预测进行了约束,使得参数化更容易学习,使网络更加稳定。使用维度聚类以及直接bounding box中心位置,与使用维度聚类的版本相比,YOLO几乎提高了5%。 

(6)细粒度特征

改进的YOLO在13×13的feature map上预测检测。虽然这对于大型对象来说已经足够了,但在定位比较小的目标时用细粒度的特征比较好。速度更快的R-CNN和SSD都在网络中不同feature map上运行建议网络,以获得一系列的分辨率。我们采取一种不同的方法,只需添加一层透传带从26x26早期的特征上获取特征。

透传层通过将相邻的特征叠加到不同的通道而不是空间位置来连接高分辨率特征和低分辨率特征,类似于ResNet中的标识映射。使用这种方法后26x26x512的feature map能转化成13x13x2048的feature map,能和原始的特征连接起来。我们的检测器运行在这个扩展的feature map之上,这样它就可以访问细粒度的特性,这将使性能略微提高1%。

(7)多尺度训练

原始YOLO输入分辨率为448×448,通过添加anchor box,把分辨率变为416×416。但是,由于模型只使用卷积层和池化层,因此可以动态调整它的大小。本文的目的是YOLOv2能够在不同大小的图像上运行,因此将其训练到模型中。不是固定输入图像的大小,而是每隔几次迭代就改变网络。每10批网络随机选择一个新的图像尺寸大小。由于模型向下采样32倍,从以下32的倍数:{320,352,…608 }。因此,最小的选择是320×320,最大的是608×608。将网络调整到那个维度并继续训练。

这种机制迫使网络学会跨各种输入维度进行良好的训练。这意味着同一个网络可以预测不同分辨率下的探测结果。网络在更小的尺寸下运行得更快,所以YOLOv2在速度和准确性之间提供很容易的折中。在低分辨率下,YOLOv2操作起来就像一个简练、相当准确的探测器。在288×288几乎和Fast R-CNN具有相同的mAP。这使得它非常适合于较小的gpu、高帧率视频或多视频流。

(8)更快

提出了Darknet作为YOLOv2分类模型的基础。模型建立在先前的网络设计工作和该领域通用知识的基础上。类似于VGG模型我们大部分使用3x3的滤波器,并且在每次池化步骤后对通道数加倍。在NIN网络之后,使用全局平均池化来进行预测,并且用1x1的卷积把特征压缩在3x3的卷积之间。使用批归一化进行稳定的训练,加速收敛正则化模型。最终的模型有19个卷积层和5个最大池层。完整的网络如下表:

                                                              YOLO v2_聚类_05

三、训练

(1)训练分类网络 

在标准ImageNet 1000类分类数据集上使用随机梯度下降法对网络进行了160轮的训练,初始学习率为0.1,多项式率衰减率为4次,权值衰减为0.0005,动量为0.9,使用了Darknet神经网络框架。在训练过程中,使用标准的数据增强技巧,包括随机作物、旋转、色调、饱和度和曝光偏移。正如上面所讨论的,最初的训练后图像在224×224优化网络在更大的规模448进行微调。这种微调与上述参数训练,但是开始至训练10轮,学习率设置为10^−3。在更高的分辨率下,网络达到了76.5%的top 1精度和93.3%的top 5精度。开始设置学习率为10^-3将网络训练160轮,分成10轮、60轮、90轮。使用0.0005的权重衰减和0.9的动量。使用了类似的数据增强YOLO和SSD,随机作物,换色例如,对COCO和VOC使用了相同的训练策略。

(2)训练检测网络

修改这个网络检测通过移除最后一个卷积层而增加三个3×3卷积层1024过滤器之后,最后一个1×1卷积层与输出的数量需要检测。对于VOC,预测5个box,每个box有5个坐标和20个类,所以125个滤波器。还增加了一层透传的最后3×3×512层第二回旋的层,这样模型可以使用细粒度特性。我们还增加了一层透传的最后3×3×512层到倒数第二的卷积层,这样模型可以使用细粒度特性。

以初始10^-3的学习率开始训练这个网络,分成10轮、60轮和90轮。使用0.0005的权重衰减和0.9的动量。对YOLO和SSD使用相同的数据增强技术,用随机剪切,颜色平移等,在VOC和COCO上使用相同的训练策略。

(3)联合训练

提出了一种分类与检测数据联合训练的方法。该方法利用标记图像进行检测,学习bounding box坐标预测、目标度等特定检测信息,以及如何对常见目标进行分类。它只使用带有类标签的图像来扩展它可以检测到的类别的数量。它只使用带有类标签的图像来扩展它可以检测到的类别的数量。

在训练过程中,把检测数据集和分类数据集混合起来。当网络看到用于检测的标记图像时,可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,只从体系结构中特定于分类的部分反向传播损失。

这种方法带来了一些挑战。检测数据集只有共同的对象和一般的标签,如“狗”或“船”。分类数据集具有更广泛和更深入的标签范围。ImageNet拥有100多个品种的狗,包括“诺福克梗”、“约克郡梗”和“贝灵顿梗”。如果我们想在这两个数据集上进行培训,需要一种连贯的方式来合并这些标签。大多数分类方法在所有可能的类别中使用softmax层来计算最终的概率分布。使用softmax假定类是互斥的。这为组合数据集带来了问题,例如,您不希望使用此模型组合ImageNet和COCO,因为“Norfolk terrier”和“dog”类并不相互排斥。相反,可以使用多标签模型来组合假定不互斥的数据集。这种方法忽略了关于数据的所有结构,例如所有COCO类都是互斥的。作者提出了wordnet对Imagenet数据集进行合并,并和COCO联合训练。