YOLO系列学习(YOLOv2)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/Bernice_lying


# YOLO:You only look once#

     方法如其名,仅需看一次图像,即可预测存在的物体和相对应的坐标位置,它追求“秒识”体验,有着“fast & accurate”的检测表现。它的建模思想是将检测问题转化为回归问题。

官方源码:http://pjreddie.com/yolo/


接上篇博客,下面将介绍YOLO系列第二部YOLOv2:

## YOLO-v2

【参考】

1. https://blog.****.net/hrsstudy/article/details/70767950
2. http://www.360doc.com/content/17/0810/10/10408243_678094588.shtml
3. http://x-algo.cn/index.php/2017/03/03/1820/
4. https://blog.****.net/linolzhang/article/details/59728206?locationNum=5&fps=1

【主线】
Better:对YOLOv1做了系列优化
Faster:使用新的基本特征提取网络——DarkNet
Stronger:使用分级分类思想,实现更多类别的目标检测

【Part I:Better】
(1)Batch Normalization
细节:每一个卷积层后都添加BN层。

效果:提升mAP约2% + 辅助模型正则化 + 移除dropout也不会发生过拟合。


(2)High Resolution Classifier
细节:使用全448×448的图像作为网络输入,训练分类模型,在得到的模型上继续finetune得到检测网络。
与YOLOv1对比,YOLOv1输入为224×224分辨率图像,训练检测网络时使用448×448图像,需要更久的滤波器调整时间。
效果:提升mAP约4%。

(3)Convolutional With Anchor Boxes
细节:摒弃v1的坐标直接预测,移除全连接层,改用anchor boxes来预测bounding box,但做了一些调整:
去除一个pooling层,得到更大分辨率的特征图(有更丰富的特征信息)
将输入压缩到416×416,使得在5次下采样(/2)后的特征图宽高是奇数,如13×13(奇数的意义在于让物体中心可落于cell中心,而非4个相邻的cell中间)
虽然使用了anchor思想,但是这个anchor仍然使用了YOLOv1的预测方法,即目标预测(包含x,y,w,h和置信度)和类别条件预测
效果:mAP略微下降,但召回率提升,并且模型支持更多的预测(YOLOv1只有2* 7 *7=98个预测,v2支持>1000个预测)

(4)维数聚类
动机/出发点:原始的Anchor的维数是人工设定的。
思考:能不能通过一种方法得到更好的先验维数,使其利于有更好的检测表现?
策略:使用k-means聚类,距离度量使用:d(box,centroid)=1-IOU(box,centroid)
思考:为什么使用这种基于IOU的距离度量,而不使用欧氏距离度量?

       直接的欧式距离只能衡量中心与中心的差距,这时大的物体的中心误差可能比小物体大;而我们的最终目的是想得到更吻合目标实际位置的Anchor先验维度,若使用IOU距离度量,它与box的大小无关,却可以让先验能得到好的IOU得分,比直接使用欧氏距离更适用。

注:论文中由实验得到k=5,可以达到模型复杂度和高召回率的平衡。

效果:优于原始Anchor设计,提升平均IOU约6.3。
YOLO系列学习(YOLOv2)
图1 基于K-means的Anchor先验示意

(5)直接的位置预测

动机/出发点:模型不稳定,特别在早期的迭代时。这种不稳定来自于box中心位置的预测。
回忆原始的Anchor:它是通过网络学习偏移量后,通过公式计算,得到最终的预测x,y值。
YOLO系列学习(YOLOv2)

因为t值无限制,以tx为例,当其大于0时,表示向右移动anchor宽的tx倍,小于0时,表示向左移动anchor宽的tx倍,这样就使得坐标可以落在图像的任何一点上,当落在别的cell中时就应当由那个cell来负责预测。此外,在模型随机初始化下,需要很长的训练时间才能使参数调整到可以敏感预测offset。

策略:针对上面的问题,YOLOv2延用YOLOv1的做法,预测bounding boxes相对cell左上角的坐标(即对应cell边长的比例)。为了确保bounding boxes的中心落在cell中(即坐标落在0到1之间),作者使用了logistic**函数来约束预测值,使结果映射到[0,1]区间内。 每个cell预测5个bounding boxes,每个box预测5个坐标值,即tx,ty,tw,th,to,记cell中心与图像左上角cell距离(cx,cy),bounding box先验有宽pw,高ph,那么预测将为:
YOLO系列学习(YOLOv2)
YOLO系列学习(YOLOv2)
图2 bounding box位置预测示意

效果:维数聚类 + 直接的bounding box中心位置预测与原始anchor方法相比,提升了近5%。

(6)Fine-Grained Features
目的:原始13×13的特征图已可实现大物体的精确检测,但对于小物体,想进一步获取更充分的特征信息。
策略:添加一个passthrough层,将早期的层(有26×26分辨率特征图)的特征信息与低分辨率特征信息(13×13)通过concat操作,实现在不同通道上的特征融合。但是会存在有一个空间维度不匹配的问题,作者采用的方法是,将26×26×512作一个扩展,变成13×13×2048的特征图(这里实际上做了一个特征重排,即将特征图使用按行/列隔行采样,得到4个维度均为成13×13×512的特征图,concat后第三维变成2048),从而解决这个不匹配问题。
效果:提升近1%。

