yolov2训练_[论文笔记] YOLO9000 & YOLO v2

18cf2f9cef884508d2002dc2311b036f.png

[论文笔记] YOLO9000:Better, Faster, Stronger

说在前面

个人心得:

1. 是对YOLO v1的改进,提出了YOLO v2和YOLO9000

2. better是指性能提升,faster是指仍然保证高速,stronger是指检测的种类更多

原文发表于CVPR 2017,原文链接:https://arxiv.org/abs/1612.08242

原文项目:https://pjreddie.com/darknet/yolov2/

Github找到的别人开源代码:https://github.com/ruiminshen/yolo2-pytorch

本文作于2020年4月26日。

1、摘要

We introduce YOLO9000, a state-of-the-art, real-time object detection system that can detect over 9000 object categories.

我们提出了YOLO9000,一个可以检测多达9000类别的高性能、实时的目标检测系统。

First we propose various improvements to the YOLO detection method, both novel and drawn from prior work. The improved model, YOLOv2, is state-of-the-art on standard detection tasks like PASCAL VOC and COCO. Using a novel, multi-scale training method the same YOLOv2 model can run at varying sizes, offering an easy tradeoff between speed and accuracy. At 67 FPS, YOLOv2 gets 76.8 mAP on VOC 2007. At 40 FPS, YOLOv2 gets 78.6 mAP, outperforming state-of-the-art methods like Faster R-CNN with ResNet and SSD while still running significantly faster.

首先,我们对YOLO的检测方法提出了多种改进,包括一些新颖或者先前工作描述的。这个改进的模型称之为YOLOv2,是一个通用的检测系统,在COCO和PASCAL VOC上达到了SOTA。使用新颖的、多尺度的训练方法,相同的YOLOv2模型可以在不同的大小上运行,从而在速度和准确性之间轻松达到平衡。以67FPS速度运行时,YOLOv2在VOC 2007上获得76.8 mAP;以40FPS速度运行时,YOLOv2获得78.6 mAP,优于采用ResNet和SSD的Faster R-CNN的最新方法,但运行速度仍然明显提高。

Finally we propose a method to jointly train on object detection and classification. Using this method we train YOLO9000 simultaneously on the COCO detection dataset and the ImageNet classification dataset. Our joint training allows YOLO9000 to predict detections for object classes that don’t have labelled detection data. We validate our approach on the ImageNet detection task. YOLO9000 gets 19.7 mAP on the ImageNet detection validation set despite only having detection data for 44 ofthe 200 classes. On the 156 classes not in COCO, YOLO9000 gets 16.0 mAP. But YOLO can detect more than just 200 classes; it predicts detections for more than 9000 different object categories. And it still runs in real-time.

最后,我们提出了一种联合训练目标检测和分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。通过我们的联合培训,YOLO9000可以预测没有标记检测数据的物体类别的检测结果.我们验证了我们在ImageNet检测任务上的方法。尽管仅拥有200个类别中的44个类别的检测数据,但YOLO9000在ImageNet检测验证集上获得了19.7%mAP。 在COCO以外的156个类别中,YOLO9000的平均得分为16.0%mAP。不但YOLO可以检测到200多个类,它还预测了9000多种不同物体类别的检测结果,同时它仍然实时运行。

2、引言

通用目标检测应该快速,准确并能够识别各种目标。自从引入神经网络以来,检测框架已经变得越来越快和准确。但是,大多数检测方法仍然局限于少数对象。与其他任务(如分类和标记)的数据集相比,当前的对象检测数据集受到限制。最常见的检测数据集包含成千上万的图像以及数十到数百个标签。分类数据集包含数百万个具有数万或数十万个类别的图像。我们希望检测能够扩展到对象分类的级别。但是,标记要检测的图像要比标记分类或标记要昂贵得多(标记通常是用户免费提供的)。因此,我们不太可能在不久的将来看到与分类数据集规模相同的检测数据集。

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

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

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

3、更好

与最先进的检测系统相比,YOLO存在许多缺点。与Fast R-CNN相比,YOLO的错误分析表明,YOLO会产生大量的定位错误。此外,与基于区域候选的方法相比,YOLO的召回率相对较低。因此,我们主要致力于改善召回率和定位,同时保持分类准确性。

