文献阅读-YOLOV2

Scroll Down

YOLO9000:Better, Faster, Stronger

Abstract

我们介绍了YOLO9000,一个最先进的实时物体检测系统,可以检测超过9000个物体类别。首先,我们提出了对YOLO检测方法的各种改进,这些改进既是新的,也是来自先前的工作。改进后的模型YOLOv2在标准检测任务上是最先进的,如PASCAL VOC和COCO。使用一种新的、多尺度的训练方法,同一个YOLOv2模型可以在不同的规模下运行,在速度和准确性之间提供了一个简单的权衡。在67FPS时,YOLOv2在VOC 2007上得到76.8mAP。在40 FPS时,YOLOv2得到78.6 mAP,超过了最先进的方法,如带有ResNet和SSD的Faster RCNN,同时运行速度仍然很高。最后,我们提出了一种联合训练物体检测和分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。我们的联合训练使YOLO9000能够预测没有标记检测数据的物体类别的检测情况。我们在ImageNet检测任务上验证了我们的方法。尽管只有200个类中的44个有检测数据,YOLO9000在ImageNet检测验证集上得到了19.7的mAP。在没有COCO的156个类中,YOLO9000得到了16.0 mAP。但YOLO能检测的不仅仅是200个类别;它能预测9000多个不同类别的物体的检测。而且它仍然是实时运行的。

1. 介绍

通用的物体检测应该是快速、准确的,并且能够识别各种各样的物体。自从引入神经网络以来,检测框架已经变得越来越快和准确。然而,大多数检测方法仍然被限制在一小部分物体上。

与分类和标记等其他任务的数据集相比,目前的物体检测数据集是有限的。最常见的检测数据集包含几千到几十万张图像,有几十到几百个标签[3] [10] [2]。分类数据集有数以百万计的图像,有数万或数十万个类别[20] [2]。

我们希望检测能够达到物体分类的水平。然而,为检测而给图像贴标签比为分类或标签贴标签要昂贵得多(标签通常是用户免费提供的)。因此我们不可能在未来不可能看到检测数据集和分类数据集尺度相同。

我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并利用它来扩大当前检测系统的范围。我们的方法使用物体分类的分层观点,使我们能够将不同的数据集结合在一起。

我们还提出了一种联合训练算法,使我们能够在检测和分类数据上训练物体检测器。我们的方法利用标记的检测图像来学习精确定位物体,同时使用分类图像来增加其词汇量和稳健性。

使用这种方法,我们训练了YOLO9000,这是一个实时物体检测器,可以检测超过9000个不同的物体类别。
首先,我们在基础YOLO检测系统的基础上进行改进,以产生YOLOv2,一个最先进的实时检测器。然后,我们使用我们的数据集组合方法和联合训练算法,在ImageNet的9000多个类别以及COCO的检测数据上训练一个模型。

我们所有的代码和预训练的模型都可以在网上找到:http://pjreddie.com/yolo9000/

image.png![image-20230220152834056](F:\Scientific Research\文献分享\论文\Object Detection\Markdown\YOLO9000Better, Faster, Stronger.assets\image-20230220152834056.png)

2. Better

相对于最先进的检测系统,YOLO存在着各种缺陷。与Fast R-CNN相比,YOLO的错误分析表明,YOLO存在大量的定位错误。此外,与基于Region Proposal的方法相比,YOLO的召回率相对较低。因此,我们主要关注的是在保持分类精度的同时,提高召回率和定位率。

计算机视觉一般倾向于更大、更深的网络[6] [18] [17]。更好的性能往往取决于训练更大的网络或将多个模型集合在一起。然而,在YOLOv2中,我们希望有一个更准确的检测器,但仍然是快速的。我们没有扩大我们的网络,而是简化了网络,然后使表示更容易学习。我们将过去工作中的各种想法与我们自己的新概念结合起来,以提高YOLO的性能。表2中可以看到结果摘要。

