论文笔记 | YOLO9000论文阅读笔记(一)

CVPR 2017刚刚结束,心想选几篇论文拜读一下,大牛就是大牛,仅供瞻仰。

YOLO9000: Better, Faster, Stronger 由华盛顿大学艾伦研究所的大牛Josehp Redmon、Ali Farhadi共同完成,获得CVPR 2017 最佳论文鼓励奖。

YOLO9000对YOLO模型进行改进,速度、精确度均有提升,提出了一种将分类与检测训练过程相结合的方法,使模型可以同时接受分类与检测的数据。同时针对不同分类、检测数据集数量级相差较大、类别粒度不一致的情况,提出WordTree的数据集融合方法,实现了YOLO模型的又一次飞跃,指导借鉴意义重大。

摘要

  • YOLO9000使用了一种新的、多尺度的训练方法,可以对多种大小的图像进行识别,能够在速度与精确度之间进行简单权衡。
    在VOC2007数据集上,YOLOv2帧率为67FPS情况下的mPA为76.8,帧率为40FPS情况下的mPA为76.8,相比Faster RCNN和SSD精确度更高,速度更快。
  • 文章提出了一种将目标检测与分类的训练相结合的方法。使用该方法YOLO9000能够同时在COCO目标检测数据集及ImageNet分类数据集上进行训练。该种训练结合方法能够使模型对没有检测标签(detection labels)的物体类别进行检测,并使用ImageNet检测任务对该方法进行验证。
  • YOLO9000在ImageNet检测任务上,200个类中仅有40个类有检测标签的情况下,取得了19.7的mPA。在156个类别不在COCO数据集中取得了16.0的mPA。相比YOLO仅能检测200个类别,YOLO9000能够在保证实时的情况下,检测多于9000个类别的物体。

一、背景

通用目标检测应该满足快、精确、识别种类广泛的要求。神经网络的应用提高了检测架构的速度和准确度,但大多数方法能够识别物体的种类非常有限。

当前目标检测的数据集相比其他任务,如分类和标识(tagging)非常有限。最常见的检测数据集只包含几百个标签的十万、或数百万的图片。而分类数据集通常含有成千上万的物体类别及数百万的图片。

作者希望检测数据集能够达到分类数据集的规模。然而检测数据集的标记相比分类或标识任务更加耗时耗力(标识通常由用户免费提供)。因此,近期不太可能出现与分类任务相同规模的检测数据集。

文章提出了一种新的方法以利用大量的分类数据来拓展检测系统的识别范围。文章中使用了一种物体类别的层次化视图,实现差异较大的数据集的融合

文章还提出了一种将分类与检测相结合训练方法。该方法使用标记好的检测数据实现目标的精确定位,利用分类数据提高其识别范围及稳健性。

文章利用该方法对YOLO9000进行了训练,使其能够检测超过9000种不同物体。首先,文章对YOLO检测系统进行改进得到YOLOv2—当前最佳的实时目标检测器。之后利用数据集融合及结合训练的方法对模型在超过9000个类的ImageNet分类数据集及COCO检测数据集进行训练。

所有代码及预训练的模型可以在http://pjreddie.com/yolo9000/找到。

二、更好

YOLO与RCNN等基于预选框的方法存在召回率较低、定位误差较大的问题。

计算机视觉通常趋向于使用更大、更深的网络,更优的性能经常意味着训练更大的网络、集合多种模型。对于YOLOv2,作者希望维持速度基本不变的情况下提高其准确率。与扩大网络规模相反,作者对网络进行精简,使表征更容易学习。作者根据以往的设计经验,提出一种新的概念,以提升YOLO的性能,总结如表2。

批量归一(Batch Normalization)

批量归一能够显著地提升网络的收敛。在YOLO的每个卷积层之后添加块正则化之后,mPA提升了2%。批量归一同样能够正则化模型,从而在不使用丢弃层(dropout)的情况下防止过拟合。

高分辨率分类器

当前所有目标检测方法均基于在ImageNet预训练的分类器。从AlexNet开始,大多数分类器的输入都小于256x256。原始的YOLO在224x224分辨率下训练网络,并在检测时将分辨率提升到448。这意味着网络必须同时学习目标检测及调整适应新的分辨率。

对于YOLOv2,首先在ImageNet上以448x448的分辨率对分类器微调十次(epoch),使分类器适应高分辨率的输入。对网络微调使其适应检测任务。高分辨率的分类网络提升了4%的mPA。

使用锚窗(Anchor Boxes)卷积

YOLO使用卷积特征提取器之上的全连接层直接预测边界框。Faster RCNN使用人工选择的先验窗口而非直接预测边框坐标。Faster RCNN使用区域生成网络(region proposal network,RPN)预测锚窗偏移及其自信度。由于预测层是卷积层,故而RPN在特征图的每个位置都预测了偏移量。预测偏移量相比预测坐标而言,使问题更加简化,易于网络学习。