计算机视觉通常趋向于更大,更深的网络。更好的性能通常取决于训练更大的网络或组合多个模型。但是,对于YOLOv2,我们希望有一个更加准确的检测器,而且该检测器仍然快速。除了简化网络之外,我们还简化了网络,然后使表示更易于学习。我们将过去工作中的各种想法与我们自己的新颖概念融合在一起,以提高YOLO的性能,具体实验情况见下表。

11070fed74458979658b5bbbaf4fab71.png

Batch Normalization:BN可显着提高收敛性,同时消除了对其他形式的规范化的需求。通过在YOLO的所有卷积层上添加BN,我们可以在mAP方面获得2%以上的提升。BN还有助于规范化模型。通过BN,我们可以消除模型中的缺失,而无需过度拟合。

High Resolution Classifier:所有最新的检测方法都使用在ImageNet上预先训练的分类器。从AlexNet开始,大多数分类器在小于256×256的输入图像上运行。原始的YOLO将分类器网络训练为224×224,并将分辨率提高到448以进行检测。这意味着网络必须同时切换到学习目标检测和调整到新的输入分辨率。对于YOLOv2,我们首先在ImageNet上以448×448的完整分辨率微调分类网络10个epoch。这使网络有时间调整其卷积核参数,使其在更高分辨率的输入上更好地工作。然后,我们根据检测结果对网络进行微调。这种高分辨率分类网络使我们的mAP几乎提高了4%。

Convolutional With Anchor Boxes:YOLO使用卷积特征提取器顶部的全连接层直接预测边界框的坐标。相较于直接预测坐标,Faster R-CNN使用手工挑选的先验来预测边界框。仅使用卷积层,Faster R-CNN中的区域候选网络(RPN)即可预测anchor的偏移量和置信度。由于预测层是卷积的,因此RPN会在特征图中的每个位置预测这些偏移。预测偏移量而不是坐标可以简化问题,并使网络更容易学习。

我们从YOLO中删除了全连接层,并使用anchor来预测边界框。首先,我们消除了一个池化层,以使网络卷积层的输出具有更高的分辨率。我们还将网络缩小为可处理416个输入图像,而不是448×448。之所以这样做,是因为我们希望要素地图中的位置数量为奇数,因此只有一个中心单元。对象(尤其是大对象)往往会占据图像的中心,因此最好在中心位置使用一个位置来预测这些对象,而不要使用附近的四个位置。YOLO的卷积层将图像降采样32倍,因此使用416的输入图像,我们得到13×13的输出特征图。

当我们转向anchor时,我们还将类预测机制与空间位置分离,而是为每个anchor预测类和对象。在YOLO之后,目标预测仍会预测真实注释的IOU,并且所提出的anchor和类别预测会在存在目标的情况下预测该类别的条件概率。

使用anchor,准确性会略有下降。YOLO只能预测每个图像98个候选框,但使用anchor的话我们的模型可以预测1000个以上。如果没有anchor,我们的中间模型将获得69.5%mAP的召回率,为81%。使用anchor,我们的模型获得69.2%mAP,召回率达到88%。即使mAP降低,召回率的增加也意味着我们的模型还有更多的改进空间。

Dimension Clusters:在YOLO上使用anchor时,我们会遇到两个问题。首先是anchor box的尺寸是手工挑选的。网络可以学习适当地调整框,但是如果我们为网络选择更好的先验条件,则可以使网络更容易学习预测良好的检测。

无需手动选择先验,我们在训练集边界框上运行k-means聚类以自动找到良好的先验。 如果我们使用具有欧几里德距离的标准k-means,则较大的anchor box会比较小的anchor box产生更多的误差。但是,我们真正想要的是能够获得良好IOU的先验值,而这与anchor的大小无关。因此,对距离的度量我们定义为:

我们对k的各种值运行k-mean,并绘制具有最接近中心的平均IOU,请参见下图。我们选择

作为模型复杂度和高召回率之间的良好折衷。k-mean与手工挑选的anchor明显不同,短而宽的box较少,而高又瘦的box较多。

08d94a799cad7cc5317d1e9c928fb515.png

我们比较了mIOU,在聚类策略下最接近的先验和手工定制的anchor box做了比较,在仅5个先眼眶时,聚类的表现类似于9个box,平均IOU分别为60.9%和61.0%。如果我们使用9个先验框,则平均IOU会更高。这表明使用k-mean生成边界框可以更好地表示模型,并使任务更易于学习。

