YOLO v2

YOLO9000:Better,Faster,Stonger

Abstract

我们介绍了YOLO9000,它是一个最先进的实时目标检测系统,它可以检测超过9000个目标类别。首先,我们提出了对YOLO目标检测方法的各种改进,既新颖也借鉴了先前的工作。改进后的YOLOv2模型在PASCAL VOC和COCO数据集等标准目标检测任务上是最先进的。使用一种新颖的多尺度训练方法,YOLOv2模型可以在不同的大小运行,在速度和准确性之间提供了一个简单的折衷。在67帧/秒的速度下, YOLOv2在VOC 2007数据集上得到76.8mAP。在40帧/秒的速度下,YOLOv2获得了78.6mAP,超过了最先进的方法,如使用ResNet的Faster R-CNN和运行速度更快的SSD。最后提出了目标检测和分类一起训练的方法。利用该方法,我们同时在COCO目标检测数据集和ImageNet分类数据集上对YOLO9000进行训练。我们的联合训练使YOLO9000能够检测没有被标记的待检测数据的目标类别。我们在ImageNet检测任务上验证了我们的方法。YOLO9000得到了在ImageNet检测验证集上的19.7mAp,尽管它只有200个类中的44个的检测数据。在156个不在COCO数据集的类别中,YOLO9000获得了16.0 mAP。但是YOLO可以检测超过200个类;它预测了9000多种不同物体类别的目标检测。它仍然是实时运行的。

1. Introduction

通用目标检测应该快速、准确,并且能够识别各种各样的目标对象。随着神经网络的引入,目标检测框架变得越来越快速和准确。然而,大多数检测方法仍然局限于一小部分目标对象。

与其他任务(如分类和标记)的数据集相比,当前的目标检测的数据集是有限的。最常见的目标检测数据集包含有几十到几百个标签的成千上万图像。分类数据集拥有成千上万的类别的数以百万计图像。

我们希望目标检测数据集的规模达到目标分类的水平。但是,用于目标检测的标记图像要比用于分类的标签或标记昂贵得多(标记通常由用户免费提供)。因此,在不久的将来,我们不太可能看到与分类数据集规模相同的目标检测数据集。

在这里插入图片描述
在这里插入图片描述

我们提出了一种新的方法来利用我们已经拥有的大量分类数据,并利用它来扩展当前目标检测系统的范围。我们的方法使用目标分类的层次视图(hierarchical view),允许我们将不同的数据集组合在一起。

我们还提出了一个联合训练算法,使我们能够在目标检测和分类数据上训练目标检测器。我们的方法利用已经标记的目标检测图像学习精确定位对象,同时使用分类图像来增加图片数量(vocabulary)和鲁棒性(robustness)。

使用这种方法,我们训练了YOLO9000,一种可以检测9000多种不同对象类别的实时目标探测器。首先,我们在YOLO检测系统的基础上进行了改进,形成YOLOv2,YOLOv2是一种最先进的实时检测器。然后利用数据集组合方法和联合训练算法对来自ImageNet的9000多个类和来自COCO的目标检测数据进行模型训练。

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

2. Better

与最先进的目标检测系统相比,YOLO有很多缺点。YOLO的错误分析与Fast R-CNN表明,YOLO有大量的定位错误。此外,与基于候选区域的方法相比,YOLO的召回率(recall)相对较低。因此,我们的重点是提高召回率和定位,同时保持分类的准确性。

计算机视觉通常趋向于更大、更深的网络。更好的性能通常取决于训练更大的网络或将多个模型集成在一起。但是,对于YOLOv2,我们需要一个更精确的、速度更快的探测器。我们不是扩展我们的网络,而是简化网络,然后使图像的表示(representation)更容易学习。为了提高YOLO的表现,我们从过去的工作中收集各种想法,并结合我们自己的新理念。对于结果的总结见表2。