Batch Normalization。批量归一化导致收敛性的显著改善,同时消除了对其他形式的正则化的需求[7]。通过在YOLO的所有卷积层上添加批量归一化,我们在mAP上得到了超过2%的改进。batch normalization也有助于规范化模型。有了batch normalization,我们可以从模型中去除dropout,而不至于过拟合。

High Resolution Classifier。所有最先进的检测方法都使用在ImageNet上预训练的分类器[16]。从AlexNet开始,大多数分类器在小于$256\times 256$的输入图像上运行[8]。最初的YOLO以$224\times 224$分辨率训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习物体检测和调整到新的输入分辨率。

对于YOLOv2,我们首先在ImageNet上以完整的$448\times 448$分辨率对分类网络进行了10次微调。这让网络有时间调整其过滤器,以便在更高的分辨率输入上更好地工作。然后,我们在检测时对所产生的网络进行微调。这个高分辨率的分类网络使我们的mAP增加了近4%。

Convolutional With Achor Boxes。YOLO直接使用卷积特征提取器上面的全连接层来预测bounding box的坐标。Faster R-CNN不直接预测坐标,而是使用手工挑选的先验因素来预测边界框[15]。Faster R-CNN中的区域建议网络(RPN)只使用卷积层,预测anchor boxes的偏移量和置信度。由于预测层是卷积层,RPN预测了特征图中每个位置的这些偏移量。预测偏移量而不是坐标可以简化问题,使网络更容易学习。

我们从YOLO中移除全连接层,并使用anchor boxes来预测边界框。首先,我们取消了一个池化层,使网络卷积层的输出具有更高的分辨率。我们还缩小了网络,使其在416分辨率的输入图像上运行,而不是$448\times 448$。我们这样做是因为我们希望在我们的特征图中有一个奇数的位置,以便有一个单一的中心单元。
物体,尤其是大型物体,往往会占据图像的中心位置,所以在中心位置有一个单一的位置来预测这些物体是很好的,而不是有四个位置都在附近。YOLO的卷积层对图像进行了32倍的降样,所以通过使用416的输入图像,我们得到的输出特征图是$13\times 13$。

至于anchor boxes,我们也将类别预测机制与空间位置脱钩,而是预测每个achor box的类别和对象。在YOLO之后,对象预测仍然预测ground box和预测的box的IOU,而类别预测则预测是物体前提下的类别条件概率。

使用anchor boxes,我们得到的准确率会有小幅下降。YOLO每张图片只预测了98个box,但使用anchor boxes,我们的模型预测了一千多个。没有anchor boxes,我们的中间模型得到69.5的mAP,召回率为81%。有了锚定框,我们的模型得到69.2的mAP,召回率为88%。即使mAP下降了,召回率的增加意味着我们的模型有更大的改进空间。

Dimension Cluster。在与YOLO一起使用anchor boxes时,我们遇到了两个问题。第一个问题是,盒子的尺寸是手工挑选的。网络可以学习适当地调整盒子,但是如果我们为网络挑选更好的先验因素来开始,我们可以使网络更容易学习预测良好的检测结果。

我们没有手动挑选先验box,我们在训练集bounding boxes上使用了k-means聚类来自动寻找先验框。如果我们使用标准的K-means与欧氏距离,较大的盒子比小盒子产生更多的错误。然而,我们真正想要的是导致良好的IOU得分的先验,这与盒子的大小无关。因此,对于我们的距离度量,我们使用:

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

我们对不同的k值运行k-means,并绘制出最接近中心点的平均IOU,见图2。我们选择k=5作为模型复杂性和高召回率之间的一个良好权衡。聚类中心点与手工挑选的锚箱有明显不同。短而宽的盒子较少,高而薄的盒子较多。

我们在表1中比较了我们的聚类策略和手工挑选的锚箱的平均IOU与最接近的先验。在只有5个先验的情况下,中心点的表现与9个anchor box相似,平均IOU为61.0而不是60.9。如果我们使用9个中心点,我们会看到一个高得多的平均IOU。这表明,使用k-means来生成我们的边界盒,使模型开始有一个更好的表示,并使任务更容易学习。

