论文笔记:YOLOv2

作者认为,目标检测框架变得愈发快速和准确,然而都局限于一个小的目标集。而与分类和标记等其他任务的数据集相比,当前目标检测数据集显得相对有限。因此,想要检测可以与目标分类的级别规模相当,而提出了一种新方法来利用已经拥有的大量分类数据,并使用它来扩大当前检测系统的范围。该方法使用目标分类的层次视图,允许不同的数据集合在一起。同时提出联合训练算法,可以在检测数据和分类数据上训练目标检测器。

通过这种方法训练YOLO9000,一个可以检测超过9000不同的目标类别的实时目标检测器。作者通过改进YOLO产生YOLOv2,然后训练来自ImageNet和COCO的超过9000个类的模型产生YOLO9000。

对于YOLOv2与YOLO 的对比,作者提出了三个特点:better,faster,stronger。论文中也分为这三个特点分别进行阐述。

better方面

YOLO于Faster RCNN相比存在大量的定位误差。与基于候选区域的方法相比,YOLO存在着较低的recall。因此作者提出在保持classification accuracy的同时提升recall和localization。

Batch Normalization:

首先对网络中每一层添加batch normalization。这样网络就不需要每层学习数据的分布,从而加速收敛,提升了2%的mAP。BN还有助于规范化模型,这样在不会过拟合的情况下可以舍弃dropout。(对于为什么加入了BN就可以舍弃dropout见下图)

High Resolution Classifier:

由于于训练一般都是在ImageNet上完成(输入图片为224*224),而YOLOv1在训练分类网络时采用224*224作为输入,在detection的时候采用448*448。这意味着网络在切换到检测模型的时候还要同时使应新的分辨率。在这里做了改进,在预训练过程中在ImageNet上用10个epoch以448*448的分辨率调整分类网络,最后在检测数据集上fine tune。实验表明可以增加4%的mAP。

这里所谓分类模型和检测模型的转换,分辨率的转换见cfg文件:

Convolutional With Anchor Box:

YOLOv1在卷积特征提取器的顶层直接用全连接层预测bounding box的坐标。Faster RCNN中,没有直接预测坐标,而是使用hand-picked prior预测坐标。通过使用卷积层,Faster RCNN中的RPN为anchor box预测offset和confidence。由于预测层是卷积的,而RPN在网络的每一处预测offset。预测offset而不是坐标简化了问题,并使得网络更容易学习。

YOLOv2则采用了这种思想,引入anchor。首先去除卷积层和最后一层池化层,使得卷积神经网络的输出拥有更高的分辨率。同时缩减网络,用416*416的输入图片取代原来的448*448。这样做是使得特征图有奇数大小的宽和高,如此便可有一个cell作为中心cell。作者发现大的物体更趋向于占据图片的中心,因此用一个的cell而不是4个cell来表示图片的中心更好。YOLOv2以32为因子进行下采样,因此得到的输出是13*13(416/32)。

由于引入了anchor,YOLOv2减弱了空间位置分类预测机制,转而对每一个anchor预测class和objectness。与YOLOv1类似,objectness预测ground truth和proposed box的IOU,class预测已有一个object情况下各分类的条件概率。对于S*S的图像,YOLOv1中每个cell预测B个bounding box,C个类别概率(注意此处C与cell对应),则输出维度S*S*(B*5+C)。而YOLOv2中,C与anchor box对应,所以输出维度S*S*B*(C+5)。

通过引入anchor,每张图预测上千box,而YOLOv1每张图只预测98个box。相比之前准确率有小幅度下降(mAP:69.5%-69.2%)recall却有大幅度上升(81%-88%)。作者认为recall的上升说明该模型有更多提升的空间。

Dimension Clusters:

作者在使用anchor时遇到了两个问题。首先,box的维度是人工制定的,也就是说如果定的好,网络将更容易学习。因此在训练集的bounding box上使用kmeans算法来自动寻找好的prior。因为使用欧几里得距离的话,大的box比小box会产生更多的error,而我们想要的是能产生高IOU的box,与box尺寸无关,因此定义:

centroid指聚类中心,box和聚类中心的IOU越大越好但是IOU<1,因此采用这种形式。

经过实验最终选择k=5作为模型复杂度和高recal的权衡点,实验表明有更多的高窄的box。

实验表明使用k-means之后仅仅5个聚类产生的prior就能与9个人工制定的anchor在平均IOU上取得相似的结果。

Direct location prediction:
接下来是谈到使用anchor后的第二个问题:模型的不稳定(尤其是早期迭代)。 这种不稳定性大多来自于预测box的(x,y)坐标。

