目标检测(Object detection)—— YOLO v2总结

YOLO v2基于YOLO,点击这里了解YOLO
本博文中YOLO9000内容大部分参考自这里

1 概述

  • 相比Faster RCNN,YOLO检测精度虽然没那么高,但是胜在速度快和可端到端进行训练。
  • 然而,SSD的出现让YOLO非常尴尬,相比YOLO,SSD不仅速度快、可端到端进行训练,准确率还更高
  • 因此YOLO的作者对YOLO做出了改进,一年以后提出了YOLO v2。
  • YOLO v2相比YOLO,最大的变化是摒弃了YOLO直接回归得到bounding box的思想,转而采用Faster RCNN的anchor思想(SSD借鉴了anchor思想,取得了很好的效果,证明anchor是个好东西,那YOLO也用一用anchor吧)。除此以外,YOLO v2还添加了一些新的技巧以提高检测精度和速度

这里需要订正一下,YOLO v2只是借鉴了Faster RCNN中预设bbox的思想,具体讲,在图像每个grid内,预先设置几个bbox,用这几个bbox去预测ground truth,与Faster RCNN中在feature map上每个位置对应于原图的区域生成anchor box的方式并不相同,这带来的最大的区别是:在YOLO v2中,对预测框的回归是基于图像grid进行的,而Faster RCNN中对预测框的回归是基于anchor box进行的,具体可见本文第2.6节内容

  • 基于YOLO v2,作者又提出了一个被称之为YOLO9000的模型。该模型可以实时检测9000种物体。其主要的实现原理是将目标检测数据集COCO和图像分类数据集ImageNet融合,然后联合训练网络。
  • 本文分为三部分,第一部分介绍YOLO v2新增的一些可以提高检测性能的做法,第二部分介绍YOLO v2的训练参数设置,第三部分介绍YOLO9000的实现原理。
  • 下图是YOLO v2与其它网络结构的性能对比:

在这里插入图片描述

2 YOLO v2

先上图,让读者对YOLO v2采用的各种技巧对提高检测性能的贡献有一个直观的认识。
在这里插入图片描述

对于该表,有些疑问:论文中提到,在YOLO v2中采用了anchor box的思想,但是在上表中最后一列anchor boxer的位置并没有勾选,难道是论文写错了?不懂。

接下来挨个介绍这些技巧:

2.1 Batch Normalization

  • 鉴于Batch Normalization可稳定提高卷积神经网络性能,作者为YOLO v2的每个卷积层前都使用了一次batch normalization
  • 使用batch normalization后,模型性能提高了2.4%

点击这里了解Batch Normalization

2.2 High resolution classifier

  • YOLO使用224x224的图像训练网络,测试时将测试图像放大成448x448。作者认为,这种方式并不能增加网络的检测性能,原因在于网络只学到了小分辨率图像的特征,对于没有见过的大分辨率图像,其检测效果应该不会很好。
  • 因此,在YOLO v2中,作者提出了这样一个训练策略:对用224x224的ImageNet图像训练好的分类网络,再采用放大后的尺寸为448x448的ImageNet图像fine tune分类网络10个epoch,然后再在这个网络的基础上,训练检测网络。
  • 使用这种训练方式后,模型性能提升了3.7%。

2.3 Convolutional with anchor boxes

  • YOLO v2采用先生成anchor boxes然后对anchor boxes进行回归最终得到预测结果的思路。
  • YOLO v2移除了YOLO中的全连接层和最后一个池化层。移除最后一个池化层的目的是使输出的feature maps尺寸大一些。
  • YOLO v2得到的feature maps的大小是输入图像的1/32。作者修改了网络结构使网络的输入图像的尺寸为416x416(得到的feature maps的大小为13x13),而不是448x448(得到的feature maps的大小为14x14)。这是因为,作者希望最终得到的feature maps的边长都是奇数,这样feature maps就有个中心位置,对于图像中的大目标,往往可以使用这个中心位置处的anchor预测。如果使用448x448的图像作为输入,其中心位置就有四个,预测大目标时就要分别使用这四个位置的anchor。
  • YOLO中每个网格中的2个bounding box共享一个分类得分。YOLO v2放弃了这种做法:对每个anchor box,分别计算一个分类得分和包含目标的得分。
  • 使用anchor后,YOLO v2的检测精度下降了0.3%,相对的,其召回率由原来的81%提升到88%,因此,这种下降是可以接受的。

