https://blog.csdn.net/qq_42755230/article/details/125820723

可以看上面这个博客的论文中英文对照,感觉翻译的还可以,但有些地方还是有点像机翻。

 

【Abstract 摘要】

YOLO V2也叫YOLO9000,因为其能在保证实时检测的情况下识别类别高达9000多种

首先YOLO V2对YOLO检测方法进行了多种改进,通过使用一种新的、多尺度的训练方法,使得在速度和准确率下有一个平衡,改进后的YOLO V2模型在标准检测任务上是最先进的,和PASCAL VOC和COCO一样。(以67fps的速度,yolov2在voc2007上是76.9mAP,在40fps上,yolov2是78.6mAP)

YOLO V2还提出了一种联合训练目标检测和分类的方法,使用COCO检测数据集和ImageNet分类数据集同时训练YOLO。并且这种方法可以使YOLO对没有标记检测的数据进行预测。

 

【Introduction 引言】

目标检测应该快速准确,并且能够识别海量目标,自从引入神经网络依赖,目标检测框架已经变得越来越快且准确。然而,大多数目标检测方法仍然被局限在小部分目标上。

当前的目标检测数据集和分类、标记等其他任务相比是十分有限的,最常见的检测数据集包括几千到几十万张图像,几百个标签。而分类数据集有成百万的图像、成千上万个类别。

我们希望目标检测能达到目标分类的水平。然而,为检测贴标签比分类贴标签的代价要高得多,因此不太可能看到和分类数据集相规模的检测数据集。

YOLO V2提出了一种新的方法来利用已经拥有的大量分类数据去扩大检测范围。方法使用目标分类的分层观点,使我们能将不同的数据集结合在一起。还提出了一种联合训练算法,利用标记的检测图像来学习精准定位目标,用分类图像来增加词汇量和鲁棒性。

 

相比于YOLO V1,分为Better、Faster、Stronger三个部分来介绍性能的提升:

 

【Better】

相比于其他先进的检测系统,YOLO存在着各种缺陷,与Fast RCNN相比,YOLO的误差分析大多数都是定位误差。并且与其他基于区域建议(Region Perposal)的方法相比,YOLO的召回率较低。我们希望在保持分类精度的同时,提高召回率和定位准确度。

计算机视觉通常趋于更大、更深的网络。更好的性能往往取决于训练更大的网络或者多个模型的融合。然而我们希望YOLO V2不但准确还得快速。因此不但没有扩大网络,反而简化了网络,只是让特征更容易学习。 

我们将修改方法提升YOLO性能,在表2可以看到结果总结。

 

 

 1.Batch Normalization 

Batch Normalization导致收敛性显著改善,同时消除了对其他形式的规范化的需求。通过在所有卷积层后加Batch Normalization,mAP增加了2%。Batch Normalization也有助于规范化模型,因此我们可以在不overfitting的情况下去除dropout技术。

 

2.High Resolution(分辨率) Classifier  

所有先进的检测方法都会使用在ImageNet上预训练过的分类器。从AlexNet开始,大多数分类器在小于256*256的输入图像上运行。最初的YOLO先在224*224的输入图像训练分类网络再提高到448*448进行检测。这意味着网络在进行检测的学习的同时还需要适应新分辨率。

对于YOLO V2,我们首先在ImageNet上以448*448的完整分辨率对分类网络进行微调,并进行10个epoch。这会让网络有时间调整FILter去更好地处理高分辨率输入图像。接着我们对检测结果进行微调,这个高分辨率的分类网络使mAP增加了近4%。

 

3.Convolutional With Achor Boxes

YOLO使用卷计特征提取器顶部的全连接层来预测boundingbox的坐标,faster rcnn不直接预测坐标,而是使用hand-picked priors(手动挑选的先验框)来预测boundingbox,RPN只使用卷积层来预测锚框的偏移量和置信度,由于偏移度比坐标更容易预测,网络也就更容易学习。

