YOLO V2

1. YOLO V1的缺陷回顾

     YOLO V1对相互靠近的两个物体(比如紧挨在一起且落在同一个格子上),以及很小的群体(比如易拉罐),检测效果不好,这是因为一个网格中只预测了两个框,并且只属于一个分类。
    测试图像中,当同一类物品出现不常见的长宽比和其他情况时,泛化能力偏弱。
由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是在太小的物体处理上,有待加强。

2. YOLO V2的简介

     YOLO V1相对于Faster R-CNN存在的问题时检测精度不够,在目标定位方面错误率更高。YOLO V2采取了一系列的方法优化网络结构,在提高检测准确率的同时,定位精确度也得到很大提升。

3. YOLO V2的改进之精确度

3.1 Batch Normalization

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

3.2 High Resolution Classifier

     目前业界标准的检测方法,都要先把分类器(classifier)放在ImageNet上进行预训练。从Alexnet开始,大多数的分类器都运行在小于256*256的图片上。而现在YOLO从224*224增加到了448*448,这就意味着网络需要适应新的输入分辨率。 
    为了适应新的分辨率,YOLO v2的分类网络以448*448的分辨率先在ImageNet上进行Fine Tune,Fine Tune10个epochs,让网络有时间调整他的滤波器(filters),好让其能更好的运行在新分辨率上。(分辨率更高,对于检测和目标定位效果更好),mAP得到4%的提升。

3.3 Convolutional With Anchor Boxes

    YOLO v1使用全连接层数据进行bounding box预测(将全连接层转换为S*S*(B*5+20)维的特征),这会丢失较多的空间信息,导致定位不准。Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是坐标值能够简化问题,让神经网络学习起来更容易。 
    为了引入anchor boxes来预测bounding boxes,作者在网络中果断去掉了全连接层。剩下的具体怎么操作呢?首先,作者去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络,让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。作者观察到,大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。最后,YOLOv2使用了卷积层降采样(factor为32),使得输入卷积网络的416 * 416图片最终得到13 * 13的卷积特征图(416/32=13)。

    加入了anchor boxes后,可以预料到的结果是召回率上升,准确率下降。我们来计算一下,假设每个cell预测9个建议框,那么总共会预测13 * 13 * 9 = 1521个boxes,而之前的网络仅仅预测7 * 7 * 2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%,说明可以通过进一步的工作来加强准确率,的确有改进空间。

YOLO V2_第1张图片

3.4 Dimension Clusters

    维度聚类。在使用anchor时,Faster-RCNN中anchor boxes的个数和宽高维度往往是手动精选的先验框(hand-picked priors)。虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是如果能够一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就应该更容易学到准确的预测位置。
    YOLOv2中利用K-means聚类方法,通过对数据集中的ground truth box做聚类,找到ground truth box的统计规律,从而可以自动找到更好的boxes宽高维度。以聚类个数k为anchor boxes个数,以k个聚类中心box的宽高维度为anchor box的维度。

    传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。为此,作者采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,聚类的距离度量采用:


YOLO V2_第2张图片

    可以看到,平衡复杂度和IOU之后,最终得到k值为5,意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多(这符合行人的特征),这种结论如不通过聚类实验恐怕是发现不了的。

    当然,作者也做了实验来对比两种策略的优劣,如下图,使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。

YOLO V2_第3张图片

3.5 Direct Location prediction

       那么,作者在使用anchor boxes时发现的第二个问题就是:模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的 (x,y) 坐标上了。在区域建议网络中,预测 (x,y) 以及 tx,ty使用的是如下公式:

    后来修改博文时,发现这个公式有误,作者应该是把加号写成了减号。理由如下,anchor的预测公式来自于Faster-RCNN,我们来看看人家是怎么写的:

YOLO V2_第4张图片

     x 是坐标预测值,xa 是anchor坐标(预设固定值),x∗是坐标真实值(标注信息),其他变量 y,w,h 以此类推,t 变量是偏移量。然后把前两个公式变形,就可以得到正确的公式:


    这个公式的理解为:当预测 tx=1,就会把box向右边移动一定距离(具体为anchor box的宽度),预测 tx=−1,就会把box向左边移动相同的距离。
    这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束(我的理解是,tx 没有数值限定,可能会出现anchor检测很远的目标box的情况,效率比较低。正确做法应该是每一个anchor只负责检测周围正负一个单位以内的目标box)。模型随机初始化后,需要花很长一段时间才能稳定预测敏感的物体位置。

    在此,作者就没有采用预测直接的offset的方法,而使用了预测相对于grid cell的坐标位置的办法,作者又把ground truth限制在了0到1之间,利用logistic回归函数来进行这一限制。 