image.png

Direct location prediction。当使用anchor box和YOLO时,我们遇到了第二个问题:模型的不稳定性,特别是在早期迭代中。大部分的不稳定性来自于对盒子的位置(x,y)的预测。在区域建议网络中,网络预测值tx和ty, 中心坐标(x,y)的计算方法是:

$$ x=(t_x*w_a)-x_a \\ y=(t_y*h_a)-y_a $$

例如,$t_x=1$的预测会将盒子向右移动,移动的宽度为anchor box的宽度,$t_x=-1$的预测会将盒子向左移动相同的数量。

这个公式是不受限制的,所以任何锚定框都可以在图像中的任何一点结束,无论预测框的位置如何。在随机初始化的情况下,模型需要很长时间才能稳定地预测出合理的偏移量。

我们不预测偏移量,而是遵循YOLO的方法,预测相对于网格单元位置的坐标。我们使用逻辑激活来约束网络的预测,使其落在这个范围内。

该网络在输出特征图的每个单元预测5个边界框。网络为每个边界框预测了5个坐标,即$t_x, t_y, t_w, t_h和t_o$。如果单元格与图像左上角的偏移量为$(c_x, c_y)$,并且边界框的先验宽度和高度为$p_w, p_h$,那么预测值就对应于:

$$ \begin{aligned} b_{x} & =\sigma\left(t_{x}\right)+c_{x} \\ b_{y} & =\sigma\left(t_{y}\right)+c_{y} \\ b_{w} & =p_{w} e^{t_{w}} \\ b_{h} & =p_{h} e^{t_{h}} \\ \operatorname{Pr}(\text { object }) * \operatorname{IOU}(b, \text { object }) & =\sigma\left(t_{o}\right) \end{aligned} $$

由于我们限制了位置预测,参数化更容易学习,使网络更稳定。使用维度聚类以及直接预测边界框中心位置,使YOLO比使用锚定框的版本提高了近5%。
细粒度的特征。这个修改后的YOLO预测了$13\times 13$的特征图上的检测。虽然这对大型物体来说已经足够了,但在定位较小的物体时,它可能会受益于更细粒度的特征。Faster R-CNN和SSD都在网络中的各种特征图上运行他们的提议网络,以获得一系列的分辨率。我们采取了一种不同的方法,简单地增加了一个穿透层,以$26\times 26$的分辨率从早期的层带来特征。

Passthrough通过将相邻的特征堆叠到不同的通道而不是空间位置,将高分辨率的特征与低分辨率的特征串联起来,类似于ResNet中的身份映射。这把$26\times 26\times 512$的特征图转变成$13\times 13\times 2048$特征图,它可以与原始特征串联起来。我们的检测器在这个扩展的特征图之上运行,这样它就可以访问细粒度的特征。这可以使性能提高1%。
image.png

Multi-Scale Training。原始的YOLO使用$448\times 448$的输入分辨率。随着anchor box的增加,我们将分辨率改为$416\times 416$。然而,由于我们的模型只使用卷积层和池化层,它可以在飞行中调整大小。我们希望YOLOv2能够稳健地运行在不同尺寸的图像上,所以我们将此训练到模型中。

我们没有固定输入图像的大小,而是每隔几个迭代就改变网络。每10个批次,我们的网络就会随机选择一个新的图像尺寸。由于我们的模型缩小了32倍,我们从以下32的倍数中抽取:{320, 352,... 608}。因此,最小的选项是$320\times 320$,最大的是$608\times 608$。
我们把网络的大小调整到这个维度,然后继续训练。
image.png

这种制度迫使网络学会在各种输入维度上进行良好的预测。这意味着同一个网络可以预测不同分辨率下的检测结果。网络在较小的尺寸下运行得更快,因此YOLOv2在速度和准确性之间提供了一个简单的权衡。