我们在YOLO中去除全连接层,并且使用anchor box去预测bounndingbox。

我们去除了一个池化层使网络卷积层的数据有更高分辨率,还为了其能在416*416的输入图像上运行而缩小了网络,因为我们希望中心点只落在一个格子上,特别是大object。YOLO的卷积层对图像进行了32倍的下采样,因此通过416*416的图像我们得到的输出特征图是13*13.

 引入锚框后,将类别预测机制和空间位置解耦,而不是预测每个框的类别和objectness。和原来的YOLO一样,目标检测仍然预测gt box和proposed box(先验框)的IOU,而只会在有object的情况下进行类别检测。

使用anchorbox,准确率会有所下降,因为预测的box数量从之前98个变成2000多个,在之前mAP是69.5,召回率是81%,而引入锚框机制后,mAP是69.2,召回率88%。这说明我们的模型还有很大进步空间。

 

4.Dimension Clusters 维度集群

使用anchor box时遇到两个问题:

  • 第一个问题:box的尺寸是手动挑选的,网络能够学习调整合适的box,但如果我们在开始时为网络挑选更好的priors(?先验框),会使网络的检测学习得更好。

相比于手动选择priors(?先验框),我们在训练集的boundingbox上使用k-means聚类,来自动找到好的priors(?先验框)。并且由于使用标准k-means聚类和欧氏距离,大box会比小box产生更多误差,但我们只是想得到IOU高的box而与box大小无关,所以我们采用的距离度量是下面这个式子:

 

 我们对不同k值运行k-means聚类算法,

【k-means聚类算法:KMeans聚类算法详解 - 知乎 (zhihu.com)

【通过初始k个中心点,迭代多次以达到损失函数最小,即得到k个簇(cluster)】

并绘制出最接近中心点的平均IOU,得到结果如下图左边

 

权衡模型复杂度和召回率,选择k=5。这种方法挑选出的anchorbox和手动挑选的有明显区别,短宽的box较少,高瘦的box较多。 

(如上图右边显示的VOC和COCO相对中心点,两组先验都倾向于更瘦高的box,COCO的大小变化比VOC大)

如下图,对比了分别使用聚类和手选锚框的两种方法最接近的平均IOU

 

 说明使用k-means聚类生成boundingbox有助于提高性能

  • 第二个问题:模型的不稳定性,特别是在早期迭代中

大部分的不稳定性是来自于对box的位置预测,在RPN(region proposal network)网络中,网络预测值tx,ty和中心坐标(x,y)的计算方法是:

 

例如tx=1预测会将框向右移动一个box的宽度的距离,而tx=-1则会向左移相同距离。

由于这个公式不受限制,会使得anchorbox不管从哪里开始,都可以在图像的任意一个位置结束,特别是在随机初始化的情况下,模型需要很长时间才能稳定得预测出合适的偏移量offset。

而我们打算不预测偏移量offset而遵循旧YOLO的方法,预测相对于网格单位位置的坐标,这使得网络预测落在0-1之间。

网络为输出特征图的每个单元预测了5个boundingbox,每个boundingbox预测5个元素分别是tx,ty,tw,th和to(to是啥?)。如果cell和图像左上角的偏移量是cx和cy,先验框(boundingbox prior)的宽高是pw,ph。那预测值计算为:

 σ函数是sigmod函数,使其约束在0-1之间

由于对位置预测进行了限制,参数更容易学习,模型也更加稳定了。

使用维度聚类以及直接预测比boundingbox中心坐标,比使用anchorbox的版本,mAP提升了近5%。

 

5.Fine-Grained Features 细粒度特征

通过passthrough层,将相邻特征堆叠到不同通道上,将高分辨率特征和低分辨率特征串联起来,类似于resnet中的恒等映射。使性能提升1%mAP

 

6.Multi-Scale Training 多尺度训练

由于网络没有全连接层了,所以也不需要固定尺寸输入,那就对网络进行多尺度训练,每隔几个iteration就更改一次输入图像尺寸