作者将YOLO的全连接层去除,使用锚窗预测边框。首先,去掉一个池化层以产生高分辨率的输出。同时使网络输入减小为416而非480x480,使特征图大小为奇数,此时特征图中央只有一个单元。由于较大的物体通常在图像中心位置,因此中心的一个单元相比邻近的四个单元的预测效果更好,YOLO卷积层对输入图像的下采样比率为32,因此输出特征图大小为13x13。

作者并未对每个锚窗进行类别及似物性预测,而是将类别预测机制与空间位置预测相分离。与YOLO相同的是,对于某一物体,似物性依然预测真实值与预测框的IOU,而类预测则预测给定类的条件概率。

使用锚窗能够略微提高准确率。YOLO在每幅图像只能预测98个窗口,而使用锚窗之后能够预测超过1000个窗口。锚窗使用前的mAP为69.5、召回率为81%,使用之后的mAP为69.2、召回率为88%。虽然mAP下降了一些,但召回率的提升意味着作者的模型还有较大的提升空间。

维度聚类

锚窗应用过程中,存在两个问题。第一个是窗口维度是手动选择的,虽然网络能够学习并调整窗口大小,但是合适的先验值更易于网络预测。

除了手动选择先验值,作者对训练集边框进行K均值(k-means)聚类以寻找合适的先验窗口大小。如果使用标准K均值,欧拉距离较大的窗口将会比小窗口产生更大的误差,由于作者想要能够产生更好IOU得分的先验窗口,与窗口大小无关。因此使用下列距离度量函数:

d(box,centroid)=1IOU(box,centroid)

选择不同的K值,计算最临近中心框的IOU。文章选择K=5使模型复杂度和召回率之间可以平衡。类中心框与手动选择的锚窗有着明显不同,大多数为较高瘦的、而非矮宽的窗口。

直接坐标预测

使用锚窗预测的第二个问题便是,模型在早期迭代过程中较不稳定。较多的不稳定来源于窗口预测的位置 (x,y) 。在区域生成网络中,网络预测 tx ty ,使用下式计算 (x,y) 中心坐标:

x=(tx×wa)xay=(ty×wb)ya

例如, tx=1 时,窗口将会右移锚窗宽度,而 tx=1 则会将窗口左移锚窗宽度。

该公式不具有约束性,锚窗可能在图像任意位置结束,无论预测窗口的位置。从模型的随机初始化将会消耗大量时间以稳定预测敏感的偏移。

与YOLO相同,模型预测相对单元格的位置坐标。真实值的范围在0到1之间变动。文章使用逻辑激活将网络预测值约束到该范围内。

该网络在输出特征图的每个单元预测5个边框。对于每个边框预测5个坐标值, tx ty tw th to 。若单元相对图像左上角的偏移为 (cx,cy) ,并且窗口的先验宽高为 pw ph ,那么其窗口坐标预测值为:

bx=δ(tx)+cxby=δ(ty)+cybw=pwetwbh=phethPr(object)IOU(b,object)=δ(to)

添加位置预测的约束之后,参数学习更加容易/模型更加稳定。维度聚类及边框中心位置约束相比YOLO提高了5%的准确率。

细粒度特征(Fine-Grained Features)

改进版YOLO模型使用13x13的特征图检测目标。这对于大目标检测是足够的,利用细粒度特征以定位较小的物体。Faster RCNN和SSD都在多种特征图上运行网络从而获得一定范围的分辨率。文章采用一种不同的方式,只添加一个从低端26x26分辨率产生特征的遍历层(passthrough layer)。

遍历层通过堆叠不同通道中相邻的特征而非空间位置实现融合高低分辨率的特征,与ResNet的一致映射(identity mapping)相类似。该方法将26x26x512的特征图映射为13x13x2048的特征图,进而使其与原始特征进行融合。文中提出的检测器运行在这种方法拓展的特征图上,以获取细粒度特征,提高了将近1%的性能。

多尺度训练

原始YOLO输入分辨率为448x448。由于加入锚窗,分辨率变为416x416。由于模型中只使用了卷积层与池化层,使其能够在运行时缩放。为了提高YOLOv2的对不同大小输入的稳健性,作者使用该方法训练模型。

作者并未固定输入图像大小而是每隔几次迭代便更改网络。每隔10批,网络就会随机选择输入图像的尺寸。由于模型降采样倍数为32,故而作者选择32倍数的尺寸: {320,352,...,608} ,网络最小选择为320x320,最大为608x608。每次更换尺寸后,都对网络进行缩放,继续训练。

这种机制强制网络对多种尺度输入优化预测。这意味同一网络能对多种尺度目标进行检测。YOLOv2网络在较小的尺度上运行较快,这可以使用户在准确度和速度之间进行权衡。

你可能感兴趣的:(深度学习图像处理)