在低分辨率下,YOLOv2作为一个廉价、相当准确的检测器运行。在288288下,它的运行速度超过90 FPS,其mAP几乎与Fast R-CNN一样好。这使它成为较小的GPU、高帧率视频或多个视频流的理想选择。

在高分辨率下, YOLOV2仍然是SOTA检测器,在VOC 2007上以实时速度仍能打到78.6的map。表3是YOLOV2和其他检测模型的比较。

Future Experiments。我们训练YOLOv2对VOC 2012进行检测。表4显示了YOLOv2与其他最先进的检测系统的比较性能。YOLOv2实现了73.4 mAP,同时运行速度远远超过竞争方法。我们还对COCO进行了训练,并在表5中与其他方法进行了比较。在VOC指标(IOU = 0.5)上,YOLOv2得到44.0 mAP,与SSD和Faster R-CNN相当。

image.png

3. 更快

我们希望检测是准确的,但我们也希望它是快速的。大多数检测的应用,如机器人或自动驾驶汽车,都依赖于低延迟的预测。为了使得表现最好,我们将YOLOv2设计成从头到尾都很快速。

大多数检测框架依靠VGG-16作为基础特征提取器[17]。VGG-16是一个强大的、准确的分类网络,但它是不必要的复杂。VGG-16的卷积层需要306.9亿次浮点运算,以224x224的分辨率通过一张图片。

YOLO框架使用一个基于Googlenet架构的定制网络[19]。这个网络比VGG-16更快,一个前向通道只用了85.2亿次运算。然而,它的准确性比VGG16略差。对于单作物,在224的前5名的准确率,YOLO的自定义模型得到88.0%的ImageNet,而VGG-16则是90.0%。

Darknet-19。我们提出一个新的分类模型,作为YOLOv2的基础。我们的模型建立在先前的网络设计工作以及该领域的常识之上。与VGG模型类似,我们主要使用3个3的过滤器,并在每个池化步骤后将通道数量增加一倍[17]。按照网络中的网络(NIN)的工作,我们使用全局平均池来进行预测,以及使用1x1过滤器来压缩3x3卷积之间的特征表示[9]。我们使用批量归一化来稳定训练,加速收敛,并使模型正规化[7]。我们的最终模型,称为Darknet-19,有19个卷积层和5个maxpooling层。完整的描述见表6。Darknet-19只需要55.8亿次操作来处理一幅图像,但在ImageNet上达到了72.9%的前1名准确率和91.2%的前5名准确率。

训练分类。我们使用随机梯度下降法在标准的ImageNet 1000类分类数据集上训练网络160个epochs,起始学习率为0.1,多项式速率衰减为4次方,权重衰减为0.0005,动量为0.9,使用Darknet神经网络框架[13]。在训练过程中,我们使用了标准的数据增强技巧,包括随机作物、旋转以及色调、饱和度和曝光的转变。
如上所述,在对224的图像进行初步训练后,我们在更大的尺寸(448)下对我们的网络进行微调。在这种微调中,我们用上述参数进行训练,但只用了10个历时,并以10􀀀3 的学习率开始。在这个较高的分辨率下,我们的网络达到了76.5%的最高1级准确率和93.3%的最高5级准确率。

训练检测。我们对这个网络进行了修改,去掉了最后一个卷积层,而是增加了3个3个卷积层,每个卷积层有1024个过滤器,然后是最后的11个卷积层,其输出的数量与我们的检测需要的数量相同。对于VOC,我们预测5个盒子,每个盒子有5个坐标,每个盒子有20个类别,所以有125个过滤器。我们还从最后的3 3 512层添加了一个穿透层到倒数第二层卷积层,这样我们的模型就可以使用细粒度特征。

我们对网络进行了160个epoch的训练,起始学习率为$10^{-3}$,在60和90个epoch后除以10。

image.png

我们使用0.0005的权重衰减和0.9的动量。我们对YOLO和SSD使用了类似的数据增强,包括随机作物、颜色转换等。我们在COCO和VOC上使用同样的训练策略。

4. 更强