(7)Multi-Scale Training
目的:让模型对不同分辨率输入均能取得很好的检测表现。
策略:采用多种尺度的图像作为网络输入,训练对尺度鲁棒的模型。这里因为网络下采样32倍,因此输入尺寸选用32的倍数{320,352,…,608}。
效果:在检测速度和精度上达到了很好的平衡。 特别地:

对于低分辨率图像检测,精度较低但速度非常快。在输入尺寸为228×228的时候,检测帧率达到90FPS,而mAP几乎和Faster R-CNN的水准相同。使意味着YOLOv2在低性能GPU、高帧率视频、多媒体视频流场景中更加适用。 
对于高分辨率图像检测,能保持着实时水平,和高精度性能,如在VOC2007上mAP为78.6%。

YOLO系列学习(YOLOv2)
图3 VOC2007上不同方法的精度和速度对比

(8)其他实验
YOLO系列学习(YOLOv2)

【Part II:Faster】
思考:如何在保证精度的同时实现提速?先回忆一下,YOLOv1采用了GoogLeNet思想做特征提取基网络,但是实验表明它没有比用VGG16作特征提取网络的方法精度更高,而VGG16虽然精度高,却忽略了模型的复杂度。因此,需要找到一个既保障精度,又能有较小复杂度,能实现快速预测的特征提取网络。

策略:提出DarkNet-19分类网络,具体如下:
使用大量3×3卷积层
在3×3卷积层之间,使用1×1卷积层,用于特征压缩表征
池化后通道增倍(×2)
使用全局平均pooling做预测
使用BN,启到稳定训练、正则化模型、加速收敛作用

总之,这个网络共有19个卷积层,5个maxpooling层:
YOLO系列学习(YOLOv2)

效果:Darknet-19 only requires **5.58 billion operations** to process an image yet achieves **72:9% top-1 accuracy** and **91:2% top-5 accuracy** on ImageNet.

训练DarkNet-19分类网络:
      采用ImageNet1000类数据集来训练分类模型。训练以224×224图像作为输入;训练过程中,采用了random crops, rotations, and hue, saturation, and exposure shifts等data augmentation方法;预训练后,作者采用高分辨率图像(448×448)对模型进行finetune。

训练基于DarkNet-19检测网络:
      将分类模型的最后一层卷积层去除,替换为三层卷积层(3×3,1024 filters),最后一层为1×1卷积层,filters数目为需要检测的数目。对于VOC数据集,我们需要预测5个boxes,每个boxes包含5个适应度值,每个boxes预测20类别。因此,输出为125(=5×(20+5)) filters。最后还加入了passthough 层。

【Part III:Stronger】
策略:联合训练方法(分类和检测网络) + 多标签模型
(1)联合训练
细节:使用检测数据学习检测相关的信息,如bounding box坐标预测和物体存在置信度信息,训练反向传播基于整个YOLOv2损失函数;使用分类数据学习类别相关的信息,训练反传只包含分类这个分支的损失。

问题:检测的类别与分类的类别不完全一致,且可能有相互包含的关系,怎么办?
问题解决:构建无互斥现象的多标签模型。

注:直接使用softmax不适用于该问题,因为这里的很多类别有相互包含的关系,比如狗和比熊犬,softmax的前提假设是类别之间不能有相互包含的关系。

(2)分级分类Hierarchical classification
思想:仿照ImageNet,组建同义词集合,搭建WordNet;然后根据不同数据来源和包含关系,由使用树形结构将数据集进行细划分,得到最终的WordTree。
YOLO系列学习(YOLOv2)

图4 COCO/ImageNet/WordTree示意

YOLO系列学习(YOLOv2)
图5 softmax在ImageNet和WordTree上的应用

注意:
  1. 建树过程:若是在WordNet中,要想到达一个指定的类,若有多条通路,选择最短的一条,若只有一条,就直接添加到WordTree中;
  2. 在每个结点处,可以计算当前结点下所有子类别的条件概率,如:Pr(比熊犬|狗)、Pr(萨摩耶|狗)、Pr(斗牛犬|狗)...
  3. 若要从树跟结点开始,计算到WordTree中的某个结点,需要将到该结点的通路的所有条件概率相乘,如:Pr(斗牛犬)= Pr(斗牛犬|狗) * Pr(狗|犬科) * ... * Pr(脊椎动物|动物) * Pr(动物|物理对象),这里 Pr(物理对象)=1.
  4. 虽然softmax不可以计算有包含关系的类别,但是对于同一个同义词集合里的物体,可用softmax计算概率分布。

那么,怎么用这个WordTree呢?

寻找类别方式:在每个结点处,选择置信度最高的分支,直至达到某个设定的阈值才停止。
当样本标签属于叶子节点,父亲节点也被**作为正样本;样本标签为非叶子节点,只针对非叶子节点和其父亲的部分进行反向传播。
对于分类图片(没有检测boundinig box标注的数据),此时得到一个置信度最高的bbox,将其当做一个负样本进行反向传播。

优点:
混合训练实现了网络可以检测、识别出来一些以前训练样本中没有的object。

【最终的效果】

实现最初的目标:Better/Faster/Stronger!

YOLO系列学习(YOLOv2)


YOLO系列学习(YOLOv2)


YOLO系列学习(YOLOv2)

本博文内有博主的一些理解和思考,若有不同见解欢迎在讨论区分享,若有疑问也请在下方留言。


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.****.net/Bernice_lying