YOLO9000: Better, Faster, Stronger

一、前言

  • 大多数目标检测方法的检测种类有限,仅能检测一小部分目标

  • 本文使用了目标分类的分层视图的方法,允许我们将不同的数据集组合在一起

  • 本文提出了一种联合训练算法,能够在检测和分类数据上训练目标检测器。

  • 利用带标签的检测图像数据集来训练网络学习能精确定位物体的能力,同时使用分类图像数据集来训练以增加鲁棒性。

二、模型和方法

2.1 设计思路:

  • 简化网络,以提高网络的检测速度
  • 将多种方法结合起来使用,以增强网络的学习能力

YOLO9000: Better, Faster, Stronger
上表中,列出的大部分设计方法都会带来mAP的显著增加,除了使用anchor box和使用新网络这两种方法

2.2 设计方法

2.2.1 批标准化

操作:

  • 在YOLO的所有卷积层上添加批标准化

结果:

  • 显著改善了收敛性
  • 有助于模型的正则化,消除了对其他形式正则化的需求
  • 使用批标准化后,可以移除dropout且不会导致过拟合
  • 在mAP中获得了超过2%2\%的改进

2.2.2 高分辨率分类器

操作:

  • 将原来分类器网络训练的224×224的输入改为448×448
  • 在ImageNet上以448×448的分辨率对分类网络进行10个epoch的微调
  • 在目标检测数据集上微调上述得到的网络

结果:

  • 这个高分辨率分类网络增加了近4%4\%的mAP

2.2.3 采用先验框(Anchor Box)

说明:
YOLO的卷积层会将图像下采样32倍,448x448,经过下采样,最终得到的14x14的feature map,而416x416,经过下采样,最终得到的是13x13的feature map,奇数尺寸的feature map上,其中心点唯一,这样能更好的预测位于输入图像中心的目标位置

操作:

  • 从YOLO中移除全连接层,并使用anchor box来预测边界框
  • 消除了一个池化层,使网络卷积层输出具有更高的分辨率
  • 操作416×416的输入图像而不是448×448,为了最终得到奇数尺寸的feature map,从而使得中心点只有一个
  • 将分类预测和位置预测分离成两个部分,并针对每个acnhor box进行分类和位置的预测

结果:

  • mAP有微小的下降,但召回率有较大的提升
  • 没有acnhor box,mAP:69.5,召回率:81%
  • 有acnhor box,mAP:69.2,召回率:88%

2.2.4 聚类分析获取先验框尺度

说明:
在YOLO模型上采用anchor boxes有两个关键问题,第一:anchor box的尺度为人工设定

在Faster R-CNN和SSD中,先验框的尺度(长和宽)都是手动设定的,带有一定的主观性。如果选取的先验框尺度比较合适,那么模型更容易学习,从而做出更好的预测。因此,YOLOv2采用k-means聚类方法对训练集中的边界框做了聚类分析。

因为设置先验框的主要目的是为了使得预测框与ground truth的IOU更好,所以聚类分析时选用box与聚类中心box之间的IOU值作为距离指标

操作:

  • 在训练集边界框(Ground truth)上进行k-means聚类,以自动找到更好的先验框尺寸
  • 选择如下公式来度量距离:d(box,centroid)=1IOU(box,centorid)d(box, centroid)=1-IOU(box, centorid),其中:
    • centroid是聚类时被选作中心的边界框
    • box就是其它边界框
    • d就是两者间的“距离”,IOU越大,“距离”越近

结果:

  • 通过聚类分析,发现数据集中的边界框尺度偏向于高瘦型
  • 选择了5个聚类中心框,因为此时模型复杂度和召回率之间有较好的折中,并且与使用9个anchor box时的性能相当
    • 使用5个聚类框,Avg IOU:61.0
    • 使用9个anchor box,Avg IOU:60.9
      YOLO9000: Better, Faster, Stronger

上图右边显示了5种聚类得到的先验框,VOC和COCO数据集略有差异,不过都有较多的瘦高形边框

2.2.5 约束预测边框的位置

说明:
在YOLO模型上采用anchor boxes第二个关键问题:模型预测的位置不稳定,尤其是在训练早期阶段,其位置预测公式为:

  • x=(txwa)+xax = (t_x*w_a)+x_a

  • y=(tyha)+yay = (t_y*h_a)+y_a

    其中:

    • x,y为预测框的中心
    • xa,yax_a, y_a为先验框(anchor box)的中心
    • wa,haw_a, h_a为先验框(anchor box)的宽高
    • tx,tyt_x, t_y变换量,是模型学习的参数

注意:

  1. 论文中* x=(txwa)xax = (t_x*w_a)-x_a是减号,按Faster R-CNN应该是加号
  2. 模型预测出来的实际上就是变换量tx,tyt_x, t_y,而具体的位置是按上述公式计算出来的

如当tx=1t_x=1时边界框将向右偏移先验框的一个宽度大小,而当tx=1t_x=-1时边界框将向左偏移先验框的一个宽度大小,因此每个位置预测的边界框可以落在图片任何位置,这导致模型的不稳定性,在训练时需要很长时间来预测出正确的offsets

操作:

  • 将预测边框的中心约束在特定gird网格内,即预测边界框中心点为相对于对应cell左上角位置的相对偏移值
  • 使用sigmoid**函数,将预测值限定在0-1范围内
  • feature map上的每个cell设置5个anchor box,每个anchor box预测一个边界框,预测值为(tx,ty,tw,th,to)(t_x,t_y,t_w,t_h,t_o)