我们提出了一种在分类和检测数据上联合训练的机制。我们的方法使用标记为检测的图像来学习检测的具体信息,如边界框坐标预测和物体性,以及如何对普通物体进行分类。它使用只有类别标签的图像来扩大它可以检测的类别的数量。

在训练过程中,我们混合了来自检测和分类数据集的图像。当我们的网络看到被标记为检测的图像时,我们可以根据完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,我们只从架构的分类特定部分反向传播损失。

这种方法带来了一些挑战。检测数据集只有常见的物体和一般的标签,如 "狗 "或 "船"。分类数据集有更广泛和更深入的标签范围。ImageNet有一百多个狗的品种,包括 "诺福克梗"、"约克夏梗 "和 "贝灵顿梗"。如果我们想在这两个数据集上进行训练,我们需要一个连贯的方法来合并这些标签。

大多数分类方法在所有可能的类别中使用softmax层来计算最终的概率分布。使用softmax时,假定这些类别是相互排斥的。这给合并数据集带来了问题,例如,你不会想用这个模型来合并ImageNet和COCO,因为 "诺福克梗 "和 "狗 "这两个类别并不相互排斥。

我们可以使用一个多标签模型来组合数据集,而这个模型并不假定相互排斥。这种方法忽略了我们所知道的关于数据的所有结构,例如,所有的COCO类都是互斥的。

分层分类。ImageNet的标签是从WordNet中提取的,WordNet是一个语言数据库,用于构造概念和它们之间的关系[12]。在WordNet中,"诺福克梗 "和 "约克夏梗 "都是 "梗 "的外来语,而 "梗 "是 "猎狗 "的一种,是 "狗 "的一种,是 "犬 "的一种,等等。大多数分类方法都假定标签有一个平面结构,然而对于结合数据集来说,结构正是我们所需要的。

WordNet的结构是一个有向图,而不是一棵树,因为语言是复杂的。例如,"狗 "既是 "犬类 "的一种类型,也是 "家畜 "的一种类型,它们都是WordNet中的主题词。我们没有使用完整的图结构,而是通过从ImageNet中的概念建立一棵分层的树来简化这个问题。

为了建立这棵树,我们检查了ImageNet中的视觉名词,并查看了它们通过WordNet图到根节点的路径,在这个例子中是 "实物"。许多同义词在图中只有一条路径,因此我们首先将所有这些路径添加到我们的树上。然后,我们反复检查我们剩下的概念,并添加尽可能少的路径来增加树的长度。因此,如果一个概念有两条通往根的路径,其中一条路径会给我们的树增加三条边,而另一条只增加一条边,我们就选择较短的路径。

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

![image-20230220163645675](F:\Scientific Research\文献分享\论文\Object Detection\Markdown\YOLO9000Better, Faster, Stronger.assets\image-20230220163645675.png)

如果我们想计算一个特定节点的绝对概率,我们只需沿着树的路径到根节点,然后乘以条件概率。因此,如果我们想知道一张图片是否是诺福克猎犬,我们就计算一下:

image.png

为了分类的目的,我们假设该图像包含一个物体。Pr(物理对象)=1。

为了验证这种方法,我们在使用1000类ImageNet建立的WordTree上训练Darknet-19模型。为了建立WordTree1k,我们加入了所有的中间节点,将标签空间从1000扩大到1369。在训练过程中,我们在树上传播基础事实标签,这样,如果一张图片被标记为 "诺福克梗",它也会被标记为 "狗 "和 "哺乳动物",等等。为了计算条件概率,我们的模型预测了一个由1369个值组成的向量,我们计算了所有作为同一概念的外来语的系统集的softmax,见图5。

使用与之前相同的训练参数,我们的分层式Darknet-19达到了71.9%的前1名准确率和90.4%的前5名准确率。尽管增加了369个额外的概念,并让我们的网络预测树状结构,但我们的准确率只下降了一点。以这种方式进行分类也有一些好处。在新的或未知的物体类别上,性能会优雅地下降。例如,如果网络看到一张狗的照片,但不确定它是什么类型的狗,它仍然会以高置信度预测 "狗",但在假名中分布的置信度会降低。