每10个batch(?为啥前面说的是iteration)就随机选择一种新的输入图像尺寸,因为模型的下采样倍数为32,因此选择的也是32的倍数,320,352....608

这样就强迫网络学会在不同尺寸的输入图像上做预测。最后YOLO V2可以达到速度和精准度的良好平衡。

在低维度输入图像如288*288上,YOLO V2可以运行速度达到90FPS且mAP和Fast RCNN一样好。这使它成为较小GPU、高帧率视频或多个视频流的理想选择。

在高维度输入图像上YOLOV2是一个在VOC2007上达到78.6mAP的检测器,下图是和其他框架在VOC2007上的效果对比。

 

 

 

7.Further Experiments

YOLOV2在VOC2012上进行检测,下表显示了对比其他检测器在VOC2012上的性能表现。YOLOV2不仅比别的检测器运行快还达到了73.4mAP

 还使用了COCO进行训练,并且和其他的检测器性能比较如下图。

在VOC指标(IOU=0.5)上,YOLOV2达到44mAP,和SSD、Faster RCNN相当。

 

   

【Faster】(修改backbone)

大多数检测器使用VGG16左右基础框架,VGG16很强大,精准度也高,但是他太繁琐了,处理一张图像需要106.9亿次(10.69billion)浮点运算。

YOLO使用的是基于GoogleNet改良的网络框架,这个网络比VGG快但是精准度没有它好。

YOLOV2用的是Darknet-19,其在YOLO的基础上进行改进,和VGG相似,主要使用3*3的filter,并在每次池化之后将通道数增加一倍。如下图:

Darknet-19,19层卷积和5层maxpooling。只需要55.8亿次(5.58 billion)处理一幅图像,并且在ImageNet有72.9%的top-1准确率和91.2%的top-5准确率。

 

  • Training for classification:

使用随机梯度下降法在标准ImageNet1000类数据集上训练网络160epoch,初始学习率为0.1,多项式速率递减为4次方(polynoial rate decay with a power of 4),权重衰减为0.0005,动量为0.9。在训练过程中,使用了数据增强技巧如random crops、rotations(旋转)、hue(色调)、saturation(饱和度)、exposure shifts(曝光度转变)。

如上所述,对224*224对图像进行初始训练后,我们在更高分辨率的图像(448)上对网络进行fine tune。在fine tune中,我们用上述参数进行训练,但只会进行10epoch并且学习率从0.001开始,在这高分辨率情况下,网络top-1准确率达到76.5%,top-5准确率达到93.3%。

 

  • Training for detection:

对网络进行修改,去掉最后一个卷积层,增加三个3*3卷积层,每个卷积层有1024个filter,最后是一个1*1卷积层。

对VOC,预测5个框的5个元素(坐标和置信度),每个框有20个类别,因此有5*(+20)个filter,还从最后的3*3*512层增加一个passthrough层,来使模型可以使用细粒度特征。

从0.001的初始学习率训练网络160epoch,(divding it by 10at 60 and 90 epochs?啥意思,在60和90epoch时/10?)

使用0.0005的权重衰减(weight decay)和0.9的动量(momentum)。

使用和COCO、VOC同样的数据增强策略(随机裁剪、颜色转换等)。

 

【Stronger】(9000)

提出一种联合训练方法,将检测和分类分开训练,使用检测数据集学习监测信息如坐标和目标类,分类数据集用于扩大可检测类别。

在训练过程中混合了来自检测、分类数据集的图像。当网络看到被标记为检测的图像时,模型根据完整的YOLOV2损失函数进行反向传播,当他看到分类图像时,只从模型的分类特定部分反向传播损失。

这种方法中,由于分类数据集比分类数据集的类别更深入更多,如ImageNet中有一百多个狗的品种,而检测数据集可能只是把它分成“狗”。这就需要一种方式去表达label信息。

Hierarchical classification:

ImageNet的标签是从WordNet中提取的,WrokNet是一个语言数据库,用于构造概念和他们的关系。它的结构是一个有向图而不是一个树,因为语言是复杂的,“狗”既是“犬类”也是“家畜”。但我们不需要完整图结构,我们通过从ImageNet这个概念建立一棵分层的树来简化问题。

为了建立这个树,我们查看了ImageNet中的回视觉名词,并查看了它们通过WorkNet到根结点的路径,根结点也叫“physical object”。许多同义词在图中只有一条路径,因此首先把所有这些路径添加到树上,接着反复检查剩下的概念,并添加路径,使树的增长尽可能少,比如说如果一个概念有两条通往根的路径,选择较短的一条。

最后得到的结果是WordTree,一个视觉概念的分层模型。为了用WordTree进行分类,在每个节点上预测条件概率,即为在给定词下的定义词的概率。如下:

(例如在terrier节点时我们预测:) 

 

如果计算一个特定节点的概率,只需要把其沿路径到根节点的概率相乘,如下: 

(例如想知道一张图片是否为Norfolk terrier:诺福克猎犬)

 

(为了分类的目的,假设该图像包括一个物体,) 

为了验证这种方法,我们在使用1000类ImageNet建立的WordTree上训练Darknet-19模型。,为了建立WordTree1000,我们加入了所有的中间节点,将label space从1000扩大到了1369。在训练过程中我们在树上传播了ground true label,这样,如果一张图片被标记为“Norfolk terrier 诺福克猎犬”,他也会被标记为“dog”和“mammal”。为了计算条件概率,模型预测了一个1369个值组成的向量,softmax计算所有为同一层概念的概率。

 

使用和之前相同的训练参数,Darknet-19达到了71.9%的top-1准确率和90.4%的top-5准确率。尽管增加了369个额外的概念,并让我们的网络预测树状结构,但准确率只下降了一点。用这种方式的分类的好处是,在新的、未知的object上,其会分类到object最高概率的一层就不再向下。

如看到一张狗图片,但不确定是什么狗,那么“狗”的置信度仍然很高,只不过下一层的置信度分布降低。

这种表述(?formulation)也适用于检测。现在我们并不是假设每张照片都有一个物体,而是使用YOLOV2的objectness predictor来提供Pr(pyysical object)的值。检测器会预测一个边界框和概率树,我们向下遍历这棵树,在每一个分叉口采取最高置信度路径,直到达到某个阈值,我们就可以预测那个物体类别。

Dataset combination with WordTree:

我们可以使用wordtree将多个数据集组合到一起,只需要将数据集的类别映射到树上的synset。如下图:

 

 

Joint classification and detection:

我们可以使用WordTree结合数据集,训练分类和检测的联合模型,由于希望检测范围可以很大,于是使用COCO检测数据集和ImageNet完整版本中的前9000类来创建我们的联合数据集(combined dataset)。我们还需要对方法进行评估,所以另外加了imagenet检测中未包括对其他类别。

这个数据集wordtree一共有9418个类。并且由于imagenet比coco要大很多,我们要对coco多次采样(oversampling)使它们的比例呈4:1。

当他看到一个分类图像,只反向传播分类损失。要做到这一点,我们只需找到预测该类的最高概率的boundingbox并计算其预测树上的损失。我们还假设预测框(predicted box)与gound true box的IOU>0.3,根据这一假设反向传播objectness loss。

通过这种联合训练,YOLO9000可以使用COCO中的检测数据对图像物体定位,使用ImageNet中的数据对这些物体进行分类。

当我们分析YOLO9000在ImageNet上的表现,我们看到它能很好地学习新的动物类的object,但在学习服装和设备等的object时却很困难。新的动物更容易学习,因为它的对象性(?objectness)可以从COCO的animal类中概括出来,但COCO没有什么clothes类型的label,所以在“sunglass”、“swimming trunks”等label的建模就有点吃力。

 

posted on 2022-10-12 09:12  Jolyne123  阅读(247)  评论(0)    收藏  举报