Batch Normalization (批量归一化): 批量归一化在收敛性方面有显著的改进,同时消除了对其他正则化形式的需要。通过在YOLO中所有的卷积层上添加批量归一化,我们得到了超过2%的mAP提升。批量归一化还有助于对模型进行正则化(regularize)。使用批量归一化,我们可以从模型中删除dropout。

High Resolution Classifier ( 高分辨率的分类器):。所有最先进的检测方法都使用在ImageNet上预先训练的分类器。从AlexNet开始,大多数分类器对小于256×256的输入图像进行操作。原始的YOLO以224×224训练分类器网络,我们将检测分辨率提高到448。这意味着网络必须同时切换到学习目标检测并调整到新的输入分辨率。

对于YOLOv2,我们首先在ImageNet上以448×448的分辨率对分类网络进行10个轮微调。这就给了网络时间来调整它的过滤器(filters),以便在更高分辨率的输入上更好地工作。然后对检测结果网络进行微调。这个高分辨率的分类网络使我们的mAP增加了近4%

Convolutional With Anchor Boxes(卷积与锚框) : YOLO直接使用全卷积特征提取器上的全连接层来预测边界框的坐标。不是直接预测边界框的坐标,Faster R-CNN预测边界框使用预先手工挑选的方式。Faster R-CNN中,区域候选网络(RPN:region proposal network)仅使用卷积层预测锚框(anchor boxes)的偏移量和置信度。由于预测层是卷积的,RPN在特征图的每个位置预测这些偏移量(offsets)。预测偏移量而不是坐标 简化了问题,使网络更容易学习。

我们从YOLO中移除全连接层,并使用锚框来预测边界框。首先,我们消除一个池化层,使网络的卷积层的输出具有更高的分辨率。我们还缩小了网络,在416的输入图像上进行操作,而不是448×448。我们这样做是因为我们想要在我们的特征图(feature map)中有奇数个位置,所以只有一个中心单元格。目标对象(尤其是大的目标)往往占据图像的中心,所以最好在中心有一个单独的位置来预测这些目标对象,而不是四个位置都在附近。YOLO的卷积层将图像降采样32倍,因此使用416的输入图像,我们得到了13×13的输出特征图。

当我们移动到锚盒时,我们也将类预测机制与空间位置解耦,取而代之的是为每个锚盒预测类和对象。在YOLO之后,对象性预测仍然预测ground truth和所提议的box的IOU,而类预测则预测给定一个对象的类的条件概率。

使用锚框(anchor boxes),我们得到一个小的准确性下降。YOLO只预测了每幅图像的98个边界框,而使用锚框我们的模型可以预测1000多个。如果没有锚框,我们的中间模型将获得69.5mAP,81%的召回率。使用锚框,我们的模型获得了69.2 mAP,召回率为88%。即使mAP下降了,召回率的增加意味着我们的模型有更大的改进空间。

Dimension Clusters (维度聚类): 在YOLO上使用锚框时,我们会遇到两个问题。首先,锚框的尺寸是手工挑选的。网络可以学会适当地调整锚框,但是如果我们预先为网络选择更好的框,对于网络来说,一开始我们可以使网络更容易学会预测好的检测。

在这里插入图片描述

不需要手动事先选择,我们在训练集边界框上运行k-means聚类,自动寻找到好的锚框。 如果我们使用具有欧几里德距离(Euclidean distance)的标准k-menas,则较大的锚框会比较小的锚框产生更多的误差。 但是,我们真正想要的是能够获得良好IOU分数的锚框,而这与锚框的大小无关。 因此,我们使用如下距离度量:
在这里插入图片描述
我们对k的各种值运行k-means,并绘制出具有最接近质心(centroid)的平均IOU,如图2。我们选择k = 5作为模型复杂度和模型高召回率的折中。聚类质心与手工挑选的锚框明显不同。 短而宽的框很少,高瘦的框比较多。

我们比较 聚类策略预先最接近的锚框 和 在表1中手动选择的锚框 的平均IOU。仅5个预先质心(平均IOU为61.0)的表现就与9个锚框类似(平均IOU为60.9)。 如果使用9个质心,则平均IOU会更高。 这表明使用k-means生成边界框可以更好地表示模型,从而使任务更易于学习。