efbac2ff783d234f3ac22aa714319216.png

Direct location prediction:在YOLO中使用anchor box时,我们遇到第二个问题:模型不稳定性,尤其是在早期迭代期间。大多数不稳定性来自于预测box的

位置。在区域候选网络中,网络预测值
,并且
中心坐标的计算公式如下:
。例如,
的预测将使该框向右移动anchor的宽度,
的预测将使该框向左移动相同的量。

此公式不受限制,因此任何anchor box都可以终止于图像中的任意点,而不管预测该框的位置如何。通过随机初始化,该模型需要很长时间才能稳定以预测合理的偏移量。代替预测偏移量,我们采用YOLO的方法,而是预测相对于网格单元位置的位置坐标。这将基本限制在0到1之间。我们使用逻辑激活将网络的预测限制在此范围内。

网络在输出特征图中的每个像素上预测5个边界框。网络为每个边界框

预测5个坐标。如果单元格从图像的左上角偏移了
并且先验边界框的宽度和高度为
,则预测对应于:

由于我们限制了位置预测,因此参数化更易于学习,从而使网络更加稳定。与使用anchor box的版本相比,使用聚类以及直接预测边界框中心位置可使YOLO提高近5%。

59aef81bc9ee713990497d0e6058a0cc.png

Fine-Grained Features:修改后的YOLO可以预测13×13特征图上的检测结果。虽然这对于大型对象已经足够,但它可能受益于用于定位较小对象的更细粒度的特征。更快的R-CNN和SSD都在网络中的各种功能图上运行其建议网络,以获得各种分辨率。我们采用了另一种方法,只需添加一个直通层,即可以26×26的分辨率带入较早层的特征。

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

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

我们不固定输入图像的大小,而是每隔几次迭代就更改网络。我们的网络每10批将随机选择一个新的图像尺寸。由于我们的模型下采样了32倍,因此我们从以下32的倍数中提取:

。因此,最小的选择是320×320,最大的选择是608×608。我们将网络调整为该尺寸,然后继续训练。

这种制度迫使网络学习对不同维度的输入进行预测,这意味着同一网络可以预测不同分辨率的检测结果。网络在较小的尺寸下运行速度更快,因此YOLOv2可以在速度和准确性之间轻松地权衡。在低分辨率下,YOLOv2可以用作便宜、相当准确的检测器。在288×288的分辨率下,它的运行速度超过90FPS,mAP几乎与Fast R-CNN相当。这使其成为较小GPU、高帧率视频或多个视频流的理想选择。

在高分辨率下,YOLOv2是在VOC 2007上具有78.6%mAP的最新检测器,同时仍以实时速度运行。有关YOLOv2与VOC 2007上其他框架的比较,详见下表和下图。

fe73274c0d117fe558a8fdfa6bf1f7f8.png

9bd2584e61a8778f8863466fd8357901.png

Further Experiments:我们对YOLOv2进行了VOC 2012的测试。下表显示了YOLOv2与其他最新检测系统的比较性能。YOLOv2达到73.4%mAP,同时运行速度远远超过竞争方法。

54626105af78afe94a5618cb4b3ef7dd.png

我们还对COCO进行了训练,并与下图中的其他方法进行了比较。在VOC度量标准(IOU = 0.5)上,YOLOv2获得44.0%mAP,与SSD和Faster R-CNN相当。

a20ba3858c9e555fb5237adfd5cab6a8.png

4、更快

我们希望检测是准确的,但我们也希望它是快速的。大多数检测应用程序,例如机器人技术或自动驾驶汽车,都依赖于低延迟预测。为了最大限度地提高性能,我们尽可能使YOLOv2变快。

大多数检测框架都依赖VGG-16作为基本特征提取器。VGG-16是一个功能强大且准确的分类网络,但它不必要地复杂。VGG-16的卷积层需要306.9亿个浮点运算,才能以224×224的分辨率在单个图像上进行一次遍历。

YOLO框架使用基于Googlenet架构的自定义网络。该网络比VGG-16更快,仅使用85.2亿次操作进行正向传递。但是,其准确性比VGG-16差一点。对于单次裁剪,在224×224的ImageNet熵,YOLO的自定义模型可获得88.0%的前5位精度,而VGG-16则为90.0%。