2.4 Dimension Clusters

  • 作者观察到,faster RCNN中人工预设了anchor boxes的尺寸,这显然是不合理的。如果预设的anchor boxes的大小与真实情况相差很大,网络就需要花费很大的力气来讲anchor boxes回归到真实情况。
  • 因此,作者认为应该从数据集中学习anchor boxes的预设尺寸。作者使用K-means算法选取anchor boxes的尺寸。
  • 每个anchor产生k个anchor boxes。作者取不同的k值作为聚类中心的个数,定义了一个与IOU有关的距离作为聚类准则(distance=1-IOU),对数据集的所有ground truth,聚类出k个anchor boxes。对每个ground truth,从k个anchor boxes中挑选出最合适的,计算出总的IOU值。最终,YOLO v2令k=5。这5个anchor box的形状如下图所示。

在这里插入图片描述

  • 通过实验对比,选出的这5个anchor boxes的尺寸与人工预设的9个anchor boxes(faster RCNN的产生方式)效果相当(表中第2行和第3行)。

在这里插入图片描述

2.5 New network

  • 大多数检测网络使用VGG-16提取特征,其参数数量约为3000万个。YOLO采用GoogLeNet提取特征,参数数量为852万个。参数的减少并未引起性能的显著降低。在图像大小为224x224的ImageNet分类任务上,GoogLeNet的top-5准确率只比VGG-16低了2%。参数数量能不能进一步减少?以这个目的为出发点,YOLO v2设计出了Darknet-19网络。
  • Darknet-19,包括19个卷积层和5个maxpooling层,如下图所示。Darknet-19与VGG16模型设计原则是一致的,主要采用33卷积,采用22的maxpooling层之后,特征图维度降低2倍,而同时将特征图的channles增加两倍。与NIN(Network in Network)类似,Darknet-19最终采用global avgpooling做预测,并且在33卷积之间使用11卷积来压缩特征图channles以降低模型计算量和参数。Darknet-19每个卷积层后面同样使用了batch norm层以加快收敛速度,降低模型过拟合。在ImageNet分类数据集上,Darknet-19的top-1准确度为72.9%,top-5准确度为91.2%,但是模型参数相对小一些。使用Darknet-19之后,YOLOv2的mAP值没有显著提升,但是计算量却可以减少约33%。

在这里插入图片描述

2.6 Direct location prediction

  • faster RCNN对bounding box的回归以偏移量回归的方式完成。预测出的bounding box相对于anchor box计算出个偏移值,ground truth与anchor box也计算出个偏移值,然后衡量这两个偏移值之间的误差,训练网络使这两个偏移值尽可能的靠近从而完成bounding box的回归。
  • YOLO v2的作者认为,这种回归方式导致了网络训练的不稳定。在从大量anchor boxes中选出与ground truth的IOU最大的anchor boxes后,自然而然的,我们需要回归的anchor boxes与ground truth相距不远,因此计算出的偏移值当然不需要很大。也就是说,需要限制网络计算出的偏移值。YOLO v2对网络计算出的偏移值,使用了一个sigmoid函数,这就保证了偏移值在[0, 1]上。那么如何依据偏移值计算出bounding box的坐标呢?
  • 回忆faster RCNN,每个anchor都在原始图像上映射出一片区域,该区域的中心作为生成的anchor boxes的中心。同样的,对YOLO v2中的每个anchor,先在原始图像上得到anchor对应的anchor boxes的中心。YOLO中将原始图像分成了7x7的网格,YOLO v2延续了这种做法。这样,anchor boxes的中心总会落入某个网格中,然后以该网格的左上角坐标为基准,计算出回归后的bounding boxes的位置及尺寸。
  • 使用K-means算法确定anchor boxes的大小和direct location prediction使YOLO v2的检测精度相比YOLO提升了5%。

在这里插入图片描述

