YOLO9000是一款先进实时的目标检测系统,可以检测出超过9000目标种类。基于YOLO-v1的问题,作者采用了很多新奇的方法又借鉴一些之前的工作,提出YOLO-v2,相同的YOLO-v2可以运行在不同尺寸之下,实现一种简单的速度与精度的权衡。同时作者提出了在目标检测数据集和分类数据集联合训练的方式,并取得了很好的效果。我们接下来的文章主要围绕这两个部分展开。
作者回顾了YOLO-v1的缺点,相对于最先进的检测系统,YOLO的确存在很多不足,与Fast R-CNN的误差分析表明,YOLO存在大量的定位错误。此外,与基于区域提案的方法相比,YOLO的召回率相对较低。因此YOLO-V2的很多工作也聚焦于提升召回率和定位上。
计算机主流的趋势是朝着更大更深的网络发展,更好的性能往往依赖于训练更大的的网络或者同时聚合不同的模型。而YOLO-V2的想法是在获得更精确模型的同时依旧保持很快的速度,与扩大网络相反,YOLO-v2简化网络并使特征更容易去学习。
Batch Normalization 在模型收敛方面带来了显著的提升,同时可以去除了对其他形式的正则化形式。通过在YOLO中对所有卷积层进行批量归一化,在mAP上得到了超过2%的提升。批量归一化还有助于规范化模型。通过批量归一化,可以从模型中去除dropout且不会引起过拟合。
大多数先进的检测方法都采用在ImageNet上预先训练好的分类器。从AlexNet开始,大多数分类器进行的输入图像都小于256×256。原先YOLO是在224×224的尺寸下训练分类器网络,将分辨率提高到448进行检测任务。而对于YOLO-V2,首先在448 * 448分辨率ImageNet 分类网络中fine turn 10个周期,这使得网络有时间调整卷积核,以可以更好地在高分辨率图像下工作,然后再将结果网络进行fine turn去做检测任务。这种方法将最终结果提高了4%的mAP。
YOLO对于边框的预测是采用最后的全连接层直接预测bounding box的坐标,而Faster R-CNN在预测bounding box 的时候采用手工挑选先验框,仅仅使用RPN的卷积层去预测anchor boxes偏移量而不是坐标,这大大简化了问题,也使网络更容易去学习。基于这个思想,作者移除了全连接层使用anchor boxes去预测bounding boxes,也去除一个pooling层来获得更大的输出分辨率,对于输入图片将448 * 448调整到416 * 416。
为什么要这样调整大小呢?作者的回答是YOLO的卷积经过了32倍下采样,我们希望我们特征图是奇数个locations,这样中心网格
就是一个了,这样好处是什么呢?一些是大的物体,往往占据图像的中心,所以最好在中心有一个单独的位置来预测这些物体,而不是四个位置都在附近。416 * 416的输入,32倍下采样就是13 * 13,满足我们这样的设计目的。
继我们前面说的话题,当我们采用anchor boxes的方法时,我们也将类预测机制与空间位置进行了解耦,取而代之的是为每个anchor boxes预测类和对象。遵循YOLO设计,目标预测仍然预测了ground truth与和建议框的IOU;而类预测则预测了该类在有对象的情况下的条件概率。在没有采用anchor boxes的情况下,模型有着69.5的mAP和81%的召回率。使用该方法之后69.2的mAP和88%的召回率。虽然mAP有所下降,但是召回率的提高意味着模型有着更多的改进空间。
在使用Anchor boxes进行预测时box的尺寸都是手工挑选的,网络可以学会适当地调整盒子,但如果我们为网络选择更好的先验框,就会使更容易的学习获得更好的预测结果,基于此作者采用K-means的方法去寻找好的先验框。
既然选择了K-means,那么怎么使用这个方法呢,如果我们采用标准的K-means基于欧式距离,那么大的框会比小的框产生大的误差,但是我们真正想要的是选取的框可以有更好的IOU得分,这个和框的尺寸没有关系,所以我们用下列的公式来表示。
d ( b o x , c e n t r o i d ) = 1 − I O U ( b o x , c e n t r o i d ) d(box,centroid) = 1-IOU(box,centroid) d(box,centroid)=1−IOU(box,centroid)
box指真实框 ,centroid指每次迭代的中心框(类似于k-means中心点的意思,k为几就有几个中心框,收敛之后就是我们想要的结果先验框)
作者采用一系列的K值获得一系列在不同K值下的框,最后权衡,模型复杂度与召回率,选择了K等于5,以下图为在不同k下的比较以及k=5下的框形状,在后面一张图也显示了维度聚类方法在k =5时 的平均IOU和手工选择9框效果差不多,而当K=9时,平均IOU超越了很多,也说明了这种方法的可行性,使模型有更好的表征学习能力。
当YOLO采用anchor boxes的设计时面临的另一个问题就是在早期迭代过程中不稳定,而这不稳定主要来自于预测box(x,y)坐标时,所以YOLO-v2没有采用Fast-RCNN的预测方式。YOLO-V2位置预测 值 tx , ty 就是预测边界框中心相对于cell左上角位置的相对偏移值,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,这样预测的偏移值在(0,1)范围内(每个尺度的看做1)。
网格在特征图(13*13)的每个cell上预测5个anchor,每个anchor预测5个值: tx , ty tw , th to 。如果这个cell距离图像左上角的边距为( cx , cy ),cell 对应的先验框(anchor)的长和宽分别为( pw , ph),那么网格预测框的下图蓝框:
改进版本的YOLO最终特征图是13 * 13,对于定位大的物体来说已经不错,但是细粒度特征对于定位小的物体会很有帮助,,像SSD之类的检测器就采用结合在不同分辨率的特征图上去检测,而YOLO-v2采用一种不同的方法,通过一个passthrough层连接不同层,首先将高分辨率相邻的特征叠加到不同的通道而不是空间位置,然后再将高分辨率特征与低分辨率特征连接起来,类似于ResNet的操作,举个例子来说就是将26 * 26 * 512 特征图,分成13 * 13 *2048,再连接到最后13 * 13特征图(加入通道)。
我们改进之后的YOLO-v2,在设计上模型只有卷积层和池化层,这也就意味着网络可以动态调整大小,适应不同尺寸的输入。多尺度训练作者采用的方法是每10个batches网络随机选择图片大小,由于32倍下采样,所以输入尺寸为32的倍数,大小范围在{320,352,…,608}这种方法使模型在不同输入图片尺寸下都可以预测很好。也就意味着相同的模型可以预测不同尺寸的图片,这种方法很容易权衡模型精度与速度上的需求,以下图片显示了YOLO-v2在不同尺寸下的表现以及其他先进的检测器。
作者希望YOLO-v2又快又准,大部分检测框架将VGG16为基本的特征提取器,不可否认VGG-16在特征提取方面的确很强,但是却也有点复杂,作者结合着VGG-16的和其他网络一些技巧,自定义了Darknet-19网络19个卷积层,5个池化层,Darknet-19在精度上有些许落后,但是在参数,复杂度大大低于VGG-16。以下为Darknet-19的结构图。
理想的检测模型应该又快又准,同时还可以检测更大范围的物体,但是实际情况是相对于分类数据集而言目标检测的数据集很有限。
数据集 | 分类数据集 | 检测数据集 |
---|---|---|
样本数 | 百万级 | 成千上万到几十万 |
标签数 | 上万级 | 几十到几百个 |
受限于目标检测数据集标注成本昂贵,很难将目标检测数据集规模达到分类数据集的水平,至少短期内不现实,那么是不是可以通过已有的分类数据集来扩充检测数据集呢?结合着使用呢?作者就是带着这样的想法开始了新方案的探索。
作者的方案就是检测数据集的图片学习检测相关信息,像bounding box坐标预测,目标类别预测,对于只有类别标签的数据集来扩充可识别的类别。具体就是在训练过程中混合检测数据集和分类数据集,当网络发现图片是检测数据集时,基于YOLO-v2完整的损失函数进行反向传播,当遇到图片是分类数据集,基于模型架构的特定的分类部分进行反向传播。
这种方案想法很简单,也很容易理解,那么也会有一些问题,目标检测数据集标签通常是通识物体,比如,猫,狗,而分类数据集通常更加细致,比如藏獒,哈士奇等等,如果想要合并数据集,必须连贯的合并这些标签。再者大部分分类使用softmax层计算最后的分布概率,这其实有一个假设前提类别相互独立,如果只是简单合并,不同的数据集类别并不相互独立,COCO中的某条狗在ImageNet中是哈士奇。
层次分类
ImageNet的命名标签来自于WordNet,一个用于构建概念和他们相互关系的语言数据库,WordNet是一种图形结构而非树结构,这是因为语言的复杂性,比如狗既是“犬齿类动物”又是“家养动物”,在这情境下都属于同义词,由于WordNet太过于复杂,作者没有采用全图结构,而是采用基于ImageNet从WordNet中构建一颗层次树。为了构建这棵树,作者测试ImageNet中的可见物名词,观测他们在WordNet图中到根节点的路径,这里简化根节点为“客观实体”。许多同义词在图中只有一条路径,首先将这些路径加入图中,然后迭代测试剩下的概念(名词),把路径加入树中使树的生长尽可能小,打个比方,我们将一个概念加入树中,他有两条路径,一条路径使树增加3条边,另外一条通路只增加一条边,那么我们选择把后一条通路加到树中。最后构建的就是词树,为了预测累别,计算在每个节点下义词的条件概率,以下面“ terrier”节点为例
如果啊计算一个词的绝对概率,使用如下公式,我们假定每张图片包含物体,所以P(physical object)=1
最后基于ImageNet1000构建词树,添加中间节点,类别标签由1000扩展到1369,在传递过程中真实标签沿树向上传递,打个比方,一个图片标签是“哈士奇”,那么他也是“狗”,也是 “ 哺乳动物 ” 等等这些属于同一概念,在计算时计算属于同一个概念的所有下义词的softmax,就像下图一样,一般分类是求一个大的softmax,而使用WordTree,我们执行多个softmax操作的共下位词.
作者使用COCO检测数据集和ImageNet分类数据集联合训练,构建词树如下,并且由于ImageNet比COCO数据集大得多,所以对COCO过采样平衡数据集,使最后ImageNet只比COCO大四倍。
YOLO-V2是一个先进的实时检测系统,提升速度与精度上提出了很多新奇有效的方法,可以运行在不同尺寸大小图片的上,也使得可以很好地权衡速度与精度。同时YOLO9000使用WordTree来结合来自不同来源的数据,并使用联合优化技术在ImageNet和COCO上同时进行训练。YOLO-v2的很多技巧都可以很好地运用在其他场合任务中。