这种提法也适用于检测。现在,我们不是假设每张图片都有一个物体,而是使用YOLOv2的物体性预测器来给我们Pr(物理物体)的值。该检测器直接预测bounding box和树的概率。我们在树上往下走,在每个分叉处走最高的置信度路径,直到我们达到某个阈值,我们就可以预测该对象的类别。

数据集与WordTree的组合。我们可以使用WordTree以一种合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树上的同位素。图6显示了一个使用WordTree来结合ImageNet和COCO的标签的例子。WordNet是非常多样化的,所以我们可以将这种技术用于大多数数据集。

联合分类和检测。现在我们可以使用WordTree结合数据集,我们可以在分类和检测上训练我们的联合模型。我们想训练一个极大规模的检测器,所以我们使用COCO检测数据集和ImageNet完整版本中的前9000个类来创建我们的联合数据集。我们还需要评估我们的方法,所以我们加入了ImageNet检测挑战中尚未包括的任何类别。这个数据集的相应WordTree有9418个类。ImageNet是一个更大的数据集,所以我们通过对COCO的过度采样来平衡数据集,使ImageNet只比它大4:1。

使用这个数据集,我们训练YOLO9000。我们使用基本的YOLOv2架构,但只有3个先验因素,而不是5个,以限制输出大小。当我们的网络看到一个检测图像时,我们像平常一样反向传播损失。对于分类损失,我们只在标签的相应级别或以上反向传播损失。例如,如果标签是 "狗",我们不给树上更远的预测分配任何错误,"德国牧羊犬 "与 "金毛猎犬",因为我们没有这些信息。

当它看到一个分类图像时,我们只反向传播分类损失。要做到这一点,我们只需找到预测该类的最高概率的边界框,我们只计算其预测树的损失。我们还假设预测的盒子与地面真实标签至少有:3 IOU的重叠,我们根据这个假设反向传播对象性损失。

通过这种联合训练,YOLO9000学会了使用COCO中的检测数据来寻找图像中的物体,并学会了使用ImageNet中的数据对这些物体进行分类。
我们在ImageNet检测任务上评估了YOLO9000。

ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000总体上得到了19.7个mAP,在它从未见过任何标记的检测数据的156个不相干的对象类别上得到了16.0个mAP。这个mAP比DPM取得的结果要高,但是YOLO9000是在不同的数据集上训练的,只有部分监督[4]。它还同时检测了9000个其他物体类别,而且都是实时的。

当我们分析YOLO9000在ImageNet上的表现时,我们看到它能很好地学习动物的新物种,但在学习服装和设备等类别时却很困难。

新的动物更容易学习,因为对象性预测可以很好地从COCO中的动物中概括出来。相反,COCO没有任何类型的衣服的边界框标签,只有人的标签,所以YOLO9000很难对 "太阳镜 "或 "游泳裤 "等类别进行建模。

5. 结论

我们介绍了YOLOv2和YOLO9000,实时检测系统。YOLOv2是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像尺寸下运行,在速度和准确性之间提供平稳的权衡。

YOLO9000是一个实时框架,通过联合优化检测和分类来检测9000多个物体类别。我们使用WordTree来结合各种来源的数据和我们的联合优化技术,在ImageNet和COCO上同时训练。YOLO9000是朝着缩小检测和分类之间的数据集大小差距迈出的有力一步。我们的许多技术都可以在物体检测之外进行推广。
我们对ImageNet的WordTree表示为图像分类提供了一个更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域将是有用的。像多尺度训练这样的训练技术可以在各种视觉任务中提供好处。

对于未来的工作,我们希望将类似的技术用于弱监督的图像分割。我们还计划在训练过程中使用更强大的匹配策略为分类数据分配弱标签来提高我们的检测结果。计算机视觉有着得天独厚的大量标记数据。我们将继续寻找方法,将不同来源和结构的数据结合起来,为视觉世界建立更强大的模型。