2.7 Multi-Scale Training

  • 前面提到,在预训练模型时我们先使用224x224的ImageNet图像预训练,再使用放大为448x448的ImageNet图像预训练10个epoch。预训练完毕后,进行检测网络的训练。
  • 为了让YOLO v2网络可以识别不同尺寸的物体(多尺度),YOLO v2使用了这样的训练策略:每进行10轮(iteration)训练后更换新的尺寸的输入图像。输入图像的尺寸为{320,352,……,608},每次增加32。下图是不同输入图像尺寸下YOLO v2的检测精度和速度:

在这里插入图片描述

2.8 Fine-Grained features

  • YOLO v2的输入图片大小为416x416,经过5次maxpooling之后得到13x13大小的特征图,并以此特征图采用卷积做预测。13x13大小的特征图对检测大物体是足够了,但是对于小物体还需要更精细的特征图(Fine-Grained Features)。因此SSD使用了多尺度的特征图来分别检测不同大小的物体,前面更精细的特征图可以用来预测小物体。YOLO v2提出了一种passthrough层来利用更精细的特征图。YOLO v2所利用的Fine-Grained Features是26x26大小的特征图(最后一个maxpooling层的输入),对于Darknet-19模型来说就是大小为26x26x512的特征图。passthrough层与ResNet网络的shortcut类似,以前面更高分辨率的特征图为输入,然后将其连接到后面的低分辨率特征图上。前面的特征图维度是后面的特征图的2倍,passthrough层抽取前面层的每个2x2的局部区域,然后将其转化为channel维度,对于26x26x512的特征图,经passthrough层处理之后就变成了13x13x2048的新特征图(特征图大小降低4倍,而channles增加4倍,图6为一个实例),这样就可以与后面的13x13x1024特征图连接在一起形成13x13x3072的特征图,然后在此特征图基础上卷积做预测。
  • 使用fine-grained features后YOLO v2有1%的性能提升。

在这里插入图片描述

2 YOLO v2的训练参数设置

因为并不涉及到理解的问题,所以这里直接贴原文了。
在这里插入图片描述
在这里插入图片描述

3 YOLO9000

  • YOLO9000是在YOLOv2的基础上提出的一种可以检测超过9000个类别的模型,其主要贡献点在于提出了一种分类和检测的联合训练策略。众多周知,检测数据集的标注要比分类数据集打标签繁琐的多,所以ImageNet分类数据集比VOC等检测数据集高出几个数量级。在YOLO中,边界框的预测其实并不依赖于物体的标签,所以YOLO可以实现在分类和检测数据集上的联合训练。对于检测数据集,可以用来学习预测物体的边界框、置信度以及为物体分类,而对于分类数据集可以仅用来学习分类,但是其可以大大扩充模型所能检测的物体种类。
  • 作者选择在COCO和ImageNet数据集上进行联合训练,但是遇到的第一问题是两者的类别并不是完全互斥的,比如"Norfolk terrier"明显属于"dog",所以作者提出了一种层级分类方法(Hierarchical classification),主要思路是根据各个类别之间的从属关系(根据WordNet)建立一种树结构WordTree,结合COCO和ImageNet建立的WordTree如下图所示,共有9418类,这也是YOLO9000的由来

在这里插入图片描述

  • WordTree中的根节点为"physical object",每个节点的子节点都属于同一子类,可以对它们进行softmax处理。在给出某个类别的预测概率时,需要找到其所在的位置,遍历这个path,然后计算path上各个节点的概率之积。

在这里插入图片描述

  • 在训练时,如果是检测样本,按照YOLO v2的loss计算误差,而对于分类样本,只计算分类误差。在预测时,YOLO v2给出的置信度就是Pr(physical object),同时会给出边界框位置以及一个树状概率图。在这个概率图中找到概率最高的路径,当达到某一个阈值时停止,就用当前节点表示预测的类别。
  • 通过联合训练策略,YOLO9000可以快速检测出超过9000个类别的物体,mAP为19.7%。

4 总结

  • YOLO v2提出的一系列改进目标检测网络性能的方法值得借鉴。
  • YOLO9000所使用的通过构建WordTree联合训练分类和检测数据集的方式是非常新颖和优美的,值得借鉴。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值