Darknet-19:我们提出了一种新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计的先前工作以及该领域的常识的基础上。与VGG模型类似,我们大多数情况下使用3×3卷积核,并且在每个池化步骤之后,通道数量增加一倍。在进行网络在网络(NIN)中的工作之后,我们使用全局平均池化进行预测,并使用1×1卷积核压缩3×3卷积之间的特征表示。 我们使用BN来稳定训练,加快收敛速度并规范化模型。

我们的最终模型称为Darknet-19,具有19个卷积层和5个maxpooling层。有关完整说明,请参见下表。Darknet-19仅需要55.8亿次操作来处理图像,但在ImageNet上达到72.9%的top-1精度和91.2%的top-5精度。

cd54effad2b71c3382b30634ba0bc132.png

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

如上所述,在以224×224的图像进行初始训练后,我们以较大的尺寸448对网络进行了微调。为此,我们使用上述参数进行训练,但只进行了10个epoch,并且以

的学习率。 在这种更高的分辨率下,我们的网络可实现76.5%的top-1精度和93.3%的top-5精度。

Training for detection:我们通过删除最后一个卷积层,而不是在三个3×3卷积层上分别添加1024个滤波器,再加上最后一个1×1卷积层,加上检测所需的输出数量,来修改此网络以进行检测。对于VOC,我们预测5个框,每个框具有5个坐标,每个框20个类,因此有125个过滤器。我们还从最后的3×3×512层到倒数第二个卷积层添加了一个直通层,以便我们的模型可以使用细粒度特征。

我们将网络训练160个epoch,起始学习率为

,在60和90个epoch时将其除以10.我们使用0.0005的权重衰减和0.9的动量。我们使用与YOLO和SSD类似的数据增强方法,进行随机裁剪、颜色偏移等。我们对COCO和VOC使用相同的训练策略。

5、更强

我们提出了一种联合训练分类和检测数据的机制。 我们的方法使用标记为检测的图像来学习特定于检测的信息,例如边界框坐标预测和对象性以及如何对常见对象进行分类。 它使用仅带有类别标签的图像来扩展它可以检测到的类别数量。

在训练过程中,我们混合了来自检测和分类数据集的图像。当我们的网络看到标记为要检测的图像时,我们可以基于完整的YOLOv2丢失功能向后传播。当它看到分类图像时,我们仅从架构中特定于分类的部分反向传播损失。

这种方法提出了一些挑战 检测数据集仅具有通用对象和通用标签,例如“狗”或“船”。分类数据集具有更广泛和更深层次的标签。ImageNet有一百多种犬,包括“诺福克㹴”、“约克郡㹴”和“贝灵顿㹴”。如果要对两个数据集进行训练,则需要一种一致的方式来合并这些标签。大多数分类方法在所有可能的类别中使用softmax层来计算最终概率分布。使用softmax假定类是互斥的,这带来了合并数据集的问题,例如,您不希望使用此模型将ImageNet和COCO合并,因为“诺福克㹴”和“狗”类不是互斥的。相反,我们可以使用多标签模型来合并不假定互斥的数据集。这种方法忽略了我们对数据了解的所有结构,例如,所有COCO类都是互斥的。

Hierarchical classification:ImageNet标签是从WordNet提取的,WordNet是一个构建概念及其相关性的语言数据库。在WordNet中,“诺福克㹴”和“约克郡㹴”都是“㹴”的下位词,“㹴”是“猎狗”的一种,这是“狗”的一种,是犬科动物。分类假定标签的结构平坦,但是对于组合数据集,结构正是我们所需要的。

由于语言很复杂,WordNet的结构是有向图,而不是树。 例如,“狗”既是“犬”的类型,又是“家畜”的类型,它们都是WordNet中的同义词集。 我们不使用完整的图结构,而是通过根据ImageNet中的概念构建层次树来简化问题。

为了构建此树,我们检查ImageNet中的视觉名词,并查看它们通过WordNet图形到达根节点(在本例中为“物理对象”)的路径。许多同义词集在图中只有一条路径,因此首先我们将所有这些路径添加到树中 然后,我们迭代检查剩下的概念,并添加使树长得尽可能小的路径。因此,如果一个概念有两个到根的路径,一个路径会向我们的树添加三个边,而另一个路径只会添加一个边,那么我们选择较短的路径(一条边的)。

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

