V2:
Better、Faster、Stronger:
1.Batch Normalization
在所有卷积层后激活函数前增加BN层
【BN层:
参考1: https://zhuanlan.zhihu.com/p/24810318
参考2: https://www.cnblogs.com/guoyaohua/p/8724433.html
随着网络深度加深,深层神经网络在做非线性变化前的激活输入值的分布会逐渐向非线性函数的取值区间的上下限两端靠近,导致收敛速度慢、反向传播时低层神经网络的梯度消失等问题。
于是BN提出:对每个隐层神经元做normalization操作,并且为了保持非线性还增加两个参数做反normalization操作】
2.High Resolution Classifier
YOLO V1先在224*224的输入图像训练分类网络再提高到448*448进行检测。网络在进行检测的学习的同时还需要适应新分辨率。
YOLO V2先将分类网络在输入图片分辨率为448的ImageNet数据集上训练10 epoch,再使用检测数据集(例如coco)进行微调。高分辨率预训练使mAP提高了大约4%
3.Convolutional With Anchor Boxes
YOLOV1使用的是全连接层直接预测boundingbox坐标,
YOLOV2移除全连接层,借鉴Faster rcnn的思想引入anchor机制,使用卷积和anchorbox预测boundingbox。
并且移除其中一个pooling层(为了检测所用的特征图的分辨率更高)
【引入anchor机制后,有两个问题:
第一个问题是prior(模版框)是手动挑选,即anchor prior一开始的大小是人为设定的,所以有了下面在第4点的改进;
第二个问题是在训练早期时预测boundingbox的位置不稳定,总是能够跑到图像任意位置上,所以有了第5点的改进;】
4.Dimension Clusters
anchor宽高由k-means聚类产生
anchor prior一开始的大小是人为设定的,虽然说box可以在后期通过线性回归调整,但如果一开始选用更合适的prior,网络会学习地更轻松,因此我们尝试使用k-means聚类分析,统计出更符合样本中object尺寸的prior,并且在这里面的k-means算法也做了修改,没有用标准k-means(使用欧几里得距离的标准k-means会导致 较大box比较小box出现更多错误 的情况),而是采用

这个公式来计算距离。
并且对k的取值做了多次试验,结果选择了k=5,在模型复杂度和高recall率间做了一个折中

在k=5时聚类效果和faster rcnn中anchor数=9时接近,说明用k-means生成prior会让模型更好
5.Direct Location Prediction
引入anchor机制后模型不稳定 这个问题主要来自faster rcnn中anchor机制的检测方式如下图,由于在早期时没有把tx,ty约束,因此boundingbox会出现在图像上任何的位置,要在很长一段时间之后才会稳定产生合适的offsets:

【其中x,y是预测的boundingbox坐标,wa,ha是anchor的宽高,xa,ya是anchor的中心点坐标】
而后将检测方法改为如下图,采用类似YOLOV1直接预测坐标,不过此时V2预测的是一个相对grid cell的位置:

【其中bx,by,bw,bh分别是预测的boundingbox坐标,而tx,ty,tw,th是需要学习的参数。cx,cy是当前grid cell相对于图像左上角的距离,pw,ph是prior的宽高,可以看下图做参照;
下面是置信度计算;
函数是sigimod函数;】

6.Fine-Grained Features:
通过passthrough层,将相邻特征堆叠到不同通道上,将高分辨率和低分辨率特征串起来,像resnet;
使mAP提高1%
7.Multi-Scale Training:
每隔几个iteration就随机选择一种新的输入图像尺寸,由于下采样倍数为32,所以选择32的倍数的尺寸
这样就强迫网络在不同输入尺寸上做预测
一些性能比较:




【Faster】
YOLO使用的是基于GoogleNet改良的网络框架,这个网络比VGG快但是精准度没有它好。
YOLOV2用的是Darknet-19,其在YOLO的基础上进行改进,和VGG相似,主要使用3*3的filter,并在每次池化之后将通道数增加一倍。如下图:

Darknet-19,19层卷积和5层maxpooling。只需要55.8亿次(5.58 billion)处理一幅图像,并且在ImageNet有72.9%的top-1准确率和91.2%的top-5准确率。
- Training for classification:
使用随机梯度下降法在标准ImageNet1000类数据集上训练网络160epoch,
初始学习率为0.1,多项式速率递减为4次方(polynoial rate decay with a power of 4),权重衰减为0.0005,动量为0.9。
在训练过程中,使用了数据增强技巧如random crops、rotations(旋转)、hue(色调)、saturation(饱和度)、exposure shifts(曝光度转变)。
如上所述,对224*224对图像进行初始训练后,我们在更高分辨率的图像(448)上对网络进行fine tune。在fine tune中,我们用上述参数进行训练,但只会进行10epoch并且学习率从0.001开始,在这高分辨率情况下,网络top-1准确率达到76.5%,top-5准确率达到93.3%。
- Training for detection:
对网络进行修改,去掉最后一个卷积层,增加三个3*3卷积层,每个卷积层有1024个filter,最后是一个1*1卷积层。
对VOC,预测5个框的5个元素(坐标和置信度),每个框有20个类别,因此有5*(+20)个filter,还从最后的3*3*512层增加一个passthrough层,来使模型可以使用细粒度特征。
从0.001的初始学习率训练网络160epoch,(divding it by 10at 60 and 90 epochs?啥意思,在60和90epoch时/10?),使用0.0005的权重衰减(weight decay)和0.9的动量(momentum)。
使用和COCO、VOC同样的数据增强策略(随机裁剪、颜色转换等)。
【Stronger】
提出一种联合训练方法,将检测和分类分开训练,
使用检测数据集学习监测信息如坐标和目标类,分类数据集用于扩大可检测类别。
在训练过程中混合了来自检测、分类数据集的图像。当网络看到被标记为检测的图像时,模型根据完整的YOLOV2损失函数进行反向传播,当他看到分类图像时,只从模型的分类特定部分反向传播损失。
这种方法中,由于分类数据集比分类数据集的类别更深入更多,如ImageNet中有一百多个狗的品种,而检测数据集可能只是把它分成“狗”。这就需要一种方式去表达label信息。
- Hierarchical classification:
ImageNet的标签是从WordNet中提取的,WrokNet是一个语言数据库,用于构造概念和他们的关系。它的结构是一个有向图而不是一个树,因为语言是复杂的,“狗”既是“犬类”也是“家畜”。但我们不需要完整图结构,我们通过从ImageNet这个概念建立一棵分层的树来简化问题。
为了建立这个树,我们查看了ImageNet中的回视觉名词,并查看了它们通过WorkNet到根结点的路径,根结点也叫“physical object”。许多同义词在图中只有一条路径,因此首先把所有这些路径添加到树上,接着反复检查剩下的概念,并添加路径,使树的增长尽可能少,比如说如果一个概念有两条通往根的路径,选择较短的一条。
最后得到的结果是WordTree,一个视觉概念的分层模型。为了用WordTree进行分类,在每个节点上预测条件概率,即为在给定词下的定义词的概率。如下:
(例如在terrier节点时我们预测:)

如果计算一个特定节点的概率,只需要把其沿路径到根节点的概率相乘,如下:
(例如想知道一张图片是否为Norfolk terrier:诺福克猎犬)

(为了分类的目的,假设该图像包括一个物体,
)
为了验证这种方法,我们在使用1000类ImageNet建立的WordTree上训练Darknet-19模型。,为了建立WordTree1000,我们加入了所有的中间节点,将label space从1000扩大到了1369。在训练过程中我们在树上传播了ground true label,这样,如果一张图片被标记为“Norfolk terrier 诺福克猎犬”,他也会被标记为“dog”和“mammal”。为了计算条件概率,模型预测了一个1369个值组成的向量,softmax计算所有为同一层概念的概率。

使用和之前相同的训练参数,Darknet-19达到了71.9%的top-1准确率和90.4%的top-5准确率。尽管增加了369个额外的概念,并让我们的网络预测树状结构,但准确率只下降了一点。用这种方式的分类的好处是,在新的、未知的object上,其会分类到object最高概率的一层就不再向下。
如看到一张狗图片,但不确定是什么狗,那么“狗”的置信度仍然很高,只不过下一层的置信度分布降低。
这种表述(?formulation)也适用于检测。现在我们并不是假设每张照片都有一个物体,而是使用YOLOV2的objectness predictor来提供Pr(pyysical object)的值。检测器会预测一个边界框和概率树,我们向下遍历这棵树,在每一个分叉口采取最高置信度路径,直到达到某个阈值,我们就可以预测那个物体类别。
- Dataset combination with WordTree:
我们可以使用wordtree将多个数据集组合到一起,只需要将数据集的类别映射到树上的synset。如下图:

- Joint classification and detection:
我们可以使用WordTree结合数据集,训练分类和检测的联合模型,由于希望检测范围可以很大,于是使用COCO检测数据集和ImageNet完整版本中的前9000类来创建我们的联合数据集(combined dataset)。我们还需要对方法进行评估,所以另外加了imagenet检测中未包括对其他类别。
这个数据集wordtree一共有9418个类。并且由于imagenet比coco要大很多,我们要对coco多次采样(oversampling)使它们的比例呈4:1。
当他看到一个分类图像,只反向传播分类损失。要做到这一点,我们只需找到预测该类的最高概率的boundingbox并计算其预测树上的损失。我们还假设预测框(predicted box)与gound true box的IOU>0.3,根据这一假设反向传播objectness loss。
通过这种联合训练,YOLO9000可以使用COCO中的检测数据对图像物体定位,使用ImageNet中的数据对这些物体进行分类。
当我们分析YOLO9000在ImageNet上的表现,我们看到它能很好地学习新的动物类的object,但在学习服装和设备等的object时却很困难。新的动物更容易学习,因为它的对象性(?objectness)可以从COCO的animal类中概括出来,但COCO没有什么clothes类型的label,所以在“sunglass”、“swimming trunks”等label的建模就有点吃力。

浙公网安备 33010602011771号