原文链接:https://arxiv.org/pdf/1612.08242v1.pdf 2017年发表在CVPR上。
摘要
引入了YOLO9000。
- 首先,提出了对YOLOv1的各种改进,既有新颖的,也有来自之前工作的。改进后的YOLOv2模型在PASCAL VOC和COCO等标准检测任务上是最先进的。
- 用一种新颖的多尺度训练方法,同样的YOLOv2模型可以在不同的尺寸下运行,在速度和准确性之间轻松权衡。
- 提出了一种目标检测与分类联合训练的方法。利用该方法,在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。联合训练允许YOLO9000预测没有标记检测数据的目标类的检测。
介绍
现在的检测方法存在什么问题呢?——大多数检测方法仍然局限于一个小的目标集。 当前的目标检测数据集是有限的,图像数量少、标签数量少。 怎么办呢?
- 我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并使用它来扩展当前检测系统的范围。我们的方法使用目标分类的层次视图,允许我们将不同的数据集组合在一起。
- 还提出了一个联合训练算法,使我们能够在检测数据集和分类数据集上训练目标检测器。此方法利用已标记的检测图像来学习从而实现精确定位,利用分类图像来增加词汇量和鲁棒性。(所以在这里,就知道分类图像怎么用了。)
使用这种方法,我们训练了YOLO9000,一个实时物体检测器,可以检测超过9000种不同的物体类别。这篇文章做了: (1)对基础的YOLO检测系统进行了改进,得到了最先进的实时检测仪YOLOv2。 (2)使用我们的数据集组合方法和联合训练算法对来自ImageNet的9000多个类和来自COCO的检测数据进行训练。
2 更好
与Fast R-CNN相比,YOLO存在大量的本地化错误;与基于区域提议的方法相比,YOLO的召回率相对较低。因此,我们主要关注在保持分类准确性的同时提高召回率和定位率。 我们想要的是一种更精确、速度更快的探测器,因此简化网络,然后使表征更容易学习。从YOLOv1到YOLOv2,采取了一系列决策。
-
批量归一化。批量归一化使收敛显著改进,同时消除了对其他形式的正则化的需要。通过在YOLO的所有卷积层上添加批量归一化,mAP得到了超过2%的改善。批处理归一化还有助于规范化模型,我们可以从模型中移除dropout而不发生过拟合。 -
高分辨率的分类器。对于YOLOv2,首先在ImageNet上以完整的448×448分辨率对分类网络进行微调(10个epochs)。这给了网络时间来调整它的过滤器,使其在更高分辨率的输入上工作得更好。然后我们对检测结果网络进行微调。这个高分辨率的分类网络使我们的mAP增加了近4%。 -
带有锚框的卷积。YOLO使用卷积特征提取器上的全连接层直接预测边界框的坐标。与直接预测坐标不同,Faster R-CNN使用手工挑选的先验预测边界框。Faster R-CNN中的区域提议网络(RPN)仅使用卷积层来预测锚框的偏移量和置信度,由于预测层是卷积的,RPN预测特征图中每个位置的偏移量。预测偏移量而不是坐标简化了问题并且让网络更容易学习。 我们从YOLO中删除了全连接层,使用锚框来预测边界框。首先,消除一个池化层,使网络的卷积层输出更高的分辨率。我们还将输入图像的分辨率改成了416×416而不再是448×448。这样做是因为我们想在特征映射中有一个奇数的位置,这样就得到了一个单一的网格中心。目标,尤其是大目标,往往占据图像的中心,所以最好在中心有一个单一的位置来预测这些目标而不是都在附近的4个位置。YOLO的卷积层下采样图像的因子为32,因此通过使用输入图像416,我们得到输出特征映射为13 × 13。 因为我们使用锚框,所以这就是将类预测机制从空间位置中解耦,我们为每个锚框预测类别和objectness。像YOLO一样,objectness预测仍然预测gt和被建议的框的IOU,类别预测预测类别的条件概率,条件是存在一个目标。 使用锚框时,精确度略有下降,但召回率显著增加。召回率的增加意味着我们的模型有更多的改进空间。 -
维度集群。当使用锚框时,遇到两个问题。第一个问题是锚框尺寸是手工挑选的。虽然网络可以学习适当地调整框,但如果我们为网络选择更好的先验,可以使网络更容易学习预测好的检测。 我们不再手工选择先验信息,而是在训练集的边界框上运行k-means聚类来自动找到好的先验信息。关于距离度量,我们使用
d
(
b
o
x
,
c
e
n
t
r
o
i
d
)
=
1
?
I
O
U
(
b
o
x
,
c
e
n
t
r
o
i
d
)
d(box,centroid) = 1 ? IOU(box,centroid)
d(box,centroid)=1?IOU(box,centroid)我们对k的各个值运行k-means,并以最接近的质心绘制平均IOU,见下图。我们选择k = 5作为模型复杂性和高召回率之间的一个很好的权衡。聚类中心与人工选择的锚框有显著不同。短而宽的盒子更少,高而薄的盒子更多。 VOC和COCO的聚类框尺寸。在边界框的维度上运行k-means聚类,为我们的模型获得良好的先验。左边的图像显示了在k的不同选择下得到的平均IOU。我们发现k = 5给出了一个很好的召回率与模型复杂性的权衡。右图显示了VOC和COCO的相对质心。这两套先验都比较高和薄,COCO比起VOC有更大的尺寸变化。 并且通过实验证明了聚类比使用手工挑选的先验结果要好得多。 -
直接定位预测。使用锚框,遇到的第二个问题是:模型不稳定,特别是在早期迭代期间。大多数不稳定性来自于预测框的(x, y)位置时。在区域提议网络(RPN)中,网络预测
t
x
t_x
tx?、
t
y
t_y
ty?和
(
x
,
y
)
(x,y)
(x,y)中心坐标时计算如下: 例如,
t
x
=
1
t_x=1
tx?=1的一个预测将使框向右移动锚框的宽度,
t
x
=
?
1
t_x=-1
tx?=?1的预测将使框向左移动锚框的宽度。 这个公式是不受约束的,所以任何锚框都可以在图像中的任何点结束,而不用不管预测框的位置是什么。随机初始化的模型需要很长时间才能稳定来预测合理的偏移量。 因此,不预测偏移量,而是沿用YOLO方法,预测相对于网格单元位置的位置坐标,这就将gt限制在了0、1之间,我们使用logistic激活函数来使网络预测落到这个范围。 在输出特征图映射中,网络在每个网格单元预测了5个边界框,每个边界框有5个值,
t
x
,
t
y
,
t
w
,
t
h
,
t
o
t_x,t_y,t_w,t_h,t_o
tx?,ty?,tw?,th?,to?。如果网格单元偏移图像左上角
(
c
x
,
c
y
)
(c_x,c_y)
(cx?,cy?),边界框先前的宽度和高度为
p
w
,
p
h
p_w,p_h
pw?,ph?,那么预测结果这样对应: 如下图: 上图为带有维度先验和位置预测的边界框。预测出框的宽度和高度来作为簇心的偏移量。使用sigmoid函数预测出相对于滤波器应用位置的框中心坐标。 由于我们对位置预测进行了约束,使得参数化更容易学习,使得网络更稳定。使用维度集群并直接预测边界框的中心位置,使YOLO比使用锚框的版本提高了近5%。 -
细粒度特征。改进后的YOLO预测一个13 × 13的特征图,对于大目标来说已经足够了,但是如果本地化小目标,网络更能从细粒度特征中获益。我们简单地添加一个passthrough层,以26 × 26的分辨率引入前一个层的特征。 passthrough层将相邻特征叠加到不同的通道而不是空间位置,从而实现较高分辨率的特征和低分辨率特征的结合,类似于ResNet中的自身映射。将26 × 26 × 512的特征图转换成13 × 13 × 2048的特征图,可以与原有的特征连接。我们的检测器在这个扩展的特征图上运行,这样它就可以访问细粒度特征。这使性能提高了1%。如下图: passthrough 层本身是不学习参数的,直接用前面的层的特征重排后拼接到后面的层,越在网络前面的层,感受野越小,有利于小目标的检测。 -
多尺度训练。原始的YOLO使用448 × 448的输入分辨率。通过添加锚框,我们将分辨率更改为416×416。由于我们的模型只使用卷积和池层,它可以动态地调整大小。我们希望YOLOv2能够运行在不同尺寸的图像上,因此将其训练到模型中。 每隔几次迭代就改变网络,而不是固定输入图像的大小。每10批,网络选择随机一个新的图像大小。由于模型将样本下采样32倍,因此输入图像大小选择32的倍数。 这种机制迫使网络学会跨各种输入维度很好地预测。这意味着同一个网络可以以不同的分辨率预测探测结果。络在较小的尺寸下运行得更快,所以YOLOv2可以在速度和准确性之间轻松地进行权衡。 在PASCAL VOC 2007上的检测比较。YOLOv2比以往的检测方法更快、更准确。它还可以在不同的分辨率下运行,在速度和精度之间轻松权衡。每个YOLOv2条目是有相同权重的相同训练模型,只是评估时输入图像的大小不同。 各种模型在VOC 2007上的精度和速度 YOLO到YOLOv2的路径。列出的大多数设计决策都会导致mAP的显著增加。两个例外是切换到带锚的完全卷积网络和使用新的网络。切换到锚框的方法在不改变mAP的情况下提高了召回率,而使用新的网络切割计算则提高了33%。
3 更快
为了最大化性能,从头开始设计YOLOv2的速度。 大多数检测框架依赖VGG-16作为基本特征提取器。YOLO框架使用基于Googlenet架构的自定义网络。这个网络比VGG-16更快,然而,它的准确性略低于VGG16。
-
Darknet-19。类似于VGG模型,大多使用3×3的filters,并且每次池化步骤后将通道数增加到2倍。使用全局平均池化来进行预测,以及1 × 1过滤器来压缩3 × 3卷积之间的特征表示。使用批量归一化来稳定训练,加快收敛速度,并对模型进行正则化。我们的最终模型,称为Darknet-19,有19个卷积层和5个最大池化层。 -
训练分类。在标准ImageNet 1000类分类数据集上训练160个epoch,使用随机梯度下降,初始学习率为0.1,多项式速率衰减为4,权值衰减为0.0005,动量为0.9,使用Darknet神经网络框架。使用标准的数据增强技巧,包括随机裁剪、旋转、色调、饱和度和曝光转换。 在24×24的图像上训练完之后,微调网络有一个更大的输入,448。利用之前训练好的参数我们训练10个epoch,学习率为
1
0
?
3
10^{-3}
10?3。 -
训练检测。删除最后的卷积层,添加三个3 × 3卷积层,每个卷积层有1024个filters,最后是一个1 × 1的卷积层,这个卷积层输出的通道数就是我们检测输出的数量。例如对于VOC数据集,每个网格预测5个框,每个框有5个表示坐标的值,还有20个类别,所以最后一个卷积层的filters就是
5
×
(
5
+
20
)
=
125
5×(5+20)=125
5×(5+20)=125。还添加了一个passthrough层从最后的3×3×512层到倒数第二个卷积层,这样模型可以更好地利用细粒度特征。 训练160个epoch,初始学习率为
1
0
?
3
10^{-3}
10?3,在第60个epoch和第90个epoch时都除以10。使用0.0005的权重衰减和0.9的动量。我们使用了与YOLO和SSD类似的数据增强,包括随机裁剪、颜色转换等。我们对COCO和VOC使用相同的训练策略。
4 更强
提出了一种在分类和检测数据上联合训练的机制。这种方法使用用于检测的被标记的图像来学习特定的检测信息像边界框坐标预测和目标,还有如何分类常见的目标。此方法使用仅有类别标签的图像来拓展可识别的类别的数量。 在训练过程中,我们混合了检测和分类数据集的图像。当网络看到标记为检测的图像时,可以基于完整的YOLOv2损失函数进行反向传播。当看到一个分类图像时,只从体系结构的特定分类部分反向传播损失。 这个方法存在一些挑战。比如ImageNet拥有超过100个品种的狗,包括“诺福克梗”、“约克郡梗”和“贝灵顿梗”,COCO数据集上只有”狗“这个类别。大多数分类方法在所有可能的分类中使用softmax层来计算最终的概率分布,而使用softmax假设类是互斥的,这就给组合数据集带来了问题,因为类“诺福克梗”和“狗”并不是互斥的。怎么办呢?可以使用一个多标签模型来组合没有假设互斥的数据集。这种方法忽略了我们所知道的关于数据的所有结构,例如,所有COCO类都是互斥的。
- 分层分类。如果一幅图像被标记为“诺福克梗”,它也会被标记为“狗”和“哺乳动物”,等等
- 将分类和训练联合。使用COCO检测数据集和完整ImageNet版本的顶级9000类创建了组合数据集。当网络看到一个检测图像时,会反向传播。对于分类损失,只在相应的标签级别或以上反向传播损失。例如,如果标签是“狗”,我们会将任何误差分配给树中更低级别的预测。
当看到一个分类图像时,只反向传播分类损失。要做到这一点,就意味着找到预测该类的最高概率的边界框,然后在预测的树上计算损失。假设预测框与gt标签至少有0.3的IOU,并基于这个假设反向传播目标损失。
5 结论
YOLOv2:
- 更快
- 在各种图像尺寸下运行
- 检测9000种以上的目标类别
总结感悟
- Faster R-CNN、YOLOv2都用到了锚框,YOLOv1没有用到锚框。
- 修改模型注意评价指标之间的权衡,可能某一个指标降了,某一个升了。
|