论文(YOLO9000:Better,Faster,Stronger)阅读笔记,由于论文较新,所以文中的很多词汇并没有对应的中文官方叫法,因此会保留一部分英文。这篇文章可以说写出来的难度比第一篇Densely Connected Convolutional Networks论文阅读的难度大很多,时间也耗费得多得多。因为里面涉及到很多预备知识,我都尽自己最大努力地通俗易懂地解释,希望能让对目标检测领域没那么熟悉的同学更容易地理解,因此文章写得很长,大家可以分成几部分阅读。
可以说这只是一个简单的开始,因为我大概地扫了一眼这学期准备学习的论文,毫不夸张地说,YOLO9000算是最容易理解的那一类论文了。希望自己可以坚持地写下去,分享自己的学习心得。
此外,大家如果觉得对自己有帮助,能点一个赞的话,不胜感激^_^。同时欢迎大家指出文中出现的纰漏和我个人理解不对的地方。如需转载,请私信我,感谢。
本篇主要分为解决的问题、网络结构、创新点、评估方法、结果分析五个部分介绍。
一、解决的问题
目标检测一直是机器视觉领域的一个热点,RCNN、fast RCNN、faster RCNN、SSD等杰出的方法层出不穷。但是这些目标检测方法都受限于数据集只能检测较小的物体种类(20种)。由于目标检测数据集的标定比物体识别的数据集的标定要昂贵的多,因此想要获得想ImageNet这种级别的目标检测数据集是几乎不可能完成的任务。如何训练出能识别出许多种物体的目标检测模型就显得极为诱人。本文作者提出了一种联合训练的方法将目标检测数据集与分类数据集结合,使得YOLOv2网络能够识别9000种物体,升级为YOLO9000。
(一直觉得目标检测很酷,很像终结者里T800/T850的视角,可以把YOLO类比成T800视角,YOLOv2为T850,YOLO9000是T1000,TX等待人们开发中。。。)
二、网络结构
1. YOLO结构(终结者T800)
来调整的权重。如图所示,YOLO实现了一个目标检测领域的端对端模型。通过一个大的loss function将bounding box检测和物体识别同时训练,使用不同的lambda 来调整的权重。
2. YOLOv2改进(终结者T850)
作者在YOLO一代网络上做出了如下改进,升级为YOLO二代。
Better
1)批规范化(Batch Normalization)
Batch Normalization的作用是提高了网络模型的鲁棒性,缓解了Covariant Shift问题,有一定的正则化(regularization)作用,在这里也不例外。通过在YOLO所有的卷积层中加入Batch Normalization,可以使得mAP提高2%,并且dropout的部分也可以丢掉。
2)高分辨率分类器(High Resolution Classifier)
从AlexNet开始,大多数的分类器都在分辨率小于256*256的图像上执行分类。YOLO一代在训练分类网络的时候用的是224*224分辨率,检测网络的时候用的是448*448分辨率,这就意味着网络需要同时切换到目标检测并且适应新的分辨率。在YOLO二代中,直接使用448*448的分辨率微调(fine tune)了网络,训练了10个epoch。可以使得mAP提高大概4%。
3.使用Anchor Box
YOLO使用全连接层来预预测检测框的坐标和长宽。与faster RCNN相比,YOLO只能预测98个框,数量太少,在检测数量较多的物体比如人群,鸭群等的时候误差较大。并且faster RCNN网络预测的是检测框的偏移度(offset),可以简化问题并且使得网络能更容易地学习。
因此YOLOv2将全连接层移除,引入了anchor box。并且将网络输入从448调整为416,这是为了使经过卷积层下采样(downsample)以后,能得到唯一的中心点(416/32=13)。因此输入为13*13的feature maps。
在未使用anchor box的情况下,模型的recall为81%,mAP为69.5,使用anchor box的情况下,模型的recall为88%,mAP为69.2。尽管mAP略有降低,但是recall得到了较大的提升。
4.通过K-means来学习出anchor box
faster RCNN中,anchor box是手动选择的,作者想找出一个更好的anchor box来训练网络,因此作者使用了K-means聚类用于得到更好的anchor box。K-means主要用与预测anchor box的长跟宽。
在这里,如果K-means聚类采用的事欧氏距离的话,那么尺寸大的box比尺寸小的box对error的影响更大,所以作者提出了使用IOU , (Intersection over Union, 交集/并集)来度量距离:
d(box, centroids) = 1 – IOU(box, centroids)
聚类结果如图,左图代表Avg IOU与聚类数目K的关系,在权衡Avg IOU和模型复杂度以后,作者选择了K=5。右图代表了VOC和COCO数据集的box的聚类结果。可以看出聚类所得到的anchor box与手动选择相比,更倾向于选择高瘦的anchor box。
不同方法得到的Avg IOU如下表所示:
可以看出,使用聚类算法得到的anchor box在其数量为5时就可以得到与手动选择的anchor box数量为9时几乎相同的Avg IOU,而在聚类算法得到anchor box数量为9是它的Avg IOU是优于手动选择的(67.2> 60.9)。这也证明了聚类算法的得到的anchor box更好。
5.Directed Location Prediction
用Anchor Box的方法,会让model变得不稳定,尤其是在最开始的几次迭代的时候。而不稳定的因素主要来自于预测bounding box坐标(x, y)的时候。理解它的产生原因,我们需要先看一下faster RCNN的预测检测框的方法。
如下图所示,在faster RCNN中,box主要分为Ground True Box(人工标定的真正的检测框),Anchor Box和网络预测出的Predict Box。
faster RCNN预测的是Ground True/Predict Box与Anchor Box的偏移量,因此有如下公式:
x,y,w,h分别表示box的中心坐标和宽高,x,x_{a},x^* 分别表示 predicted box, anchor box和ground truth的x坐标值 (y,w,h同理)。t_{i} 表示predict box相对于anchor box的偏移,t^{*}_{i} 表示ground true box相对于anchor box的偏移,学习目标自然就是让前者接近后者的值。
对应的,关于检测框中心点坐标则通过如下公式计算:
这样会带来一个问题,即当t_{x}/t_{y} 较大时(>=1),检测框可能跳到图像上的任意位置。因此YOLO的作者在此基础上做出了如下改进来限制检测框的跳动:
YOLOv2与YOLO网络相似,预测的是(x, y)的坐标值而非偏移量。并且作者通过sigmoid函数将偏移量限制在0到1之间,计算公式如下:
其中b_{x},b_{y},b_{w},b_{h},sigma 分别代表predict box的中心坐标x,y和它的长和宽,还有目标为物体b的概率(信心)。
如图所示,这种限制使得predict box的跳跃被限制在以(c_{x},c_{y}),(c_{x} 1,c_{y} 1) 为对角线的网格中。
使用 Dimension Clusters与Directed Location Prediction为YOLO网络带来了5%的提升。
6.细分类特征(Fine-Grained Features)
Faster F-CNN、SSD都使用不同尺寸的Feature Map来取得不同范围的分辨率,而YOLOv2采取了不同的方法,YOLOv2加上了一个跳跃层(Passthrough Layer)来获取之前的26*26分辨率的层的特征。这个Passthrough layer能够把高分辨率特征与低分辨率特征连结(concatenate)起来,这种方式看起来与ResNet很像,但是略有不同,因为ResNet采用的是summation,而YOLOv2的Fine-Grained Features采用的是concatenate。
Fine-Grained Features这提升了YOLO 1%的性能。
7.多尺寸训练(Multi-ScaleTraining)
作者希望YOLO v2能鲁棒地运行于不同尺寸的图片之上,所以把这一想法用于训练model中。 区别于之前的补全图片尺寸的方法,YOLO v2每迭代几次都会改变网络参数。每10个Batch,网络会随机地选择一个新的图片尺寸,由于使用了下采样参数是32,所以不同的尺寸大小也选择为32的倍数{320,352…..608},最小320*320,最大608*608,网络会自动改变尺寸,并继续训练的过程。 这一方法使得网络在输入图片尺寸比较小的时候跑的比较快,输入图片尺寸比较大的时候精度高,下图为YOLOv2和其他的目标检测网络的对比。
faster
YOLO使用的是GoogleNet架构,比VGG-16快,YOLO完成一次前向过程只用8.52 billion 运算,而VGG-16要30.69billion,但是YOLO精度稍低于VGG-16。因此作者在YOLOv2中设计了一种新的(其实也不太新。。。)网络结构叫Darknet-19。
网络结构如表格所示,与VGG相似,大量使用3*3,1*1的卷积核,并在每次Pooling之后增加一倍Channels的数量。YOLO v2中还用到了Batch Normalization技术。 最终的model–Darknet19,有19个卷积层和5个maxpooling层,处理一张图片只需要5.58 billion次运算,在ImageNet上达到72.9%top-1精确度,91.2%top-5精确度。
3. YOLO9000
YOLOv2是好棒好快,那么YOLO9000真可谓是好棒(better),好快(faster),好强壮(stronger)。下面主要介绍YOLO9000是怎么一步步变强壮的。
stronger
1)WordNet——>WordTree
WordNet是一种有向图,这是因为语言模型很复杂,有很多同义词,所以不可以用树状结构表示。但是分类模型中不需要考虑所有的同义词,因此作者在这里从WordNet结构中提取出包含ImageNet类别的多层级WordTree结构。
提取方法是首先找出ImageNet中一个类别的词汇在WordNet中到根节点的路径,如果有很多条路径到达根节点,那么选择最短的那一条。以此类推,将ImageNet中所有类别的词汇路径都提取出来后,WordTree就生成完毕。
如果想要计算某一节点的概率值,只需要用链式法则计算即可。
例如计算Norfolk terrier的绝对概率值:
2)Dataset combination with WordTree
为了验证这一个方法,作者先在WordTree上训练Darknet19的model,使用1000类的ImageNet进行训练,为了建立WordTree 1K,把所有中间词汇加入到WordTree上,把标签空间从1000扩大到了1369。
这里我解释一下标签是怎么扩充的,比如一张图片是“Norfolk terrior”,那么根据WordTree的最短路径,这张图片还会获得“dog”和“mammal”的标签,即现在的标签向量元素为1的位置不唯一。比如原数据标签为(0,0,0,0,0,1,0,0,0,0),那么扩充后的数据标签则为(0,0,0,0,0,1,0,0,0,0,1,1)。之前的ImageNet分类是使用一个大的softmax进行分类。而现在,WordTree只需要对同一级别下的词汇类别进行softmax分类。如图所示:
使用相同的训练参数,这种分层结构的Darknet19达到71.9%top-1精度和90.4%top-5精确度,精度只有微小的下降。 这种方法的好处是在对未知或者新的物体进行分类时,性能降低的很优雅(gracefully)。比如看到一个狗的照片,但不知道是哪种种类的狗,那么就高置信度(confidence)预测是“狗”,而其他狗的种类的同义词如”哈士奇“”牛头梗“”金毛“等这些则为低置信度。
有了这种映射机制,WordTree就可以将不同的数据集结合起来,由于WordTree本身变化多端,所以可以将大多数的数据集结合起来。
3)Joint classification and detection
在使用WordTree混合了COCO与ImageNet数据集后,混合数据集对应的WordTree包含9418类。由于ImageNet数据集跟COCO比太大了,产生了样本倾斜的问题,因此作者将COCO过采样,使得COCO与ImageNet的比例为1: 4。 YOLO9000的训练基于YOLO v2的构架,但是使用3“priors”(论文看到这里我也是很懵逼啊,3 priors代表什么我个人也不确定啊,觉得可能是anchor box,如果有大神知道代表什么,十分欢迎指出)来限制输出的大小。当网络遇到检测数据集中的图片时则正常地反方向传播,当遇到分类数据集图片的时候,只使用分类的loss功能进行反向传播。
使用联合训练法,YOLO9000可以从COCO数据集中学习检测图片中物体的位置,从ImageNet中学习物体的分类。
三、创新点
最大的创新点就是通过WordTree将不同数据集结合联合训练。将目标检测领域的分类范围一下子就提高到跟物体识别一个量级上。
再其次,YOLOv2中也有很多改进值得称道的,比如Convolutional With Anchor Boxes, Dimension Clusters, Direct location prediction等等。可以说YOLOv2/YOLO9000就是目标检测领域的state-of-art。这学期的project就想做这个啦^_^。
四、评估方法
在PASCAL VOC2007、COCO、ImageNet进行测试,评估检测和分类效果。
五、结果分析
1.评估YOLOv2——PASCAL VOC2007 & COCO
如图所示,在PASCAL VOC2007(上)和COCO test-dev2015(下)数据集中,YOLOv2的在准确度(mAP)同一级别的情况下,识别速度(FPS)吊打其他网络。并且比较方便的一点是,YOLOv2可以通过调整分辨率,轻松地权衡mAP和FPS。不同的分辨率的YOLOv2只是输入尺寸不同,模型与参数均不变。
VOC数据集中各类别详细mAP如下:
下表为YOLO到YOLOv2的进化之路:
2.评估YOLO-9000——ImageNet Detection Task
评估结果:
ImageNet检测任务中有44个对象类别与COCO检测任务相同,这意味着YOLO9000只训练过大多数测试图像的分类数据,而不是检测数据。
YOLO9000整体的mAP为19.7。 在未学习过的156个分类数据上进行测试,mAP为16.0。 YOLO9000的mAP比DPM高,而且YOLO9000是使用部分监督的方式在不同训练集上进行训练。能实时检测9000种物体。
虽然YOLO9000对动物的识别性能很好,但是对类别为”sunglasses“或者”swimming trunks“这些衣服或者装备的类别,它的识别性能不是很好。这跟目标检测数据集中只考虑“人”这个整体有很大关系。
附录
数据集
1.PASCAL VOC
PASCAL 的全称是 Pattern Analysis, Statical Modeling and Computational Learning。PASCAL VOC 挑战赛是视觉对象的分类识别和检测的一个基准测试,提供了检测算法和学习性能的标准图像注释数据集和标准的评估系统。
2. COCO
COCO数据集是微软团队获取的一个可以用来图像recognition segmentation captioning 数据集,其官方说明网址:http://mscoco.org/
3.ImageNet
ImageNet 是一个计算机视觉系统识别项目名称, 是目前世界上图像识别最大的数据库。是美国斯坦福的计算机科学家,模拟人类的识别系统建立的。
出现的术语
1.WordNet
WordNet是由Princeton大学的心理学家,语言学家和计算机工程师联合设计的一种基于认知语言学的英语词典(http://t.cn/RORxhF4)。它不是光把单词以字母顺序排列,而且按照单词的意义组成一个“单词的网络”。
WordNet采用的是有向图结构而非树状结构,这是因为语言模型很复杂,WordNet中包含一些同义词。
参考链接
1. https://arxiv.org/pdf/1612.0824(http://t.cn/RORxJJA)2.pdf
2. https://arxiv.org/pdf/1506.0264(http://t.cn/RORxKRT)0.pdf()
3. https://baike.baidu.com/item/Wo(http://t.cn/RORxQL8)rdnet/10349844?fr=aladdin()
4. http://blog.csdn.net/hysteric3(http://t.cn/RORxrlP)14/article/details/53909408()