在这里插入图片描述

Direct location prediction(直接位置预测): 在YOLO中使用锚框时,我们会遇到第二个问题:模型不稳定,尤其是在早期迭代期间。 大部分不稳定来自预测边界框的(x,y)位置。 在区域候选网络(region proposal networks)中,网络预测 txty(x,y) 中心坐标的计算公式如下:
在这里插入图片描述
例如,tx = 1的预测将使该边界框向右移动锚框的宽度,tx = -1的预测将使该框向左移动相同的宽度。

这个公式不受限制,因此任何锚框都可以终止于图像中的任何点,而不管预测该框的位置是什么。通过随机初始化,该模型需要很长时间才能稳定的预测合理的偏移量。

代替预测偏移量,我们遵循YOLO的方法,预测相对于网格单元位置的位置坐标。这将值限制在0到1之间。我们使用逻辑激活函数将网络的预测限制在此范围内。

网络会在输出特征图中的每个单元预测5个边界框。网络为每个边界框预测5个坐标( txtytwthto )。如果单元格从图像的左上角偏移了( cxcx )并且边界框预先(prior)的宽度和高度为 pwph ,则预测对应于:
在这里插入图片描述
由于我们限制了位置预测,因此参数化更容易学习,从而使网络更稳定。 直接使用维度聚类预测边界框中心位置将比带有锚框版本的YOLO提高近5%。

Fine-Grained Features:(细粒度特性):修改过的YOLO可以预测13×13特征图上的检测结果。 虽然这对于大型目标对象已经足够,但它可能会受益于用于定位较小目标对象的更细粒度的特性(finer grained features)。 Faster R-CNN和SSD都在网络的不同特征图上运行他们的候选网络(proposal networks),以获得一系列的分辨率。 我们采用了不同的方法,简单的添加了一个通过层(passthrough layer),这个层(26*26)可以带来之前层的特征。

在这里插入图片描述

通过层(passthrough layer)通过将相邻的特征叠加到不同的通道中而不是空间位置,从而将高分辨率特征与低分辨率特征连接起来,类似于ResNet中的身份映射。 这会将26×26×512特征图转换为13×13×2048特征图,可以与原始特征进行连接。 我们的检测器在此扩展的特征图上运行,因此可以访问细粒度的特性。 这会适度提高1%的性能。

**Multi-Scale Training:(多尺度训练)**原始的YOLO使用输入分辨率为448×448。通过添加锚框,我们将分辨率更改为416×416。但是,由于我们的模型仅使用卷积和池化层,因此可以随时调整其大小。我们希望YOLOv2能够健壮地运行在不同大小的图像上,因此,我们将其训练到模型中,

不是固定输入图像的大小,而是每隔几次迭代就更改网络。每10批次,我们的网络就会随机选择一个新的图像尺寸。由于我们将模型降采样32倍,我们从以下32的倍数中提取:{320,352,…,608}。因此,最小的选项是320×320,最大的是608×608。我们将网络调整为该尺寸并继续训练。

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

在低分辨率下,YOLOv2可以当成廉价,相当准确的检测器。在288×288的分辨率下,它的运行速度超过90 FPS,mAP几乎与Fast R-CNN相当。这使其非常适合较小的GPU、高帧率视频或多个视频流。

在高分辨率下,YOLOv2是在VOC 2007上具有78.6 mAP的最新检测器,同时仍以实时速度运行。 有关YOLOv2与VOC 2007上与其他框架的比较,请参见表3。图4
在这里插入图片描述

**Further Experiments:(进一步的实验)**我们在VOC 2012上训练YOLOv2进行检测,表4显示了YOLOv2与其他最新检测系统的比较性能。 YOLOv2达到73.4 mAP,同时运行速度远远超过竞争方法。 我们还对COCO进行了训练,并与表5中的其他方法进行了比较。在VOC度量标准(IOU = 0.5)上,YOLOv2获得44.0 mAP,与SSD和Faster R-CNN相当。
在这里插入图片描述

