yolov2

YOLOv2

Add BN

使用BN层提高准确度(Accuracy improvements)

  • 神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同, 那么网络的泛化能力也大大降低; 另外一方面,一旦每批训练数据的分布各不相同, 那么网络的 Batch 梯度下降算法就要在每次迭代都去学习适应不同的分布, 这样将会大大降低网络的训练速度。
  • 解决办法是对数据都要做一个归一化预处理。YOLOv2网络通过在每一个卷积层后添加 批归一化 (batch normalization) ,极大的改善了收敛速度同时减少了对其它正则化方法的依赖(舍弃了 Dropout 优化后依然没有过拟合),使得mAP获得了2%的提升。

High Resolution Classifier [Focusing on backbone]

高分辨率分类器(High-resolution classifier )

  • Train on ImageNet (224 x 224) // Model trained on small images may not be good
  • Resize & Finetune on ImageNet (448 x448) // So we finetune the model on larger images
  • Finetune on dataset // To let the model be used to larger images
  • We get 13 x 13 feature maps finally

所有State-Of-The-Art的检测方法都在ImageNet上对分类器进行了预训练。从AlexNet开始,多数分类器都把 输入图像Resize到256%20%5Ctimes%20256以下,这会容易丢失一些小目标的信息。

YOLOv1训练由两个阶段组成。 首先,训练像VGG16这样的分类器网络。 然后用卷积层替换全连接层,并端到端地重新训练以进行目标检测。 YOLOv1先使用224%20%5Ctimes%20224的分辨率来训练分类网络,在训练检测网络的时候再切换到448%20%5Ctimes%20448的分辨率,这意味着YOLOv1的卷积层要重新适应新的分辨率,同时YOLOv1的网络还要学习检测网络。

直接切换分辨率,YOLOv1检测模型可能难以快速适应高分辨率。所以YOLOv2增加了在ImageNet数据集上使用 输入来 finetune 分类网络这一中间过程(10 epochs),这可以使得模型在检测数据集上微调之前已经适应高分辨率输入。YOLOv2 以224%20%5Ctimes%20224图片开始用于分类器训练,但是然后使用10个epoch再次用448%20%5Ctimes%20448图片重新调整分类器。让网络可以调整滤波器来适应高分辨率图像,这使得检测器训练更容易。使用高分辨率的分类网络提升了将近4%的mAP。

Fine-Grained Features

更细粒度的特征(Fine-Grained Features)

  1. Lower features are concatenated directly to higher features
  2. A new layer is added for that purpose: reorg

浅层网络学到的是low-level信息,深层网络学到的是high-level信息。浅层信息包括预测框的位置信息,对目标的定位有很大的作用,决定是何种物体的是深层语义信息,所以需要将两种信息相结合。

yolov2

  • 卷积层逐渐减小空间维度。 随着相应的分辨率降低,检测小目标变得更加困难。 其他目标检测器(如 SSD)可以从不同的特征图层中找到目标。 所以每一层都专注于不同的尺度。
  • YOLO采用了一种称为 passthrough 的不同方法。 它将28%C3%9728%C3%97512层重整形为14%C3%9714%C3%972048,然后将其与原始的14%C3%9714%C3%971024输出层concat连接。 在新的14%C3%9714%C3%973072层上应用卷积滤波器来进行预测。
    YOLOv2使用该方法,进行特征融合,使得模型提升了1%的提升。

Multi-Scale Training

多尺度训练

  • Remove FC layers: Can accept any size of inputs, enhance model robustness.
  • Size across 320, 352, …, 608. Change per 10 batch [border % 32 = 0, decided by down sampling]

yolov2

  • 由于YOLOv2模型移除全连接层后只有卷积层和池化层,所以YOLOv2的输入可以不限于416×416大小的图片。
  • 为了增强模型的鲁棒性,YOLOv2采用了多尺度输入训练策略,具体来说就是在训练过程中每间隔一定的迭代(iterations)之后改变模型的输入图片大小。
  • 由于YOLOv2的为32倍下采样,输入图片大小选择一系列为32倍数的值: {320, 352,…, 608} ,输入图片最小为320%C3%97320,此时对应的特征图大小为10%20%C3%97%2010;而输入图片最大为608%20%C3%97%20608,对应的特征图大小为19%20%C3%97%2019
  • 通过多尺度训练出的模型可以预测多个尺度的物体。并且,输入图片的尺度越大则精度越高,尺度越低则速度越快, 因此YOLO v2多尺度训练出的模型可以适应多种不同的场景要求。
  • 在训练过程,每隔10个batch随机选择一种输入图片大小,然后只需要修改对最后检测层的处理就可以重新训练。
  • 另外,可以使用较低分辨率的图像进行目标检测,但代价是准确度。 这对于低GPU设备的速度来说是一个很好的权衡。
  • 在288×288时,YOLO的运行速度超过90FPS,mAP几乎与Fast R-CNN一样好。 在高分辨率下,YOLO在VOC 2007上实现了78.6 mAP

Anchor Boxes

聚类

在YOLO-V1中使用全连接层进行bounding box预测(要把1470×1的全连接层reshape为7×7×30的最终特征),这会丢失较多的空间信息,导致定位不准。Faster-RCNN和SSD中的先验框个数和宽高维度是手动设置不同比例(1:1;1:2;2:1)的先验框,因此很难确定设计出的一组预选框是最贴合数据集的,也就有可能为模型性能带来负面影响。

  • Motivation
  • 假设一开始就可以选择更好和更具代表性的先验框尺寸,那么网络应该更容易学习准确的预测位置。
  • 解决方案
  • 统计学习中的 K-means聚类方法,通过对数据集中的 GT Box 做聚类,找到 GT Box 的统计规律。以聚类个数𝑘为锚定框个数,以𝑘个聚类中心Box的宽高维度为宽高的维度.

