CVPR 2017刚刚结束,心想选几篇论文拜读一下,大牛就是大牛,仅供瞻仰。
YOLO9000: Better, Faster, Stronger 由华盛顿大学艾伦研究所的大牛Josehp Redmon、Ali Farhadi共同完成,获得CVPR 2017 最佳论文鼓励奖。
YOLO9000对YOLO模型进行改进,速度、精确度均有提升,提出了一种将分类与检测训练过程相结合的方法,使模型可以同时接受分类与检测的数据。同时针对不同分类、检测数据集数量级相差较大、类别粒度不一致的情况,提出WordTree的数据集融合方法,实现了YOLO模型的又一次飞跃,指导借鉴意义重大。
通用目标检测应该满足快、精确、识别种类广泛的要求。神经网络的应用提高了检测架构的速度和准确度,但大多数方法能够识别物体的种类非常有限。
当前目标检测的数据集相比其他任务,如分类和标识(tagging)非常有限。最常见的检测数据集只包含几百个标签的十万、或数百万的图片。而分类数据集通常含有成千上万的物体类别及数百万的图片。
作者希望检测数据集能够达到分类数据集的规模。然而检测数据集的标记相比分类或标识任务更加耗时耗力(标识通常由用户免费提供)。因此,近期不太可能出现与分类任务相同规模的检测数据集。
文章提出了一种新的方法以利用大量的分类数据来拓展检测系统的识别范围。文章中使用了一种物体类别的层次化视图,实现差异较大的数据集的融合。
文章还提出了一种将分类与检测相结合训练方法。该方法使用标记好的检测数据实现目标的精确定位,利用分类数据提高其识别范围及稳健性。
文章利用该方法对YOLO9000进行了训练,使其能够检测超过9000种不同物体。首先,文章对YOLO检测系统进行改进得到YOLOv2—当前最佳的实时目标检测器。之后利用数据集融合及结合训练的方法对模型在超过9000个类的ImageNet分类数据集及COCO检测数据集进行训练。
所有代码及预训练的模型可以在http://pjreddie.com/yolo9000/找到。
YOLO与RCNN等基于预选框的方法存在召回率较低、定位误差较大的问题。
计算机视觉通常趋向于使用更大、更深的网络,更优的性能经常意味着训练更大的网络、集合多种模型。对于YOLOv2,作者希望维持速度基本不变的情况下提高其准确率。与扩大网络规模相反,作者对网络进行精简,使表征更容易学习。作者根据以往的设计经验,提出一种新的概念,以提升YOLO的性能,总结如表2。
批量归一能够显著地提升网络的收敛。在YOLO的每个卷积层之后添加块正则化之后,mPA提升了2%。批量归一同样能够正则化模型,从而在不使用丢弃层(dropout)的情况下防止过拟合。
当前所有目标检测方法均基于在ImageNet预训练的分类器。从AlexNet开始,大多数分类器的输入都小于256x256。原始的YOLO在224x224分辨率下训练网络,并在检测时将分辨率提升到448。这意味着网络必须同时学习目标检测及调整适应新的分辨率。
对于YOLOv2,首先在ImageNet上以448x448的分辨率对分类器微调十次(epoch),使分类器适应高分辨率的输入。对网络微调使其适应检测任务。高分辨率的分类网络提升了4%的mPA。
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得分的先验窗口,与窗口大小无关。因此使用下列距离度量函数:
使用锚窗预测的第二个问题便是,模型在早期迭代过程中较不稳定。较多的不稳定来源于窗口预测的位置(x,y)。在区域生成网络中,网络预测tx、ty,使用下式计算(x,y)中心坐标:
例如,tx=1 时,窗口将会右移锚窗宽度,而tx=−1则会将窗口左移锚窗宽度。
该公式不具有约束性,锚窗可能在图像任意位置结束,无论预测窗口的位置。从模型的随机初始化将会消耗大量时间以稳定预测敏感的偏移。
与YOLO相同,模型预测相对单元格的位置坐标。真实值的范围在0到1之间变动。文章使用逻辑激活将网络预测值约束到该范围内。
该网络在输出特征图的每个单元预测5个边框。对于每个边框预测5个坐标值,tx、ty、tw、th、to。若单元相对图像左上角的偏移为(cx,cy),并且窗口的先验宽高为pw、ph,那么其窗口坐标预测值为:
添加位置预测的约束之后,参数学习更加容易/模型更加稳定。维度聚类及边框中心位置约束相比YOLO提高了5%的准确率。
改进版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网络在较小的尺度上运行较快,这可以使用户在准确度和速度之间进行权衡。
速度与准确率对于检测任务都是非常重要的。大多数的检测任务,如机器人或自动驾驶汽车均依赖于低延迟的预测。
大多数检测架构均将VGG-16作为基础特征提取器。VGG-16是一种强大的、精确的分类网络,但同样存在大量冗余。对于一副224x224的图像,VGG-16的卷积层迭代一次就需要306.9亿次浮点运算。
YOLO架构使用基于GoogleNet的经典架构,该网络比VGG-16更快,前向传播仅需85.2亿次浮点操作,然而其精确度略差于VGG-16。在ImageNet数据集上、输入为224x224情况下,YOLO模型的5准确率为88.0%,而VGG-16为90.0%。
作者提出一种新的分类模型作为YOLOv2的基础。与VGG类似,作者使用最常见的3x3的滤波器,在每次池化之后对通道数加倍。借鉴NIN(Network in Network)的经验,作者使用全局平均池化预测结果,同时利用1x1滤波器压缩3x3卷积层间的特征表示。使用批归一话(Batch Normalization)稳定训练过程,加速收敛,正规化模型。
最终的模型Darknet-19有19个卷积层,5个最大池化层。Darknet-19仅需55.8亿次浮点运算,在ImageNet上的前一准确率为72.9%,前五准确率为91.2%。
作者在标准ImageNet 1000个类的数据集上训练网络160代(epochs),使用随机梯度下降方法、学习率初始化为0.1,以4次多项式方式递减,权重衰减系数为0.0005,动量为0.9。使用Darknet神经网络架构(Darknet neural network)。训练过程使用标准的数据扩增方式包括随机取块、旋转、色调、饱和度、曝光度等通道偏移。
开始时在224×224的模型上训练,之后在更大的网络上微调。微调时仍然使用以上系数,但只训练10代,学习率初始值为10−3。
将分类网络最后的卷积层换为含1024个滤波器的3x3卷积层,每层之后是一个1x1的卷积层,其大小为输出参数数量。对于VOC,每个窗口需要预测5个框,每个框5个坐标值,共有20种类别可能,因此是125大小的滤波器。同样在最后与倒数第二层卷积层之间添加一个3x3x512的穿透层(passthrough layer)以获取细粒度特征。
网络经过160代训练、学习率初始值为10−3,在第10、60、90代降低学习率。权值衰减为0.0005、动量为0.9。数据扩增方式和YOLO和SSD相同,随机取块、颜色偏移等。COCO和VOC上的训练策略相同。
作者提出了分类与检测数据相结合的训练方法。该方法使用检测标签的数据学习检测相关的信息,如边框坐标、似物性及分类常见物体。使用分类标签的图像拓展模型的识别范围。
训练过程中,分类与检测标签图像混合使用。当网络输入检测标签图像时,就基于全YOLOv2损失函数进行反向传播。输入分类标签图像时,仅对分类相关结构反向传播。
但该方法遇到一些挑战。检测数据集只包含常见物体和常用标签,如“狗”或“船”。而分类数据集的标签范围则更深更宽。ImageNet含有100多品种的狗,包括“诺福克犬”,“约克郡梗犬”和“贝灵顿犬”。如果我们要训练两个数据集,就需要一种统一的方式来合并这些标签。
大多数分类方法使用softmax层对所有可能类别来计算最终的概率分布。softmax的预设是类间互斥,这给数据集融合带来一定问题,例如,该模型下,ImageNet和COCO将难以融合,因为类“诺福克犬”和“狗”并非互斥的,当然也可以使用多标签模型来组合非互斥的数据集但这就忽略了已知数据之间的结构,例如,COCO中所有类都是互斥的。
ImageNet标签来自WordNet,这是一个包含词间关系的结构化语言数据库。在WordNet中,“诺福克犬”和“约克夏梗”是“狗”的下位词,属于“猎犬”,是一种“狗”,“犬”的一种等等。大多数分类方法都假定扁平的类间关系,而结构化的类间关系却是必须。
由于语言的复杂性,WordNet采用了有向图,而不是树状结构,例如,“狗”是“犬”和“家畜”的下义词。为了简化问题,作者将ImageNet中的概念构建为层次树而非图结构以描述问题。
树的构建中,作者检查了ImageNet中的视觉名词,并通过WordNet图查看其路径根节点,该情况下是“物体”。许多同义词在图中只有一条通路,所以首先添加这种了路径到树中。之后迭代地检查剩下的概念,使添加的路径达到最少。所以如果一个概念有两条通向根的路径,一路需向树中添加三条边,而另一路只需增加一条边,那么选择最短的路径。
最终产生WordTree,视觉概念的层次化模型。使用WordTree分类过程中,在给定该同义词的情况下,针对每个节点的每个下位词的概率来预测每个节点的条件概率。例如,预测“狗”节点时:
如果要计算一个特定节点的绝对概率,那只需通过树的路径根节点并乘以条件概率。所以如果想知道一张图像是否包含诺福克犬,只需计算:
分类时,假设该图像包含一个实物:Pr(物体)=1。为了验证该方法,作者使用1000类的ImageNet构建的WordTree上训练了Darknet-19模型。为了构建WordTree 1K,作者将所有中间节点中添加到WordTree中,将标签空间从1000扩展到1369。在训练期时,将真实标签在树上传播,若图像被标记为“诺福克犬”,它也会被标记为“狗”和“哺乳动物”等。为了计算条件概率,模型预测了1369个值的向量,计算同一概念所有下位词的softmax值。
注:从“物体”根节点到底层节点的路径上,可能有某些词语不是类标签,如“物体”–>“动物”–>“哺乳动物”–>“狗”,其中“动物”、“哺乳动物”可能不在原始标签之中,故需要对标签空间进行拓展。
使用与之前相同的训练参数,我们的层次Darknet-19达到了71.9%的前1个精度
90.4%的前5个精度。尽管增加了369个附加概念,使网络预测一个树状结构,网络准确性略有下降,但这种分类适用于新的或未知的对象类别。例如,如果网络输入狗的图片,但不确定是什么类型的狗,它仍然会较高置信度地预测“狗”,而其下位词的预测自信度较低。
该机制同样可以用于检测。使用YOLOv2物体检测器预测Pr(物体)的值。检测器预测一个边界框和树节点的概率。从根节点对树进行便利,在节点处选择自信度最高的路径,直到达到一定阈值,则预测为该类对象。
使用WordTree可以合理地将多个数据集合并,能简单地将数据集的类别映射到树上的词项。图6显示了使用WordTree可以组合来自ImageNet和COCO的标签。WordNet非常多样化,所以在大多数据集上均可使用这种技术。
既然已经能够使用WordTree融合数据集,就可以对分类与检测结合的模型进行训练。为了训练一个非常大的检测器,作者使用COCO检测数据集和ImageNet发布的其前9000个类。为了评估该方法,同样加入未曾添加的ImageNet检测任务中的类别。所得数据集相应的WordTree共有9418类。ImageNet是一个较大的数据集,因此作者通过对COCO进行过采样来平衡数据集,使ImageNet只有4比1的比例。
使用该数据集对YOLO9000进行训练。基于YOLOv2架构,将其输出的5个先验(priors)改为3个(???)。网络输入检测图像时,就进行正常的反向传播。对于分类损失,只对其标签及其上层标签进行反向传播。例如,如果标签是“狗”,将会给出错误以提高其预测准确率。
输入分类图像时,只会反向传播分类损失。为了做到这一点,只需找到预测该类概率最高的边界框仅在其预测的树上计算损失。同时作者也假设预测的框重叠0.3 IOU以上的是真实物体的框,并且反向传播其似物性损失。
使用该种联合训练方式,YOLO9000使用COCO的检测数据学习预测物体类别及其位置,使用ImageNet数据学习预测更大范围的物体。
作者在ImageNet检测任务上对YOLO9000做出评估。ImageNet与COCO的检测任务有44个类别相同,这意味着YOLO9000训练集中分类图像占主要地位。 YOLO9000整体mAP准确率为19.7 mAP,而对于不相交的156对象类,网络没有学习过它们的检测数据,其mAP准确率为16.0。这要比DPM准确率更高,而YOLO9000只是在不同数据集上半监督地训练。该模型可以实时地检测9000多个类别。
当分析YOLO9000在ImageNet上的表现时,可以看出模型能够很好地学习动物的新品种,但是类别(如服装和设备)之间难以区分。新的动物更容易学习,因为物体预测从COCO中的动物得到很好的泛化。相反,COCO只有“人”,而有任何衣服类型的边框,所以YOLO9000在“太阳眼镜”或“游泳裤”等类别时显得困难。
该介绍了YOLOv2和YOLO9000实时检测系统。 YOLOv2是最先进、最快、跨越多种数据集的检测系统。此外,它可以输入各种大小的图片,提供了速度和精度之间的平滑折衷。
YOLO9000是一个实时检测框架,通过检测和分类过程的结合,能够检测超过9000个物体类别。作者使用WordTree来组合数据各种来源和使用融合优化技术使模型同时在ImageNet和COCO上训练。 YOLO9000是一个突破检测和分类之间的数据集大小差距的有力之举。
文章的许多技术可以泛化到目标检测之外。ImageNet WordTree表示提供了一个更丰富、更详细的图像分类输出空间。使用层次分类的数据集组合在分类和分割域中非常有用。诸如多尺度训练等技巧可以使各种视觉任务从中获益。
未来的工作中,作者希望将类似的技术应用于弱监督图像分割。通过训练过程中将弱标签分配给分类数据,使用更强大的匹配策略等来改进检测结果。计算机视觉需要拥有大量标签数据。作者希望能够寻找融合不同来源和数据结构的方法共同打造更强大的视觉世界。