版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bernice_lying
# YOLO:You only look once#
方法如其名,仅需看一次图像,即可预测存在的物体和相对应的坐标位置,它追求“秒识”体验,有着“fast & accurate”的检测表现。它的建模思想是将检测问题转化为回归问题。
官方源码: http://pjreddie.com/yolo/接上篇博客,下面将介绍YOLO系列第二部YOLOv2:
## YOLO-v2【参考】
1. https://blog.csdn.net/hrsstudy/article/details/707679502. 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.csdn.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。
![](https://i-blog.csdnimg.cn/blog_migrate/6ea61066fc0573a97949dcf3a3edfae7.png)
图1 基于K-means的Anchor先验示意
(5)直接的位置预测
动机/出发点:模型不稳定,特别在早期的迭代时。这种不稳定来自于box中心位置的预测。
回忆原始的Anchor:它是通过网络学习偏移量后,通过公式计算,得到最终的预测x,y值。
![](https://i-blog.csdnimg.cn/blog_migrate/16917b2b7a48961766f39a454a4e8338.png)
因为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,那么预测将为:
![](https://i-blog.csdnimg.cn/blog_migrate/f1dadefbed01b958ec0c04e1a53b4864.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/cd06394486c15c1cd14f118c1436a0be.jpeg)
图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%。
![](https://i-blog.csdnimg.cn/blog_migrate/b96696852382d5408ec41ee05b4f4fc5.jpeg)
图3 VOC2007上不同方法的精度和速度对比
(8)其他实验
![](https://i-blog.csdnimg.cn/blog_migrate/7cb6941ac0979458373373240098a246.jpeg)
【Part II:Faster】
思考:如何在保证精度的同时实现提速?先回忆一下,YOLOv1采用了GoogLeNet思想做特征提取基网络,但是实验表明它没有比用VGG16作特征提取网络的方法精度更高,而VGG16虽然精度高,却忽略了模型的复杂度。因此,需要找到一个既保障精度,又能有较小复杂度,能实现快速预测的特征提取网络。
策略:提出DarkNet-19分类网络,具体如下:
- 使用大量3×3卷积层
- 在3×3卷积层之间,使用1×1卷积层,用于特征压缩表征
- 池化后通道增倍(×2)
- 使用全局平均pooling做预测
- 使用BN,启到稳定训练、正则化模型、加速收敛作用
总之,这个网络共有19个卷积层,5个maxpooling层:
![](https://i-blog.csdnimg.cn/blog_migrate/5ef76bc4d60935fdc2276d9c96a453ef.jpeg)
效果: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。
![](http://x-algo.cn/wp-content/uploads/2017/03/QQ20170303-6.png)
图4 COCO/ImageNet/WordTree示意
![](https://i-blog.csdnimg.cn/blog_migrate/be1827686f0ad0f0d9aa7c4bf143aa0b.png)
图5 softmax在ImageNet和WordTree上的应用
注意:
- 建树过程:若是在WordNet中,要想到达一个指定的类,若有多条通路,选择最短的一条,若只有一条,就直接添加到WordTree中;
- 在每个结点处,可以计算当前结点下所有子类别的条件概率,如:Pr(比熊犬|狗)、Pr(萨摩耶|狗)、Pr(斗牛犬|狗)...
- 若要从树跟结点开始,计算到WordTree中的某个结点,需要将到该结点的通路的所有条件概率相乘,如:Pr(斗牛犬)= Pr(斗牛犬|狗) * Pr(狗|犬科) * ... * Pr(脊椎动物|动物) * Pr(动物|物理对象),这里 Pr(物理对象)=1.
- 虽然softmax不可以计算有包含关系的类别,但是对于同一个同义词集合里的物体,可用softmax计算概率分布。
那么,怎么用这个WordTree呢?
- 寻找类别方式:在每个结点处,选择置信度最高的分支,直至达到某个设定的阈值才停止。
- 当样本标签属于叶子节点,父亲节点也被激活作为正样本;样本标签为非叶子节点,只针对非叶子节点和其父亲的部分进行反向传播。
- 对于分类图片(没有检测boundinig box标注的数据),此时得到一个置信度最高的bbox,将其当做一个负样本进行反向传播。
优点:
混合训练实现了网络可以检测、识别出来一些以前训练样本中没有的object。
【最终的效果】
实现最初的目标:Better/Faster/Stronger!
本博文内有博主的一些理解和思考,若有不同见解欢迎在讨论区分享,若有疑问也请在下方留言。
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Bernice_lying