如果按照标准K-means使用欧式距离函数,大框比小框产生更多误差。但是,我们真正想要的是使得预测框与 GT框的有高的IOU得分,而与框的大小无关。因此采用了如下距离度量
d%28box%2C%20centroid%29%20%3D%201-%20IOU%28box%2Ccentroid%29
IOU越大,边框距离越近。即聚类分析时选用Bbox与聚类中心Bbox之间的IOU值作为距离指标,聚类结果如下图:

yolov2
上面左图:随着𝑘的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到𝑘值为5 。
上面右图:5个聚类的中心与手动挑选的框是不同的,扁长的框较少,瘦高的框较多。作者文中的对比实验说明了 K-means 方法的生成的框更具有代表性,使得检测任务更容易学习。

YOLO-V2中的anchor box可以同时预测类别和坐标。跟YOLO-V1比起来,去掉最后的池化层,确保输出的卷积特征图有更高的分辨率。缩减图片的输入尺寸,分辨率为416×416,目的是让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。因为大物体通常占据了图像的中间位置,可以只用一个中心的cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测(增加计算复杂度),所以在YOLOv2 设计中要保证最终的特征图有奇数个位置。

YOLOv2使用卷积层降采样(factor=32),使得输入卷积网络的416×416的图片最终得到13×13的卷积特征图(416/32=13)。每个中心预测5种不同大小和比例的建议框。由于都是卷积不需要reshape,很好的保留的空间信息,最终特征图的每个特征点和原图的每个Cell一一对应。

YOLOv2把预测类别的机制从空间位置(Cell)中解耦,由Anchor Box同时预测类别和坐标。

  • YOLO v1是由每个Cell来负责预测类别,每个Cell对应的2个Bounding Box 负责预测坐标(YOLOv1中最后输出7×7×30的特征,每个Cell对应1×1×30,前10个主要是2个Bounding Box用来预测坐标,后20个表示该Cell在假设包含目标的条件下属于20个类别的概率)。
  • YOLO v2中,不再让类别的预测与每个Cell(空间位置)绑定一起,而是全部放到Anchor Box中。

yolov2

由于YOLO v2将类别预测从cell级别转移到边界框级别,在每一个区域预测5个边框,每个边框有25个预测值,因此最后输出的特征图通道数为125。其中,一个边框的25个预测值分别是20个类别预测、4个位置预测及1个置信度预测值。这里与v1有很大区别,v1是一个区域内的边框共享类别预测,而这里则是相互独立 的类别预测值。

YOLOv1只能预测98个边界框(7 × 7 × 2),而YOLOv2使用anchor boxes之后可以预测上千个边界框 (13 × 13 × 5 = 845) 。所以使用anchor boxes之后,YOLOv2的召回率大大提升,由原来 的81%升至88%。

直接位置预测
YOLOv2沿用v1版本的方法:预测边界框中心点相对于对应cell左上角位置的相对偏移量,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移量,这样预测值都在%280%2C1%29范围内。根据边界框预测的4个偏移值,可以使用如下公式来计算边界框实际中心位置和长宽:

yolov2
其中,%28c_x%2Cc_y%29为cell的左上角坐标。在上图中,当前的cell的左上角坐标为%281%2C1%29。由于sigmoid函数的处理,边界框的中心位置会被约束在当前cell的内部,防止偏移过多,然后p_wp_h是先验框的宽度与高度,它们的值也是相对于特征图(这里是13%20%5Ctimes%2013,我们把特征图的长宽记作H,W)大小的,在特征图中的cell长宽均为1。这样我们就可以算出边界框相对于整个特征图的位置和大小了。如果想得到边界框在原图的位置和大小,那就乘以上网络下采样的倍数。

Darknet-19

YOLOv2采用了一个新的基础模型(特征提取器),称为Darknet-19,包括19个卷积层和5个max pooling层。

yolov2

  • Darknet-19 与 VGG16 模型设计原则是一致的,主要采用3%C3%973卷积,采用2%C3%972的最大池化层之后,特征图维度降低2倍,而同时将特征图的通道增加两倍。用连续3%C3%973卷积替代了v1版本中的7%C3%977卷积,这样既减少了计算量,又增加了网络深度。此外,DarkNet去掉了全连接层与Dropout层。
  • Darknet-19 ,包括19个卷积层 和 5个max pooling层,采用 global avg pooling+Softmax 做预测,与NIN(Network in Network)类似,并且在3%C3%973卷积之间使用1%C3%971卷积来压缩特征图通道以降低模型计算量和参数。
  • DarkNet的实际输入为416%20%5Ctimes%20416,没有全连接层(FC层),5次降采样到13%20%5Ctimes%2013
  • DarkNet使用了BN层,这一点带来了2%以上的性能提升。 BN层有助于解决反向传播中的梯度消失与爆炸问题,可以加速模型的收敛,同时起到一定的正则化作用,降低模型过拟合。BN层的具体位置是在每一个卷积之后,激活函数LeakyReLU之前。
  • 在ImageNet分类数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数较小。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%
  • Passthrough层:DarkNet还进行了深浅层特征的融合,具体方法是将浅层26%20%5Ctimes%2026%20%5Ctimes%20512的特征变换为13%20%5Ctimes%2013%20%5Ctimes%202048,这样就可以直接与深层13%20%5Ctimes%2013%20%5Ctimes%201024的特征进行通道拼接。这种特征融合有利于小物体的检测,也为模型带来了1%的性能提升。

yolov2

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
心中带点小风骚的头像心中带点小风骚普通用户
上一篇 2022年3月15日 下午3:03
下一篇 2022年3月15日 下午3:23

相关推荐