3. Faster

我们希望检测是准确的,但我们也希望它是更快。大多数检测应用程序,如机器人或自动驾驶汽车,依赖于低延迟预测。为了使性能最大化,我们设计了YOLOv2。
在这里插入图片描述
在这里插入图片描述
大多数目标检测框架都依赖VGG-16作为基本特征提取器。 VGG-16是一个功能强大,准确的分类网络,但它有一些不需要的复杂部分。对于一张224×224分辨率的图像经过卷积层,VGG-16需要进行306.9亿个浮点运算。

YOLO框架使用基于Googlenet架构的自定义网络。 该网络比VGG-16更快,仅使用85.2亿次计算。 但是,其准确性比VGG-16稍差。 对于单一作物(single-crop),在224×224的分辨率下准确率可以达到前5位,YOLO的自定义模型在ImageNet数据集上识别率为88%,VGG-16则为90.0%。

Darknet-19: YOLOv2基于使用我们提出的一种新的分类模型。我们的模型建立在网络设计的前期工作和该领域的常识基础上。与VGG模型类似,我们主要使用3×3的过滤器,并在每个池化步骤后加倍通道数。在网络中的网络(NIN)工作的基础上,我们使用全局平均池进行预测,并使用1×1过滤器压缩3×3卷积之间的特征表示。我们使用批量归一化来稳定训练,加速收敛,并对模型进行正则化。

top1-----就是你预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确。否则预测错误
top5-----就是最后概率向量最大的前五名中,只要出现了正确概率即为预测正确。否则预测错误。

我们最后的模型,叫做Darknet-19,有19个卷积层和5个maxpooling层。完整的描述见表6。Darknet-19只需要55.8亿次操作来处理一幅图像,但在ImageNet上却达到了72.9%的top-1准确率和91.2%的top-5准确率。

Training for classification: 我们在标准ImageNet 1000 分类数据集上训练Darknet神经网络框架160轮,使用随机梯度下降法,其初始学习率为0.1,多项式速率衰减为4的幂,权重衰减为0.0005,动量为0.9 。 在训练期间,我们使用标准的数据增强技巧,包括随机裁剪,翻转以及色相,饱和度和曝光偏移。

如上所述,在以224×224的图像进行初始训练之后,我们以较大的尺寸448对网络进行了微调。为此,我们使用上述参数进行训练,但是仅训练10轮,以 10-3 的学习率开始。 在这种更高的分辨率下,我们的网络可实现76.5%的top-1准确性和93.3%的top-5准确性。

Training for detection: 我们对这个网络进行了修改来进行目标检测,去掉了最后一个卷积层,增加了3个有1024个3×3卷积核的卷积层,每一层的最后有m个11的卷积核的卷积层(m:我们需要检测的输出数)。在VOC数据集上,我们预测5个边界框,每个边界框有5个坐标,每个边界框有20个类别,所以有125个过滤器。我们还从最后的33*512层到倒数第二个卷积层之间添加了一个通过层(passthrough layer),这样我们的模型可以使用细粒度的特性(fine grain features)。
在这里插入图片描述
在这里插入图片描述
我们以 10−3 的起始学习率对网络进行160轮的训练,并在60轮和90轮的时候将其除以10。我们使用重量衰减为0.0005,动量为0.9。我们使用了与YOLO和SSD相似的数据增强方式,包括随机作物、颜色变化等。我们对COCO数据集和VOC数据集采用相同的训练策略。

4. Stronger

我们提出了一种对数据分类与检测联合训练的机制。我们的方法使用已经标记的检测图像来学习检测特定的信息,如边界框坐标预测和置信度(objectness),以及如何对常见目标对象进行分类。它只使用带有类标记的图像来扩展它可以检测到的类别的数量。