在RPN中网络预测t_{x}t_{y},中心坐标(x,y)如下:

在Faster RCNN中,公式如下:

原文中的公式似乎写错了,更正后:

x=(t_{x}*w_{a})+x_{a}

y=(t_{y}*h_{a})+y_{a}

其中,x_{a},y_{a}为anchor中心的坐标,w_{a},h_{a}为anchor的宽高,t_{x}为x坐标偏移倍数。这一公式t_{x},t_{y}不受约束所以anchor可能出现在图片中的任意位置,即会出现anchor检测与其相距很远的box的情况。如果使用随机初始化,模型可能需要很久来稳定预测出合理的偏移。

因此YOLOv2沿袭YOLOv1的做法,对每个bounding box预测5个坐标t_{x},t_{y},t_{w}t_{h}t_{o}c_{x},c_{y}为cell相对于左上角的偏移量,bounding box宽高分别为p_{w}p_{h},bounding box预测值表达如下:

其中采用logistic activation限制t_{x}t_{y}在0-1之间,目的是让中心点落在以(c_{x},c_{y})为左上角顶点的cell之内。这样就限制了该cell只对中心在cell之内的bounding box进行预测。对于采用e的指数项是因为之前进行过log处理,当t_{w}=0时说明宽度不需要改变,大于0和小于0分别说明需要增加和减少宽度,利于数据的正态分布。

实验表明,在使用dimension clusters和direct location prediction之后提升了5%的mAP。

Fine-Grained Features:

修改后的YOLOv2在13*13的特征图上进行检测,这对大目标来说足够了,但是对于小目标来说“更有细密纹理的”特征会更有帮助。在SSD和Faster RCNN中,都在不同大小的feature map上运行proposal网络来获得不同的分辨率。这里借鉴了这种方法,加上一个passthrough层,把之前的26*26分辨率的特征图与深层连接。

这样一个passthrough层将高分辨率和低分辨率特征结合,堆叠到不同的channel里而不是空间位置,类似ResNet中的identity mapping。这个方法把26 * 26 * 512的特征图转变为13 * 13 * 2048的特征图并与原始特征图连接。YOLO的检测器使用的就是经过扩张的特征图,它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。

至于转变的方法:

Multi-Scale Training:

在引入了anchor之后,输入图片由448*448变为416*416。考虑到YOLOv2模型只使用卷积层和池化层,作者希望YOLOv2对不同尺寸的图片更具有鲁棒性。

在训练时每10个batch随机选取一个新的size作为输入。因为YOLOv2下采样因子为32,作者采用以下维度集合{320,352,...,608}(间隔为32)。这样相同的网络就可以对不同分辨率的输入进行预测,而对于小尺寸的输入,运行将会更快,因此在速度和准确率之间达到了权衡。

对于不同分辨率以及高分辨率输入下与其他网络的比较见下表:

以下是YOLOv2与YOLOv1相比各个方法给mAP带来的提升:

Faster:

作者指出大多数检测网络使用VGG-16作为基础的特征提取器,然而VGG-16“没有必要得复杂”。在对224*224的单一图像进行一次传递需要30.69billion的浮点运算,而YOLOv1采用的基于GoogleNet的网络结构只是用8.52billion。然而精确率略微低了一点(90.0%-88.0%)。

Darknet-19:

在这里提出Darknet-19作为YOLOv2的基础。网络拥有19个卷积层和5个maxpooling层,只需要5.58billion的运算来传递一张图片却在ImageNet上取得了72.9%的top-1准确率和91.2%的top-5准确率。网络结构如下:

Training for classification:

首先在ImageNet上训练160个epoch,学习率0.1,然后调整输入图片到448*448(之前提到过)进行fine tuning(学习率0.001)训练10个epoch。经过这种训练方式获得了76.5%的top-1准确率和93.3%的top-5准确率。

Training for detection:

先去除最后一个卷积层,然后添加3个3*3的卷积层,每个卷积层有1024个filter,而且每个后面都连接一个1*1的卷积层,1*1卷积的filter个数根据需要检测的类来定。同时在最后一个3*3*512层向倒数第二层添加了passthrough层以便模型使用细粒度特征。对这一网络采用学习率0.001学习160epoch,在60和90epoch时学习率除以10。

Stronger:

YOLOv2提出了一个联合训练分类和检测数据的机制。使用为了检测标注过的图片来获得检测类信息例如坐标和objectness以及对普通物体的分类。使用仅带有分类标签的图片来拓展可以检测出的类别。训练时混合两种数据集,对于labelled for detection的图片采用完整的后向传播,对于classification的图片只采用后向传播中的分类部分。

