前言
YOLOV2是对YOLOV1的改进。究竟改了什么呢?来看看标题就知道了,yolo9000,更好,更快,更强。而这个9000的意思是可以检测9000多个目标类别。
YOLOV2
摘要
- 一种最先进的实时目标检测系统,可以检测9000多个目标类别
- 在67 FPS上,YOLOv2在VOC 2007上得到76.8 mAP。在40 FPS上,YOLOv2获得78.6 mAP
- 提出一种目标检测与分类联合训练的方法
介绍
- 大多数检测方法局限于一小部分目标(如YOLOV1)
- 目标检测数据集是有限的,而分类数据集有数百万张图像,具有数万或数十万个类别。所以希望检测可以扩展到目标分类的级别
- 提出一种新的方法来利用我们已经拥有的大量分类数据,并使用它来扩展当前检测系统的范围。该方法使用对象分类的层次视图,允许将不同的数据集组合在一起。
- 还提出了一种联合训练算法,允许在检测和分类数据上训练目标检测器
更好
作者尝试了几种方法进行优化。
批归一化(Batch Normalization)
- 提升了收敛
- 提高了2%的mAP
- 甚至可以去掉dropout而不会过拟合
高分辨率分类器
使用了448*448的分辨率,提升了至少4%的mAP
卷积与锚框
我们从YOLO中移除完全连接的层,并使用锚框来预测边界框。
我们还缩小了网络以在416个输入图像上运行,而不是448×448。我们这样做是因为我们希望在我们的特征映射中有奇数个位置,这样就有一个中心单元格。
YOLO的卷积层对图像进行了32倍的采样,所以通过使用416的输入图像,我们得到了一个13 × 13的输出特征图。
YOLO每张图像只能预测98个盒子,但使用锚框,模型可以预测超过1000个。
聚类
用k-means聚类获取最好的锚框数量

从以上的结论得出,聚类iou得出k=5是最好的
直接位置预测
当与YOLO一起使用锚框时,我们遇到了第二个问题:模型不稳定,特别是在早期迭代期间。
大多数不稳定性来自于对框(x, y)位置的预测。
在区域建议网络中,网络预测值tx和ty, (x, y)中心坐标计算为:
x = ( t x ∗ w a ) + x a y = ( t y ∗ h a ) + y a x=(t_x * w_a)+x_a \\ y=(t_y*h_a)+y_a x=(tx∗wa)+xay=(ty∗ha)+ya
其中:wa、ha、xa和ya是锚框的宽、高、横坐标和纵坐标。tx和ty是偏移量。
例如,tx = 1的预测将使框向右移动锚框的宽度,tx = - 1的预测将使其向左移动相同的量。
这个公式是不受约束的,所以任何锚框都可以在图像中的任何一点结束,而不管锚框的位置是什么。在随机初始化的情况下,模型需要很长时间才能稳定到预测合理的偏移量。

如此图,左上的框要很久才到中间。
使用逻辑激活来约束网络的预测落在这个范围内(0到1)。
该网络在输出特征图的每个单元上预测5个边界框。网络为每个边界框预测5个坐标,tx, ty, tw, th和to。如果单元格从图像的左上角偏移(cx, cy),并且先前的边界框的宽度和高度为pw, ph,则预测对应于:

其中 σ \sigma σ是将tx、ty限制在0-1之间,也就是说这个偏移就只能在网格之内。


细粒度特性
用13*13的特征可以识别大目标,但是对于小目标就有点吃力。
采用一种不同的方法,简单地添加一个passthrough,以26 × 26的分辨率从早期层中获得特征。
passthrough通过将相邻的特征叠加到不同的通道中而不是空间位置来连接高分辨率特征和低分辨率特征,类似于ResNet中的映射。
将26 × 26 × 512的feature map转换成13 × 13 × 2048的feature map,可以与原始feature进行拼接。

passthrough就是拆分重组

多尺度训练
希望YOLOv2对不同大小的图像具有鲁棒性,因此我们将其训练到模型中。
我们每隔几次迭代就改变网络,而不是固定输入图像的大小。
每10批我们的网络随机选择一个新的图像尺寸。
由于我们的模型将样本降低了32倍,我们从以下32的倍数中提取:{320,352,...608}。
因此最小的选项是320 × 320,最大的选项是608 × 608。我们将网络调整到那个维度,然后继续训练。
这种机制迫使神经网络学会在各种输入维度上进行良好的预测。这意味着相同的网络可以预测不同分辨率的探测结果。网络在较小的尺寸上运行得更快,因此YOLOv2提供了速度和准确性之间的轻松权衡。
进一步的实验

输入尺寸越大,mAP越高,当然处理速度就低了,但是在544*544这样的分辨率,也能达到实时识别的能力。
更快
Darknet-19
提出了一个新的分类模型作为YOLOv2的基础。
我们的最终模型,称为Darknet-19,有19个卷积层和5个最大池化层。
Darknet-19只需要55.8亿次操作来处理图像,但在ImageNet上达到了72.9%的前1精度和91.2%的前5精度