在训练中,我们混合检测和分类数据集的图像。当我们的网络看到用于检测的标记图像时,我们可以基于完整的YOLOv2损失函数进行反向传播。当它看到一个分类图像时,我们只是从网络结构的分类特定部分反向传播损失。

这种方法提出了一些挑战。检测数据集只有通用目标对象和通用标签,如“狗”或“船”。分类数据集有更广泛和更深的标签范围。ImageNet数据集有一百多种狗,包括“Norfolk terrier”、“Yorkshire terrier”和“Bedlington terrier”。如果我们想在这两个数据集上进行训练,我们需要一个连贯的方式来合并这些标签。

大多数分类方法都使用一个跨越所有可能类别的softmax层来计算最终的概率分布。使用softmax假设这些类是互斥的。这为组合数据集带来了问题,例如,您不希望使用此模型组合ImageNet和COCO,因为“Norfolk terrier”和“dog”类不是互斥的。

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

Hierarchical classification: ImageNet标签取自WordNet,WordNet是一个语言数据库,它用于构造概念及其关系。在WordNet中,“Norfolk terrier”和“Yorkshire terrier”都是“terrier”的下义词,“terrier”是“hunting dog(猎狗)”的一种,“hunting dog(猎狗)”是“dog”的一种,"dog"是“canine(犬科动物)”的一种等等。大多数分类方法都假设标签采用扁平化结构(flat structure),但对于组合数据集来说,这种结构正是我们所需要的。

WordNet的结构是一个有向图,而不是一棵树,因为语言是复杂的。例如,“dog”既是“canine”的一种,也是“domestic animal”的一种,两者在WordNet中都是同步的。我们没有使用完整的图结构,而是通过从ImageNet中的概念构建层次树(hierarchical tree)来简化问题。

为了构建这个层次树,我们检查ImageNet中的视觉名词(visual nouns),并查看它们在WordNet图中到根节点的路径,在本例中是“物理对象”。许多同义词集(synset)在图中只有一条路径,所有首先我们将所有这些路径添加到树中。然后,我们反复检查剩下的概念,并添加使树长得尽可能少的路径。所以如果一个概念有两条到根的路径,并且一条路径会给树增加三条边而另一条只会增加一条边,我们选择较短的路径。

最终结果是WordTree,这是视觉概念的分层模型。 为了用WordTree进行分类,给定同义词集(synset)预测每一个下位词(hyponym)的条件概率。 例如,在“ terrier”节点,我们预测:

在这里插入图片描述
如果要计算特定节点的绝对概率,我们只需沿着树到根节点的路径,再乘以条件概率。 所以如果我们想知道图片是否为“Norfolk terrier”,我们可以计算:
在这里插入图片描述
出于分类目的,我们假设图像包含一个对象:Pr (physical object)==1。

为验证此方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有中间节点,它将标签空间从1000扩展到1369。在训练过程中,我们在WordTree上传播(propagate)真值标签,这样,如果一个图像被标记为“Norfolk terrier”,它也会被标记为“dog”和“mammal(哺乳动物)”,等等。为了计算条件概率,我们的模型预测一个有1369值的向量并且我们在所有的有相同下位词的系统集(sysnsets)上计算softmax,请参见图5。

使用与以前相同的训练参数,我们的分层Darknet-19达到71.9%的top-1准确性和90.4%的top-5准确性。尽管添加了369个其他概念,并且我们的网络预测了树结构,我们的准确性仅下降了一点。以这种方式执行分类也有一些好处。在新的或未知的目标对象类别上,性能会优雅地(gracefully)下降。例如,如果网络看到了一条狗的图片,但不确定它是哪种类型的狗,它仍然会有较高的信心来预测“dog”,但是在下义词中的置信度较低。
在这里插入图片描述
此公式​​也可用于检测。现在,我们不用假设每个图像都有一个对象,而是使用YOLOv2的对象预测器来为我们提供
Pr(physical object)概率值。检测器预测边界框和概率树。我们向下遍历树,在每次拆分时采用最高的置信度直到达到某个阈值并预测该对象类。