然而该方法带来了一些挑战。classification数据集拥有比detection数据集多出很多类别的label。而大多数分类算法使用softmax来计算所有种类的概率分布,然而softmax要求所有种类“mutually exclusive”,即互相独立性,而这就无法组合ImageNet 和COCO数据集因为它们之中有相似类别的物体。因此作者采用多label模型。

Hierarchical calssification:

ImageNet标签是从WordNet上取得的,而WordNet是一个有向图结构,并不是树。YOLOv2采用根据ImageNet上的概念建立一个分层树WordTree。

创建层次树的步骤是:

一、遍历ImageNet的所有视觉名词。

二、对每一个名词,在WordNet上找到从它所在位置到根节点(Physical Object)的路径。 许多同义词集只有一条路径。所以先把这些路径加入层次树结构。

三、迭代检查剩下的名词,得到路径,逐个加入到层次树。路径选择办法是:如果一个名词有两条路径到根节点,其中一条需要添加3个边到层次树,另一条仅需添加一条边,那么就选择添加边数少的那条路径。

在每个节点上给出下义点的条件概率,例如:

如果要计算一个节点的绝对概率,只需将其到根节点的条件概率相乘。

为了分类假定图片包含

作者在WordTree(用1000类别的ImageNet创建)上训练了Darknet-19模型。为了创建WordTree1k作者天添加了很多中间节点,把标签由1000扩展到1369。训练过程中Ground Truth标签要顺着向根节点的路径传播:例如,如果一张图片被标记为“Norfolk terrier”它也被标记为“dog” 和“mammal”等。为了计算条件概率,模型预测了一个包含1369个元素的向量,而且基于所有“同义词集”计算Softmax,其中“同义词集”是同一概念的下位词。

作者指出该方法有一个优势,即当遇到新的或者未知物体时,准确度会较轻下降,但是对它的上位词仍然会有较高的confidence输出。

对于检测,使用YOLOv2物体预测器得到Pr(physical object)的值,检测器预测bounding box和概率树。从根节点每次向下选取最高confidence的分支,直到到达某个阈值,最后检测出的物体即为最后节点。

Dataset combination with WordTree

可以使用WordTree结合不同数据集,方法是把数据集中的类别映射到树结构中的同义词集合:

Joint classification and detection

使用WordTree整合了数据集之后就可以在数据集(分类-检测数据)上训练联合模型。我们想要训练一个检测类别很大的检测器所以使用COCO检测数据集和全部ImageNet的前9000类创造一个联合数据集。为了评估我们使用的方法,也从ImageNet Detection Challenge 中向整合数据集添加一些还没有存在于整合数据集的类别。相应的WordTree有9418个类别。由于ImageNet是一个非常大的数据集,所以通过Oversampling COCO数据集来保持平衡,使ImageNet:COCO = 4:1。

使用上面的数据集训练YOLO9000。采用基本YOLOv2的结构,Anchor Box数量由5调整为3用以限制输出大小。

当网络遇到一张检测图片就正常反向传播。其中对于分类损失只在当前及其路径以上对应的节点类别上进行反向传播。当网络遇到一张分类图片仅反向传播分类损失。在该类别对应的所有Bounding Box中找到一个置信度最高的(作为预测坐标),同样只反向传播该类及其路径以上对应节点的类别损失。反向传播Objectness损失基于如下假设:预测Box与Ground Truth Box的重叠度至少0.3IOU。采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。

作者在ImageNet Detection Task上评估YOLO9000。ImageNet Detection Task和COCO有44个物体类别是相同的。这意味着YOLO9000只从大多数测试数据集中看到过分类数据而非检测数据。最终整体精度为19.7 mAP,在从未见过的156个物体检测数据类别上精度为16.0 mAP。这个结果高于DPM,但是YOLO9000是在不同数据集上进行半监督训练。而且YOLO9000可以同时实时检测9000多种其它物体类别。

作者也分析了YOLO9000在ImageNet上的性能,发现可以学习新的动物表现很好,但是学习衣服和设备这类物体则不行。因为从COCO数据集上动物类别那里学习到的物体预测泛化性很好。但是COCO数据集并没有任何衣服类别的标签数据(只有"人"类别),所以YOLO9000很难对“太阳镜”,“游泳裤”这些类别建模。

部分笔记转载于http://lanbing510.info/2017/09/04/YOLOV2.html

猜你喜欢

转载自blog.csdn.net/stezio/article/details/81748346