YOLO V2_第5张图片

    现在,神经网络在特征图(13 *13 )的每个cell上预测5个bounding boxes(聚类得出的值),同时每一个bounding box预测5个坐值,分别为 tx,ty,tw,th,to ,其中前四个是坐标,to是置信度。如果这个cell距离图像左上角的边距为 (cx,cy) 以及该cell对应box(bounding box prior)的长和宽分别为 (pw,ph),那么预测值可以表示为:

YOLO V2_第6张图片

    tx,ty 经sigmod函数处理过,取值限定在了0~1,实际意义就是使anchor只负责周围的box,有利于提升效率和网络收敛。σ 函数的意义没有给,但估计是把归一化值转化为图中真实值,使用 e 的幂函数是因为前面做了 ln 计算,因此,σ(tx)是bounding box的中心相对栅格左上角的横坐标,σ(ty)是纵坐标,σ(to)是bounding box的confidence score。

    定位预测值被归一化后,参数就更容易得到学习,模型就更稳定。作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。 

YOLO V2_第7张图片

3.6 Fine-Grained features

     细粒度特征。YOLO修改后的Feature Map大小为13*13,这个尺寸对检测图片中尺寸大物体来说足够了,但是用上细粒度特征的话,这可能对小尺度的物体检测有帮助。
    Faser R-CNN和SSD都在不同层次的特征图上产生区域建议(SSD直接就可看得出来这一点),获得了多尺度的适应性。这里使用了一种不同的方法,简单添加了一个转移层( passthrough layer),这一层要把浅层特征图(分辨率为26 * 26,是底层分辨率4倍)连接到深层特征图。
    这个Passthrough layer能够把高分辨率特征与低分辨率特征联系在一起,联系起来的方法是把相邻的特征堆积在不同的Channel之中,这一方法类似与Resnet的Identity Mapping,从而把26*26*512变成13*13*2048。
    YOLO的检测器使用的就是经过扩张的特征图,它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。

3.7 Multi-Scale Training

     原始YOLO网络使用固定的448*448的图片作为输入,加入anchor boxes后输入变成416*416,由于网络只用到了卷积层和池化层,就可以进行动态调整(检测任意大小图片)。为了让YOLOv2对不同尺寸图片的具有鲁棒性,在训练的时候也考虑了这一点。
    区别于之前的补全图片的尺寸的方法,YOLO v2每迭代10次都会随机选择新的图片尺寸。由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。 
    这一政策让网络在不同的输入尺寸上都能达到一个很好的预测效果,同一网络能在不同分辨率上进行检测。当输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,所以你可以在YOLO v2的速度和精度上进行权衡。 
    在低分辨率图片检测中,YOLOv2是检测速度快(计算消耗低),精度较高的检测器。输入为228*228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其更加适用于低性能GPU、高帧率视频和多路视频场景。 
    在高分辨率图片检测中,YOLOv2达到了先进水平(state-of-the-art)。 

4. YOLO V2的改进之速度

4.1 Darknet-19

     YOLO v2基于一个新的分类model,有点类似与VGG,使用了较多的3*3filter,每次Pooling之后都增加一倍Channels的数量。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。使用Batch Normilazation来让训练更稳定,加速收敛,使model规范化。 

    最终的model–Darknet19,有19个卷积层和5个maxpooling层,处理一张图片只需要5.58 billion次运算,在ImageNet上达到72.9%top-1精确度,91.2%top-5精确度。

YOLO V2_第8张图片

4.2 Training for Classifier

     作者使用Darknet-19在标准1000类的ImageNet上训练了160次,用随机梯度下降法,starting learning rate 为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。(参数都是基于作者的darknet框架)初始的224*224训练后把分辨率上调到了448*448,使用同样的参数又训练了10次,学习率调整到了10的-3次方。高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。

4.3 Training for Detection

     为了把分类网络改成检测网络,去掉原网络最后一个卷积层,增加了三个3 *3(1024 filters)的卷积层,并且在每一个卷积层后面跟一个1*1的卷积层,输出维度是检测所需数量。 
    对于VOC数据集,预测5种boxes,每个box包含5个坐标值和20个类别,所以总共是5*(5+20)= 125个输出维度。 
    也添加了passthrough layer,从最后3*3*512的卷积层连到倒数第二层,使模型有了细粒度特征。 
    学习策略是:先以10e-3次方的初始学习率训练了160次,在第60次和第90次的时候学习率减为原来的十分之一。weight decay为0.0005,momentum为0.9,以及类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略:random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上训练。