Dataset combination with WordTree: 我们可以使用WordTree以明智的方式(sensible fashion)将多个数据集组合在一起。 我们只需要将数据集中的类别映射到树中的同义词集。 图6显示了使用WordTree组合ImageNet和COCO的标签的示例。 WordNet非常多样化,因此我们可以对大多数数据集使用此技术。

**Joint classification and detection:**现在我们可以使用WordTree组合数据集,我们可以训练我们的联合模型进行分类和检测。我们想要训练一个超大规模的探测器,因此我们使用COCO检测数据集和来自完整ImageNet版本的9000类来创建我们的组合数据集。我们还需要评估我们的方法,以便我们添加ImageNet检测挑战中尚未包含的所有类。这个数据集对应的WordTree有9418个类。ImageNet是一个更大的数据集,所以我们通过对COCO进行过采样直到ImageNet只比它大四倍来平衡数据集。

我们使用这个数据集来训练YOLO9000。我们使用基本的YOLOv2架构,但是只有3个先验框(priors)而不是5个先验框来限制输出大小。当我们的网络看到检测图像时,我们正常地反向传播损失函数。对于分类损失,我们仅反向传播等于或高于标签相应水平的损失。例如,如果标签是“dog”,我们的确会把任何错误分配给树中的“german shepherd”和“golden retriever”,因为我们没有该信息。

Figure 6

在这里插入图片描述
当看到分类图像时,我们仅反向传播分类损失。为此,我们只需找到预测该类别最高概率的边界框,然后仅在其预测树上计算损失即可。我们也假设预测边界框与真实标签的重叠量至少为0.3 IOU,并且我们根据此假设反向传播目标损失(objectness loss)。

通过这次联合训练,YOLO9000学会了使用COCO中的检测数据来查找图像中的目标对象,并且学会了使用ImageNet中的数据对这些目标对象进行各种各样的分类。

我们在ImageNet检测任务上评估YOLO9000。 ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000仅看到了大多数测试图像的分类数据,而不是检测数据。 YOLO9000总共获得19.7mAP,而在它从未见过任何标记检测数据的156个不相关的对象类上获得16.0mAP。该mAP高于DPM所获得的结果,但是YOLO9000是在只有部分监督的不同的数据集上进行训练。它还可以同时实时检测9000个其他对象类别。

在这里插入图片描述
当我们在ImageNet中分析YOLO9000的性能时,我们会看到它很好地学习了新的动物种类,但是却在学习服装和设备等学习类别时遇到了麻烦。新的动物更容易学习,因为客观性预测(objectness predictions)可以很好地概括COCO中的动物。 相反,COCO没有任何类型的服装的边界框标签,仅针对人,因此YOLO9000很难做到型号类别,例如“sunglasses(太阳镜)”或“swimming trunks(游泳裤)”。

5. Conclusion

我们将介绍实时检测系统YOLOv2和YOLO9000。 YOLOv2是最先进的,并且在各种检测数据集中比其他检测系统要快。此外,它可以在各种图像上运行尺寸以在速度和精度之间提供一个平滑的权衡。

YOLO9000是一个实时框架,可通过联合优化检测和分类来检测9000多个对象类别。我们使用WordTree合并来自
各种资源的数据并且使用我们的联合优化技术同时在ImageNet和COCO上进行训练。YOLO9000是缩小检测和分类之间数据集大小差距的有力一步。

我们的许多技术都在目标检测之外进行推广。 ImageNet的WordTree表示为图像分类提供了的更丰富,更详细的输出空间。使用分层分类的数据集组合将在分类和分割领域很有用。诸如多尺度训练之类的训练技术可以在各种视觉任务中提供好处。

对于将来的工作,我们希望使用类似的技术进行弱监督的图像分割。我们还计划使用更强大的匹配策略来改进检测结果,以便在训练期间为分类数据分配弱标签。计算机视觉拥有大量的标记数据。我们将继续寻找方法,将不同的数据源和数据结构整合在一起,以建立更强大的视觉世界模型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值