分类训练
我们在标准ImageNet 1000类分类数据集上使用随机梯度下降训练网络,初始学习率为0.1,多项式速率衰减为4次方,权重衰减为0.0005,动量为0.9,使用darknet神经网络框架。在训练期间,我们使用标准的数据增强技巧,包括随机作物,旋转,色调,饱和度和曝光移位。
如上所述,在224 × 224的图像上进行初始训练后,我们将网络调整为更大的448。对于这种微调,我们使用上述参数进行训练,但只有10个epoch,并且以 10 − 3 10^{-3} 10−3的学习率开始。在这个更高的分辨率下,我们的网络达到了76.5%的前1精度和93.3%的前5精度。
检测训练
为了检测,我们修改了这个网络,去掉了最后一个卷积层,增加了三个3 × 3的卷积层,每个卷积层有1024个滤波器,然后是最后一个1 × 1的卷积层,其中包含检测所需的输出数量。对于VOC,我们预测5个框,每个框有5个坐标,每个框有20个类别,所以125个过滤器。我们还从最后的3 × 3 × 512层添加了一个直通层到倒数第二个卷积层,这样我们的模型就可以使用细粒度特征。
更强
我们提出了一种分类和检测数据联合训练的机制。
在训练过程中,我们混合了来自检测和分类数据集的图像。当我们的网络看到一个图像标记用于检测时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到分类图像时,我们只从体系结构中特定于分类的部分反向传播损失。(就是是检测数据集,就会走整个流程;如果是分类数据集就只走特定分类部分)
这种方法存在一些挑战。检测数据集只有常见的对象和一般的标签,如"狗"或"船"。分类数据集具有更广泛和更深的标签范围 。ImageNet上有一百多种狗,包括"诺福克梗"、"约克夏梗"和"贝德林顿梗"。如果我们想在两个数据集上进行训练,我们需要一个连贯的方法来合并这些标签。
分层分类
为了构建这棵树,我们检查ImageNet中的视觉名词,并查看它们通过WordNet图到根节点的路径,在本例中是"物理对象"。许多句法集只有一条路径通过图,所以首先我们把所有这些路径都添加到树中。然后我们迭代地检查我们留下的概念,并添加尽可能少增长树的路径。因此,如果一个概念有两条到根的路径,其中一条路径会给树增加三条边,而另一条路径只会增加一条边,我们会选择更短的路径。
最终的结果是WordTree,一个视觉概念的分层模型。为了使用WordTree进行分类,我们在给定该同义词集的每个词的概率上预测每个节点的条件概率 。例如,在"terrier"节点,我们预测:

如果我们想计算一个特定节点的绝对概率,我们只需沿着树的路径到达根节点,然后乘以条件概率。因此,如果我们想知道一张照片是否是诺福克梗,我们计算一下:

描述一下:诺福克梗的概率=诺福克梗占梗的概率 * 梗占猎犬的概率 * ... * 哺乳动物占动物的概率 * 动物占物体的概率
为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建wordtree1k,我们添加所有中间节点,将标签空间从1000扩展到1369。在训练过程中,我们在树中传播基础真理标签,这样如果一张图像被标记为"诺福克梗",它也会被标记为"狗"和"哺乳动物",等等。为了计算条件概率,我们的模型预测了一个1369个值的向量,我们计算了所有系统集的softmax,这些系统集是同一概念的同义词。

使用与之前相同的训练参数,我们的高层次Darknet-19达到了71.9%的前1准确率和90.4%的前5准确率。尽管增加了369个额外的概念,并让我们的网络预测树状结构,但我们的准确率只会略微下降。以这种方式执行分类也有一些好处。对于新的或未知的对象类别,性能会优雅地下降。例如,如果网络看到一张狗的照片,但不确定它是什么类型的狗,它仍然会以高置信度预测"狗",但在下位词中散布的置信度较低。

基于 YOLOv2 的基础架构,但为了控制模型输出的复杂度,将默认的 5 个先验框(priors/anchors)减少到 3 个 。
检测图像 (Detection image):当输入的是 COCO 这样的检测图像时,模型按照常规方式计算边界框预测、置信度预测和类别预测的损失,并进行反向传播更新参数。
分类图像 (Classification image):误差计算范围:在计算分类损失时,只对标签节点及其所有父节点(例如上图,"jet(喷气机)" 的父节点 "airplane(飞机)"、"air(飞行器)"、"vehicle(交通工具)" 等)进行误差反向传播。
个人总结

yolov2主要在几个方面进行了改进:
- 使用了批归一化(Batch Normalization),提升1%mAP
- 高分辨率分类器加到416x416,提升4%mAP
- 卷积移走全连接层
- 加入锚框
- 通过聚类算出合理的锚框数k
- 直接预测位置,限制在网格内移动,提高近5%mAP
- 加入passthrough,拼接上层细节,提供细粒度,提高近1%mAP
- 加入多尺度图片进行训练。提高4%mAP
- 使用更高分辨率输入图像(如 544x544)进行训练和推理。提供2%