5.YOLO 9000

5.1 简介

     YOLO 9000是在YOLOv2的基础上得到的,相比于YOLO v2,YOLO 9000具有更强大(Stronger)的检测功能,可以检测出更多的类别(9000种类别)。作者提出了一种在分类数据集和检测数据集上联合训练的机制。使用检测数据集的图片去学习检测相关的信息,例如bounding box坐标预测,是否包含物体以及属于各个物体的概率(COCO)。使用仅有类别标签的分类数据集图片去扩展可以检测的种类(ImageNet)。 
    训练过程中把检测数据和分类数据混合在一起。当网络遇到一张属于检测数据集的图片就基于YOLOv2的全部损失函数(包含分类部分和检测部分)做反向传播。当网络遇到一张属于分类数据集的图片就仅基于分类部分的损失函数做反向传播。 作者最后采用一种不要求互不包含的多标签模型(multi-label model)来整合数据集。这种方法忽略了数据集的结构(例如 COCO数据集的所有类别之间是互不包含的)。

5.2 YOLO 9000的改进

1. Hierarchical classification(层次式分类) 

     WordNet是一个有向图结构(而非树结构),因为语言是复杂的(例如“dog”既是“canine”又是“domestic animal”),为了简化问题,作者从ImageNet的概念中构建了一个层次树结构(hierarchical tree)来代替图结构方案。最终结果是一颗 WordTree (视觉名词组成的层次结构模型)

    这种方法的好处:在对未知或者新的物体进行分类时,性能降低的很优雅(gracefully)。比如看到一个狗的照片,但不知道是哪种种类的狗,那么就高置信度(confidence)预测是”狗“,而其他狗的种类的同义词如”哈士奇“”牛头梗“”金毛“等这些则低置信度。

YOLO V2_第9张图片

YOLO V2_第10张图片

2.Dataset combination with WordTree 

     使用WordTree把多个数据集整合在一起。

3.joint classification and detection(联合训练分类和检测) 

     使用WordTree整合了数据集之后就可以在数据集(分类-检测数据)上训练联合模型。我们想要训练一个检测类别很大的检测器,所以使用COCO检测数据集和全部ImageNet的前9000类创造一个联合数据集。为了评估我们使用的方法,也从ImageNet detection challenge 中向整合数据集添加一些还没有存在于整合数据集的类别。相应的WordTree有9418个类别。由于ImageNet是一个非常大的数据集,所以通过oversampling COCO数据集来保持平衡,使ImageNet:COCO = 4:1。 
    使用上面的数据集训练YOLO9000。采用基本YOLOv2的结构,anchor box数量由5调整为3用以限制输出大小。 
    当网络遇到一张检测图片就正常反向传播。其中对于分类损失只在当前及其路径以上对应的节点类别上进行反向传播。当网络遇到一张分类图片仅反向传播分类损失。在该类别对应的所有bounding box中找到一个置信度最高的(作为预测坐标),同样只反向传播该类及其路径以上对应节点的类别损失。反向传播objectness损失基于如下假设:预测box与ground truth box的重叠度至少0.31IOU。 
    采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。 
    作者在ImageNet detection task上评估YOLO9000。ImageNet detection task和COCO有44个物体类别是相同的。这意味着YOLO9000只从大多数测试数据集中看到过分类数据而非检测数据。最终整体精度为19.7mAP,在从未见过的156个物体检测数据类别上精度为16.0mAP。这个结果高于DPM,但是YOLO9000是在不同数据集上进行半监督训练。而且YOLO9000可以同时实时检测9000多种其它物体类别。 
    作者也分析了YOLO9000在ImageNet上的性能,发现可以学习新的动物表现很好,但是学习衣服和设备这类物体则不行。因为从COCO数据集上动物类别那里学习到的物体预测泛化性很好。但是COCO数据集并没有任何衣服类别的标签数据(只有”人”类别),所以YOLO9000很难对“太阳镜”,“游泳裤”这些类别建模。

6.YOLO 9000的总结

     YOLO v2 代表着目前最先进物体检测的水平,在多种监测数据集中都要快过其他检测系统,并可以在速度与精确度上进行权衡。
    YOLO 9000 的网络结构允许实时地检测超过9000种物体分类,这归功于它能同时优化检测与分类功能。使用WordTree来混合来自不同的资源的训练数据,并使用联合优化技术同时在ImageNet和COCO数据集上进行训练,YOLO9000进一步缩小了监测数据集与识别数据集之间的大小代沟。

    文章还提出了WordTree,数据集混合训练,多尺寸训练等全新的训练方法。



你可能感兴趣的:(object,detection)