如果要计算特定节点的绝对概率,我们只需沿着树到根节点的路径,再乘以条件概率。 因此,如果我们想知道图片是否为诺福克㹴,我们可以计算:

出于分类目的,我们假设图像包含一个对象:

为了验证这种方法,我们在使用1000类ImageNet构建的WordTree上训练Darknet-19模型。 为了构建WordTree1k,我们添加了所有中间节点,这将标签空间从1000扩展到了1369。在训练过程中,我们将地面真相标签传播到树上,因此,如果将图像标记为“诺福克㹴”,则它也会被标记 为了计算条件概率,我们的模型预测了1369个值的向量,并且我们计算了所有具有相同概念的下义词的系统集的softmax,请参见下图。

87fd0505a748e7b87e940989454f89e0.png

使用与以前相同的训练参数,我们的分层Darknet-19达到71.9%的top-1准确性和90.4%的top-5准确性。尽管添加了369个其他概念,并且我们的网络预测了树结构,但我们的准确性仅下降了一点。以这种方式执行分类也有一些好处。 在新的或未知的对象类别上,性能会正常降低。例如,如果网络看到一条狗的图片,但不确定它是哪种类型的狗,它仍将以较高的置信度预测“狗”,但在下义词中会散布较低的置信度。

该方法也可用于检测。现在,我们不用假定每个图像都有一个对象,而是使用YOLOv2的对象预测器为我们提供

的值.检测器预测边界框和概率树。我们向下遍历树,在每次拆分时都采用最高的置信度,直到达到某个阈值并预测该对象类别。

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

63f86ef5250950d4c2fb629b5055ea94.png

Joint classification and detection:现在我们可以使用WordTree合并数据集,我们可以在分类和检测上训练我们的联合模型。我们想训练一个超大型探测器,因此我们使用COCO检测数据集和ImageNet完整发行版中的前9000个类创建组合数据集。我们还需要评估我们的方法,以便添加ImageNet检测挑战中尚未包含的所有类。此数据集的对应WordTree具有9418个类。ImageNet是一个更大的数据集,因此我们通过对COCO进行过采样来平衡数据集,以使ImageNet仅以4:1的比例扩大。

使用此数据集,我们训练YOLO9000。我们使用基本的YOLOv2架构,但是仅使用3个先验框而不是5个先验框来限制输出大小。当我们的网络看到检测图像时,我们会像往常一样传播损失。对于分类损失,我们仅反向传播等于或高于标签相应水平的损失。例如,如果标签为“狗”,则我们确实会将任何错误分配给树中更远的预测,即“德国牧羊犬”与“金毛寻回犬”,因为我们没有该信息。

当看到分类图像时,我们仅反向传播分类损失。为此,我们只需要找到预测该类最高概率的边界框,然后仅在其预测树上计算损失即可。我们还假设,预测框与真实注释的重叠量至少为0.3IOU,并且我们根据此假设反向传播对象损失。

通过这次联合培训,YOLO9000学会了使用COCO中的检测数据来查找图像中的对象,并且学会了使用ImageNet中的数据对这些对象进行各种各样的分类。我们在ImageNet检测任务上评估YOLO9000。ImageNet的检测任务与COCO在44个对象类别上共享,这意味着YOLO9000仅看到了大多数测试图像的分类数据,而不是检测数据。YOLO9000在不相交的156个对象类上总体上获得了19.7%mAP和16.0%mAP,它从未见过任何标记的检测数据。该mAP高于DPM取得的结果,但是YOLO9000在不同的数据集上进行了仅部分监督的训练。它还可以同时实时检测9000个其他对象类别。

当我们在ImageNet上分析YOLO9000的性能时,我们会看到YOLO9000能很好地学习新物种的动物,但是却在学习服装和设备等学习类别时遇到了困难。新对象更容易学习,因为客观性预测可以很好地从COCO中的动物中得出。 相反,COCO没有任何类型的服装的边界框标签,只有人的标签,因此YOLO9000很难为“太阳镜”或“游泳裤”等类别建模。

6、总结

我们介绍了实时检测系统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、付费专栏及课程。

余额充值