YOLO9000: Better, Faster, Stronger
预测公式调整为:
bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr(object)IOU(b,object)=σ(to)b_x = \sigma(t_x)+c_x\\ b_y = \sigma(t_y)+c_y\\ b_w = p_we^{t_w}\\ b_h=p_he^{t_h}\\ Pr(object)*IOU(b, object) = \sigma(t_o)
其中,

  • bx,by,bw,bhb_x, b_y,b_w,b_h为预测框的中心和宽高
  • Pr(object)IOU(b,object)Pr(object)*IOU(b, object)为预测框的置信度

结果:

  • 通过对边界框的位置预测值进行约束,使得模型训练时更加的稳定
  • 结合聚类分析得到先验框尺度与这种预测方法,YOLOv2的mAP值提升了约5%

2.2.6 passthrough层检测细粒度特征

说明:
目标检测的输入图像中的目标有大有小,在经过多层的卷积神经网络进行特征提取得到最终的特征图时,较小目标的特征可能已经不太明显甚至被忽略掉了,所以,为了更好的检测较小的目标物体,最后输出的特征图需要保存一些更细节的信息。

操作:

  • 引入了passthrough层,其作用类似于ResNet中的恒等映射
  • 将相邻的feature map在通道的维度上进行堆叠,即将较高分辨率的feature map与较低分辨率的feature map进行连接和融合

结果:

  • 引用了passthrough层之后,YOLOv2提升了1%的性能

YOLO9000: Better, Faster, Stronger
如上图所示,在最后一个pooling之前的feaure map大小为26x26x512,一方面将其拆成4份,另一方面经过池化和卷积得到13x13x1024的feature map,最后再将这两部分在通道的维度上进行叠加,得到输出的feature map
YOLO9000: Better, Faster, Stronger
feature map具体的拆分方式如上图所示,其中通道的维度省略没有画出。

2.2.7 使用多尺度图像进行训练

说明:
因为YOLOv2中只存在卷积层和池化层,所以模型可以适应不同尺寸的图像输入,因此,为了增强模型的鲁棒性,YOLOv2采用了多尺度图像进行训练的策略

操作:

  • 训练时每10个batch就随机更换一种尺寸
  • 然后只需要修改对最后检测层的处理就可以重新训练

YOLO9000: Better, Faster, Stronger
结果:

  • 采用较小分辨率时,YOLOv2的mAP值略低,但是速度更快
  • 采用高分辨输入时,mAP值更高,但是速度略有下降
    YOLO9000: Better, Faster, Stronger

2.3 模型结构

2.3.1 BackBone

  • 使用了类似googlenet的网络结构作为基础特征提取结构
  • 该网络比VGG-16更快,在前向计算时仅使用85.2亿次浮点运算

说明:
大部分检测框架是基于VGG-16作为特征提取网络,但是VGG-16比较复杂,耗费计算量大。

YOLO框架使用了类似googlenet的网络结构,计算量比VGG-16小,速度更快,但是准确率比VGG16略低。

对于224x224 single-crop的top-5 accuracy,上述结构的YOLO模型在ImageNet上为88.0%,而VGG-16为90.0%。

2.3.2 Darknet-19

为了进一步提升速度,本文提出了一个新的分类网络(Darknet-19)来作为YOLOv2的基础模型,其结构如下表所示:
YOLO9000: Better, Faster, Stronger
模型总体结构:

  • 19个卷积层
  • 5个最大池化层
  • 1个全局平均池化层

特点:

  • 大多使用3x3的卷积核
  • 每个池化层后feature map的通道数加倍

2.4 联合训练机制

本文提出了将分类数据和检测数据进行综合的联合训练机制,即使用带标签的目标检测数据训练模型对目标进行分类和定位的能力,再使用带标签的分类数据集来扩展模型对多类别的识别能力。

具体操作:

  • 在训练的过程中,混合目标检测和分类的数据集
  • 当网络接受目标检测的训练数据,反馈网络采用YOLOv2 loss函数
  • 当网络接受分类训练数据,反馈网络只更新部分网络参数

缺点:

  • 训练方法比较复杂且有一定的难度
  • 联合训练需要合并标签的类别
  • 需要一个多标签的模型来综合数据集,使类别之间不相互包含

说明:

  • 目标检测数据集仅包含常见目标和标签(比如狗,船),而图像分类的数据集所包含的标签种类更加广泛和细致,比如狗,ImageNet上包含超过100种的狗的类别,因此进行联合训练需要将这些标签进行联合
  • 目标检测的分类属于多分类任务,多分类任务大都采用softmax输出,而采用softmax输出的前提是类别之间不能互相包含,但是分类数据集和检测数据综合,就会出现相互包含的情况,如犬和牧羊犬。因此需要一个多标签模型来综合数据集,使得类别之间不互相包含

2.4.1 多层分类

YOLO9000: Better, Faster, Stronger

2.4.2 采用Wordtree综合数据集

YOLO9000: Better, Faster, Stronger

三、总结

3.1 解决的问题

问题:

  • YOLO与Fast R-CNN相比的误差分析表明,YOLO造成了大量的定位误差
  • 与基于区域提出的方法相比,YOLO召回率相对较低

3.2 主要创新点

  • 使用一种新颖的,多尺度训练方法

  • 提出了一种联合训练机制

  • 同样的YOLOv2模型可以以不同的尺寸运行,从而在速度和准确性之间提供了一个简单的折衷

  • 比使用ResNet的Faster R-CNN和SSD等先进方法表现更出色,同时仍然运行速度显著更快

  • 它预测超过9000个不同目标类别的检测结果,并且它仍然能实时运行

四、参考文献

[1] https://zhuanlan.zhihu.com/p/35325884
[2] https://zhuanlan.zhihu.com/p/47575929
[3] https://zhuanlan.zhihu.com/p/25052190
[4] https://blog.****.net/u010579901/article/details/79387098
[5] https://www.jianshu.com/p/7e196378eb26
[6] https://blog.****.net/qq_37643960/article/details/91062896