为您推荐:
精华内容
最热下载
问答
  • 5星
    135.91MB qq_34351067 2021-04-16 14:11:28
  • 5星
    51.38MB qq_39706357 2020-11-26 19:32:13
  • 5星
    570.7MB ECHOSON 2021-05-24 10:21:12
  • 5星
    626.06MB qq_43490991 2021-03-28 12:05:36
  • 5星
    420.16MB qq_36577574 2020-12-03 12:08:23
  • 5星
    756.5MB weixin_51154380 2021-10-12 16:53:17
  • 5星
    923.93MB weixin_37932346 2021-04-23 20:19:48
  • 5星
    203.91MB weixin_37932346 2021-04-24 01:17:07
  • 186.19MB zcyzhangzhou 2018-05-03 23:11:51
  • 177.1MB weixin_42116805 2021-02-03 04:04:21
  • 3.28MB qq_32595487 2019-08-14 15:04:35
  • 4.99MB majinlei121 2017-12-14 08:59:29
  • 6.98MB weixin_38744207 2019-10-09 18:33:33
  • 5.01MB weixin_42189597 2021-09-12 16:45:16
  • 1.83MB weixin_38673694 2021-01-07 01:58:28
  • 20KB sc1434404661 2019-09-20 16:38:40
  • YOLO9000:Better, Faster, Stronger 声明:笔者翻译论文仅为学习研究,如有侵权请联系作者删除博文,谢谢! 源论文地址:https://arxiv.org/abs/1612.08242 注:文字中标粗和亮色的部分为笔者认为有创新改进余地和...

    YOLO9000:Better, Faster, Stronger

    声明:笔者翻译论文仅为学习研究,如有侵权请联系作者删除博文,谢谢
    源论文地址:https://arxiv.org/abs/1612.08242
    :文字中标粗和亮色的部分为笔者认为有创新改进余地和需要注意的地方,斜体部分为笔者的一些想法,因水平所限,部分笔触可能有不实和错误之处,敬请广大读者批评指正,让我们一起进步~

    YOLO V1 | YOLO V3的论文详解见:YOLO V1 | YOLO V3

    YOLO v2 和 YOLO 9000 可以看成是两部分,其中v2是对v1的各个部分进行技术上的加持和改进;9000是对数据集和检测类别进行扩展。这里我们重点说YOLO v2部分。
    v2相对于v1来说,速度更快、精度更高。具体改进措施有以下几点:
    在这里插入图片描述1. 各卷积层后添加BN层;
    2. YOLO2在采用 224×224 图像进行分类模型预训练后,再采用 448×448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448×448 的分辨率。然后再使用 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响;
    3. 引入anchor boxes(召回率上升,准确率略微下降),448×448 -> 416×416
        通过使用K-means聚类方法筛选出一个网格cell里预测5个锚点框最合适;
        通过给anchor boxes公式加约束的方式使anchor只负责周围的boxes,稳定模型;
    4. 网络加入passtrough层(类似于ResNet),进行特征融合,提升检测小目标的能力;
    5. 网络进行动态调整,每10 epoch随机输入新的图片尺寸{320,352,…,608};
    6. 提出新的特征提取网络Darknet-19。

    整体框架如下:

    在这里插入图片描述
           对比YOLO1的输出张量7×7×(20+5×2),YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的 13×13×5×25 张量中,25维向量包含 20 个对象的分类概率 + 4个边框坐标 + 1个边框置信度。

    loss函数:

    在这里插入图片描述在这里插入图片描述好,以下进行论文的翻译和注解:

    摘要

           我们介绍YOLO9000,一个最先进的,实时目标检测系统,可以检测超过9000个目标类别。首先,我们提出对YOLO检测方法的各种改进方法,包括新颖的和从以前的工作中得出的。改进的模型YOLO v2在如PASCAL VOC和COCO标准检测任务是最先进的。使用一种新颖的多尺度训练方法,相同的YOLO v2模型可以运行在不同的大小的图片上,提供速度和精度之间的轻松权衡。在67 FPS时,YOLO v2在VOC 2007上获得76.8 mAP。在40 FPS时,YOLO v2获得78.6 mAP,性能优于最先进的方法,例如使用ResNet的faster RCNN和SSD,同时运行速度明显更快。最后,我们提出了一种联合训练目标检测和分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO 9000。我们的联合训练方法允许YOLO 9000预测没有标记检测数据的目标类的检测。我们在ImageNet检测数据集上验证我们的方法。YOLO 9000在ImageNet检测验证集上获得19.7 mAP,尽管只有200个类中的44类检测数据。在COCO的156类中,YOLO 9000获得16.0 mAP。但是YOLO可以检测超过200个类;它预测超过9000个不同目标类别的检测。它仍然实时运行。

    1 引言

           通用目标检测应该快速,准确,并且能够识别各种各样的目标。自从引入神经网络以来,检测框架已经变得越来越快速和准确。然而,大多数检测方法仍然局限于一小组目标。
    与分类和标记等其他任务的数据集相比,当前目标检测数据集是有限的。最常见的检测数据集包含数十到数十万的图像,具有几十到几百个标签。分类数据集具有数百万个具有数十或数十万类别的图像。
           我们希望检测可以缩放到目标分类的级别。然而,用于检测的标记图像比用于分类或标记的标记(标签通常由用户免费提供)昂贵得多。因此,我们不太可能在不久的将来看到与分类数据集相同规模的检测数据集。
    我们提出了一种新方法来利用我们已经拥有的大量分类数据,并使用它来扩大当前检测系统的范围。我们的方法使用目标分类的层次视图,允许我们将不同的数据集合在一起。
           我们还提出了联合训练算法,允许我们在检测和分类数据上训练目标检测器。我们的方法利用标记的检测图像来学习精确地定位目标,同时使用分类图像来增加其词汇和鲁棒性。
           使用这种方法,我们训练YOLO9000,一个实时目标检测器,可以检测超过9000不同的目标类别。首先,我们改进基本的YOLO检测系统,以产生YOLOv2,一个最先进的实时检测器。然后我们使用我们的数据集组合方法和联合训练算法来训练来自ImageNet的超过9000个类的模型以及来自COCO的检测数据
           我们的所有代码和预训练模型都可以在http://pjreddie.com/yolo9000/在线获得。
    在这里插入图片描述

    2 更好

           相对于现有技术的检测系统,YOLO具有各种缺点。与fast RCNN相比,YOLO的误差分析显示YOLO产生大量的定位误差。此外,与基于候选区域的方法相比,YOLO具有相对较低的召回率。因此,我们主要集中在改进召回率和定位,同时保持分类精度。(分析完YOLO的不足(召回率低,定位不准,无法检测密集小目标),提出了改进的方向。)
           计算机视觉通常趋向于更大,更深的网络。更好的性能通常取决于训练更大的网络或将多个模型组合在一起。然而,使用YOLOv2,我们需要一个更加精确的检测器使得它仍然很快。我们不是扩展我们的网络,而是简化网络,使其更容易学习。我们从过去的工作中融合了我们自己的新概念的各种想法,以提高YOLO的性能。结果总结可以在表2中找到。
    在这里插入图片描述

    Batch Normalization (批归一化)

           CNN在训练过程中网络每层输入的分布一直在改变, 会使训练过程难度加大,但可以通过normalize每层的输入解决这个问题。新的YOLO网络在每一个卷积层后添加batch normalization,通过这一方法,mAP获得了2%的提升。batch normalization 也有助于规范化模型,可以在舍弃dropout优化后依然不会过拟合。

    High Resolution Classifier (使用高分辨率图像微调分类模型)

           目前的目标检测方法中,基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256×256,导致分辨率不够高,给检测带来困难。为此,新的YOLO网络把分辨率直接提升到了448×448,这也意味之原有的网络模型必须进行某种调整以适应新的分辨率输入。对于YOLOv2,作者首先对分类网络(自定义的darknet)进行了finetune,分辨率改成448×448,在ImageNet数据集上训练10轮(10 epochs),训练后的网络就可以适应高分辨率的输入了。然后,作者对检测网络部分(也就是后半部分)也进行finetune。这样通过提升输入的分辨率,mAP获得了4%的提升。
    (预训练网络的输入都需要固定尺寸的图片。图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224×224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448×448 的图像作为输入。但这样切换对模型性能有一定影响。
    所以YOLO2在采用 224×224 图像进行分类模型预训练后,再采用 448×448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448×448 的分辨率。然后再使用 448×448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。)

    Convolutional With Anchor Boxes. (采用先验框)

           为了引入anchor boxes来预测bounding boxes,作者在网络中果断去掉了全连接层。剩下的具体怎么操作呢?首先,作者去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率。然后,通过缩减网络,让图片输入分辨率为416×416这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。作者观察到,大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。最后,YOLOv2使用了卷积层降采样(factor为32),使得输入卷积网络的416×416图片最终得到13×13的卷积特征图(416/32=13)
           加入了anchor boxes后,可以预料到的结果是召回率上升,准确率下降。我们来计算一下,假设每个cell预测9个建议框,那么总共会预测13×13×9 = 1521个boxes,而之前的网络仅仅预测7×7×2 = 98个boxes。具体数据为:没有anchor boxes,模型recall为81%,mAP为69.5%;加入anchor boxes,模型recall为88%,mAP为69.2%。这样看来,准确率只有小幅度的下降,而召回率则提升了7%,说明可以通过进一步的工作来加强准确率,的确有改进空间。
    (YOLO加入锚点框,不像是Faster R-CNN,每个像素点就是9个锚点框这样铺开,还是坚持用原来的每个cell里几个建议框,所以这几个建议框要很好的进行筛选,不用像Faster R-CNN里直接全覆盖就行。)

    Dimension Clusters. (聚类提取先验框尺度)

           作者在使用anchor的时候遇到了两个问题,第一个是anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。
           和以前的精选boxes维度不同,作者使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。为此,作者采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,最终的距离函数为:
                                                                          d(box,centroid)=1−IOU(box,centroid)
    本文通过改进的K-means对训练集中的boxes进行了聚类,判别标准是平均IOU得分,聚类结果如下图:

    在这里插入图片描述
           作者在召回率和模型复杂度之间进行平衡之后,取了k=5。意味着作者选择了5种大小的box维度来进行定位预测,这与手动精选的box维度不同。结果中扁长的框较少,而瘦高的框更多。
           本文做了实验来对比两种策略的优劣,如下图,使用聚类方法,仅仅5种boxes的召回率就和Faster R-CNN的9种相当。说明K-means方法的引入使得生成的boxes更具有代表性,为后面的检测任务提供了便利。
    在这里插入图片描述

    Direct location prediction.

            在YOLO模型上采用anchor boxes的第二个关键是模型不稳定性,特别是在前面几轮训练。大部分不稳定因素来源于预测boxes位置(x,y)。作者将预测偏移量改变为YOLO的预测grid cell的位置匹配性(location coordinate),将预测值限定在0-1范围内,增强稳定性。网络对feature map中的每个cell预测5个bounding boxes。对每一个bounding boxes,模型预测5个匹配性值(tx,ty,tw,th,to)。采用聚类方法选择boxes维度和直接预测bounding boxes中心位置提高YOLO将近5%准确率。大部分的不稳定现象出现在预测box的坐标(x,y)上面。在区域建议网络中,预测(x,y)以及tx,ty用到了如下公式:
    在这里插入图片描述
           这个公式的理解为:当预测tx=1,就会把box向右边移动一定距离(具体为anchor box的宽度),预测 tx=−1,就会把box向左边移动相同的距离。 这个公式没有任何限制,使得无论在什么位置进行预测,任何anchor boxes可以在图像中任意一点结束,模型随机初始化后,需要花很长一段时间才能稳定预测敏感的物体位置。.
    (这里的公式是有问题的: 应该是"+"
    在这里插入图片描述
    这个是Faster R-CNN中anchor的预测方式,x,y,w,h指的是边界框中心坐标、宽、高。变量x,xa,x* 分别指预测的边界框、anchor的边界框、GT的边界框(对y,w,h也是一样)的x坐标。可以理解为从anchor边界框到附近的GT边界框的边界框回归。)

           现在,神经网络在特征图(13×13)的每个cell上预测5个bounding boxes(聚类得出的值),同时每一个bounding box预测5个坐标值,分别为tx,ty,tw,th,to,其中前四个是坐标,to是置信度
    在这里插入图片描述
    如果这个cell距离图像左上角的边距为(cx,cy)以及该cell对应box(bounding box prior)的长和宽分别为(pw,ph),那么边界框的五个预测值可以表示为
    在这里插入图片描述        (这几个公式参考上面Faster R-CNN和YOLOv1的公式就比较容易理解。tx,ty 经sigmod函数处理过,取值限定在了0~1,实际意义就是使anchor只负责周围的box,有利于提升效率和网络收敛。σ 函数的意义没有给,但估计是把归一化值转化为图中真实值,使用 e 的幂函数是因为前面做了 ln 计算,因此,σ(tx)是bounding box的中心相对cell左上角的横坐标,σ(ty)是纵坐标,σ(to)是bounding box的confidence score。定位预测值被归一化后,参数就更容易得到学习,模型就更稳定。)
           作者使用Dimension Clusters和Direct location prediction这两项anchor boxes改进方法,mAP获得了5%的提升。

    Fine-Grained Features.

           改进后的YOLO对13×13 的feature map进行目标检测。更精确的特征(finer grained features)可以提高对于小目标的检测。作者向网络加入passtrough层(转移层)以增加特征。passthrough类似于ResNet,将高分辨率特征和低分辨率特征结合,使26×26×512的特征图转化为13×13×2048的特征图。该改进增加了1%的性能。
    (
    在这里插入图片描述关于passthrough layer,具体来说就是特征重排(不涉及到参数学习),前面26×26×512的特征图使用按行和按列隔行采样的方法,就可以得到4个新的特征图,维度都是13×13×512,然后做concat操作,得到13×13×2048的特征图,将其拼接到后面的层,相当于做了一次特征融合,有利于检测小目标。)

    Multi-Scale Training

           原来的YOLO网络使用固定的448 * 448的图片作为输入,现在加入anchor boxes后,输入变成了416 * 416。目前的网络只用到了卷积层和池化层,那么就可以进行动态调整。作者希望YOLOv2具有不同尺寸图片的鲁棒性,因此在训练的时候也考虑了这一点。
           不同于固定输入网络的图片尺寸的方法,作者在几次迭代后就会微调网络。每经过10次训练(10 epoch),就会随机选择新的图片尺寸。YOLO网络使用的降采样参数为32,那么就使用32的倍数进行尺度池化{320,352,…,608}。最终最小的尺寸为320 * 320,最大的尺寸为608 * 608。接着按照输入尺寸调整网络进行训练
           这种机制使得网络可以更好地预测不同尺寸的图片,意味着同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。
           在小尺寸图片检测中,YOLOv2成绩很好,输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其在低性能GPU、高帧率视频、多路视频场景中更加适用。在大尺寸图片检测中,YOLOv2达到了先进水平,VOC2007 上mAP为78.6%,仍然高于平均水准,下图是YOLOv2和其他网络的成绩对比:
    在这里插入图片描述在这里插入图片描述

    Further Experiments

           作者在VOC2012数据集和COCO数据集上进行了实验,结果如表4和表5所示。
    在这里插入图片描述
    在这里插入图片描述

    3. 更快

            YOLO一向是速度和精度并重,作者为了改善检测速度,也作了一些相关工作。大多数检测网络有赖于VGG-16作为特征提取部分,VGG-16的确是一个强大而准确的分类网络,但是复杂度有些冗余。224 * 224的图片进行一次前向传播,其卷积层就需要多达306.9亿次浮点数运算。YOLOv2使用的是基于Googlenet的架构,比VGG-16更快,一次前向传播仅需85.2亿次运算。可是它的精度要略低于VGG-16,单张224 * 224取前五个预测概率的对比成绩为88%和90%(低一点点也是可以接受的)。
            Darknet-19 YOLOv2使用了一个新的分类网络作为特征提取部分,参考了前人的先进经验,比如类似于VGG,作者使用了较多的3 * 3卷积核,在每一次池化操作后把通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。也用了batch normalization(前面介绍过)稳定模型训练。
    最终得出的基础模型就是Darknet-19,如下图,其包含19个卷积层、5个最大值池化层(maxpooling layers ),下图展示网络具体结构。Darknet-19运算次数为55.8亿次,imagenet图片分类top-1准确率72.9%,top-5准确率91.2%。
    在这里插入图片描述
           Training for classification作者使用Darknet-19在标准1000类的ImageNet上训练了160次,用的随机梯度下降法,starting learning rate 为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。 (这些训练参数是基于darknet框架,和caffe不尽相同)初始的224 * 224训练后,作者把分辨率上调到了448 * 448,然后又训练了10次,学习率调整到了0.001。高分辨率下训练的分类网络在top-1准确率76.5%,top-5准确率93.3%。
           Training for detection分类网络训练完后,就该训练检测网络了,作者去掉了原网络最后一个卷积层,转而增加了三个3 * 3 * 1024的卷积层(可参考darknet中cfg文件),并且在每一个上述卷积层后面跟一个1 * 1的卷积层,输出维度是检测所需的数量。对于VOC数据集,预测5种boxes大小,每个box包含5个坐标值和20个类别,所以总共是5 *(5+20)= 125个输出维度。同时也添加了转移层(passthrough layer ),从最后那个3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。作者的检测模型以0.001的初始学习率训练了160次,在60次和90次的时候,学习率减为原来的十分之一。其他的方面,weight decay为0.0005,momentum为0.9,依然使用了类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略。

    4. Stronger

           这一部分,作者使用联合训练方法,结合wordtree等方法,使YOLOv2的检测种类扩充到了上千种。
           具体借鉴:https://blog.csdn.net/weixin_35654926/article/details/72473024 相关部分

    5. 结论

           我们介绍YOLOv2和YOLO9000两种实时检测系统。YOLOv2是最先进的,并且比其他检测系统在各种检测数据集中更快。此外,它可以以各种图像大小运行,以提供速度和精度之间的平滑权衡。
           YOLO9000是一个通过联合优化检测和分类检测9000多个目标类别的实时框架。我们使用WordTree来组合来自各种来源的数据和我们的联合优化技术同时训练ImageNet和COCO。YOLO9000是关闭检测和分类之间的数据集大小差距的强大步骤。
           我们的许多技术泛化到目标检测之外。ImageNet的ImageTree表示为图像分类提供了更丰富,更详细的输出空间。使用分层分类的组合在分类和分割领域将是有用的。诸如多尺度训练的训练技术可以在各种视觉任务中提供益处。
           对于未来的工作,我们希望使用类似弱监督图像分割的技术。我们还计划使用更强大的匹配策略来改进我们的检测结果,以在训练期间将弱标签分配给分类数据。计算机视觉有大量的标记数据。我们将继续寻找方法,将不同的数据源和结构的数据结合在一起,形成更强大的视觉世界模型。

    参考资料:
    PS:前两篇总结的相对更好一些 ~
    https://zhuanlan.zhihu.com/p/47575929
    https://www.cnblogs.com/zhangAlin/p/10661770.html

    https://blog.csdn.net/just_sort/article/details/80822038
    https://blog.csdn.net/weixin_35654926/article/details/72473024
    http://www.360doc.com/content/17/0810/10/10408243_678094588.shtml
    https://blog.csdn.net/jesse_mx/article/details/53925356

    展开全文
    dexterod 2020-02-29 12:47:57
  • 如需交流,请移步新地址,谢谢!...YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger tianbing010@126.com http://www.cnblogs.com/mcjj 作者:马春杰杰 2017年6月14日22:30:01 最...

    文章已迁至:http://www.machunjie.com/translate/27.html

    如需交流,请移步新地址,谢谢!

    YOLO 9000论文翻译 | YOLO9000:Better, Faster, Stronger

    tianbing010@126.com

    http://www.cnblogs.com/mcjj

    作者:马春杰杰

    2017年6月14日22:30:01

    最近要做关于YOLO的东西,所以找时间将这片文章翻译了一下,有些地方理解不对,希望大家能够共同交流。

     

     

     

    摘要

    我们介绍了YOLO9000,这是一种世界最先进的、实时的目标检测系统,可以检测超过9000个类别。首先,我们对YOLO做了一些改进,得到了提升后的模型YOLO v2,这是一种先进的标准检测,比如Pascal VOC以及COCO,使用一种新奇的、多尺度的训练方法,YOLO v2可以运行不同的尺寸,可以在速度与精度之间提供一个很好的平衡。在67帧率的时候,YOLO V2 可以获得76.8的mAP在VOC2007上,40帧率的时候,可以获得78.6的mAP值,这比Faster R-cnn要好。最后,我们提出了一种联合训练的方法来进行目标检测和分类。使用这种方法,我们训练了YOLO 9000,它可以在ImageNet和COCO上同时进行训练,我们的这种联合训练方法允许YOLO9000可以进行无标签目标的预测。我们在ImageNet检测任务中验证了我们的方法,在44类已有数据集中YOLO9000获得了19.7的mAP值,在其余的156类没有的样本中,获得了16.0的mAP值。但是YOLO9000可不是只能预测200类数据,它可以同时检测出9000种目标,并且仍然可以实时的进行。

     

     

    1.  Introduction

     

    目标检测的总体目标应该是速度、精度都很高,并且能够检测出非常多的目标种类。由神经网络的出现,检测框架已经变得越来越快,精度也是。然而,大多数的检测方法仍然限制在小部分目标中。

     

    与标记的分类数据集相比,目标检测数据集比较少。最常见的检测数据集包含数千到数十万个具有数十到数百个标签的图像。 分类数据集具有数百万个具有数十或数十万种类别的图像。

     

    我们想要检测像分类数据那么多的种类,然而,对检测数据进行加标签所花费的精力远超对分类数据加标签。所以,在最近,我们不可能拥有如分类数据集那么多的检测数据集。

     

    我们提出了一种新的方法来控制我们已经有的巨大数量的分类数据集,并利用它来扩展现有的检测系统的范围。我们使用了分层方法,使得不同的数据集得以连接到一起。

     

    我们同样提出了一种联合训练算法,允许我们使用检测和分类数据集来训练目标检测器。我们使用标记的检测图像来提升定位的精度,使用分类图像来提升它的鲁棒性。

     

    使用这种方法,我们训练了YOLO 9000,这是一种实时的目标检测器,可以同时检测超过9000种不同的目标。首先,我们在YOLO的基础上做了提升,获得了YOLO  v2,然后我们使用我们的数据集连接方法以及联合训练算法去训练一个模型,数据集使用了ImageNet数据集和COCO数据集。

     

    2 better

     

    YOLO 相对于世界上最好的检测系统来说,有一些缺点。对于YOLO 进行了错误分析显示,YOLO 在定位误差方面比较严重,另外,YOLO与基于region proposal的方法相比,召回率比较低。因此,我们主要提升定位准确性以及召回率。

     

    计算机视觉的趋势是更大、更深的神经网络。更好的表现通常需要使用更大的网络来训练,然而,对于YOLO V2来说,我们既想要精度高,还想要速度快。在不扩大网络尺寸的情况下,我们简化了网络,并且使特征更易被学习。我们从以前的工作中得到了很多的灵感,总体概况在表2.

     

     

    Batch Normalization

    batch normalization 通常导致收敛显著,同时呢,也消除了其他形式的正则化需要。YOLO通过在整个卷积层增加BN,我们得到了2%的提升。BN同样帮助我们归一化模型。使用BN,我们可以在不overfitting的前提下去除dropout。

     

    High Resolution Classifier

    在ImageNet中,所有表现好的检测方法都使用了预训练的方法。使用Alexnet,许多的输入都是256*256,原始的YOLO使用224*224的图像大小,为了提高分辨率,我们使用了448*448的图像。这就意味着这个网络在在学习目标检测的同时还要调整新的输入分辨率。

     

    对于YOLO v2来说,我们首先fine tune这个分类网络在448*448的分辨率下,一共在ImageNet上进行10次epochs。这就给了网络一定的时间来调整它的卷积核去更好的工作。这种高分辨率的分类网络为我们带来了4%的提升。

     

    Convolutional With Anchor Boxes

    YOLO直接使用全连接层来预测bbox。而Faster r-cnn使用hand-picked priors来代替这一步,仅仅使用卷积层来预测anchor box的offset以及confidence。由于预测层是卷积层,所以RPN(region proposal network)预测了特征图的每一个位置的offset。用预测offset来取代coordinate简化了问题,并且使得网络更容易被学习。

     

    我们移除了全连接层,并且使用anchor boxes 来预测bbox。首先,我们去除了一个pooling层来增加输出的尺寸分辨率,同样的,我们在输入的时候,使用416来代替448.我们这样做是因为我们希望在特征图中有奇数个位置,这样就会有一个位于中心的cell了。目标,尤其是大目标,通常会占据图像的中心,,所以有一个cell位于中心是非常好的,这样中间这个cell来预测这个物体,而不是像原来那样,使用四个相邻的cell来预测这个物体。YOLO的卷积层下采样率为32,所以对于416的输入图像,最后会获得13*13的特征图。

     

    当我们移动anchor boxes的时候,我们同样将类型的预测与空间位置分离,由anchor box同时预测类别和坐标。像YOLO一样,我们仍然会计算IOU值,以及类型的可能性。使用anchor boxes,在精度上面,有一点小的下降。对于每张图片YOLO仅仅预测98个bbox,而现在,我们会预测超过一千张。没有anchor boxes,我们获得了69.5的mAP值,召回率为81%,使用了anchor box之后,mAP值为69.2,召回率为88%。尽管mAP值下降了,但是召回率上升意味着我们的模型有更多的room去提升。

     

    Dimension Clusters

    在使用anchor boxes的时候,我们遇到了两个问题,首先是box的个数以及维度是手工设定的,网络可以自适应的调整box,但是如果我们提供了更好的priors,那么我们的网络就更容易学习预测好的目标。

     

    取代手工选择priors,我们使用k-means聚类的方法,在训练的时候使bbox自动寻找好的priors。如果我们使用标准的k-means对大的box之间的欧氏距离进行计算,会产生比小box更大的误差。然而,我们真正想要的是,priors可以获得好的IOU值,而与box的尺寸无关。因此,对于距离矩阵来说,我们使用下式:

     

     

    我们对不同的k值进行k-means,如图2

     

    我们选择k=5作为模型复杂性与高召回率之间最好的平衡。聚类中心与手工选值明显不同,它们的box比较瘦。上面左图: 随着k的增大,IOU也在增大(高召回率),但是复杂度也在增加。所以平衡复杂度和IOU之后,最终得到k值为5。上面右图:5聚类的中心与手动精选的boxes是完全不同的,扁长的框较少瘦高的框较多。

     

    作者做了对比实验,5种boxes的Avg IOU(61.0)就和Faster R-CNN的9种Avg IOU(60.9)相当。 说明K-means方法的生成的boxes更具有代表性,使得检测任务更好学习。

     

    Direct locaion prediction

    当使用anchor boxes的时候,遇到了第二个问题,那就是模型的不稳定性。尤其是在早期的iterations。大多数的不稳定性来自于预测box的(x,y)。在RPN中,它们是通过下式来预测的:

     

    例如,tx=1,盒子就会往右移,tx=-1,盒子就会往左移。

     

    这个公式没有任何的限制,无论任何在任何位置进行预测,任何的anchor boxes可以在图像中的任意一点。模型随机初始化之后将需要很长一段时间才能稳定预测敏感的物体偏移。

     

    取而代之,我们使用YOLO的方法,预测相对于grid的box的坐标。并且把ground truth约束在0-1之间(利用logistic激活函数约束网络的预测值来达到此限制)。

     

    这个网络对于每一个cell都会预测5个bbox,每个bbox预测5个坐标值,tx,ty,tw,th以及to。如果这个cell距离图像左上角的边距为cx,cy,以及该cell对应的box 的长和宽分别为(pw,ph),那么对应的box为:

     

     

    因为我们限制了位置,所以预测的参数是很容易被学习的。这会使得网络更加的稳定。使用dimension cluster来直接预测bbox的中心,与使用anchor boxes相比,帮助YOLO提升了5%(所以,很显然,作者最后没有使用anchor boxes)

     

    Fine-Grained Features

     

    修改后的网络最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,如果用上细粒度特征的话可能对小尺度的物体检测有帮助。Faser R-CNN和SSD都在不同层次的特征图上产生区域建议以获得多尺度的适应性。YOLOv2使用了一种不同的方法,简单添加一个 passthrough layer,把浅层特征图(分辨率为26 * 26)连接到深层特征图。

     

    passthrogh 层把高低分辨率的特征图做连结,叠加相邻特征到不同通道(而非空间位置),类似于Resnet中的identity mappings。这个方法把26 * 26 * 512的特征图叠加成13 * 13 * 2048的特征图,与原生的深层特征图相连接。

     

    YOLOv2的检测器使用的就是经过扩展后的的特征图,它可以使用细粒度特征,使得模型的性能获得了1%的提升。

     

    Multi-Scale Traning

     

    原始的YOLO使用了448*448的输入图像,在增加了anchor boxes之后,我们调整为了416*416,然而,由于我们的方法仅仅使用了卷积层以及池化层,所以它可以检测任意图像大小。我们希望v2可以鲁棒的检测各种尺寸,所以我们在训练的时候考虑了这一点。

     

    取代固定的输入尺寸,我们在每一次iteration的时候改变网络,每隔10个batches,我们的网络就会随机的选择一个新的图像尺寸,图像尺寸为32的倍数,比如320/352等等。最小的是320*320,最大的是608*608.改变尺寸之后,继续训练。

     

    这种机制使得网络可以更好地预测不同尺寸的图片,同一个网络可以进行不同分辨率的检测任务,在小尺寸图片上YOLOv2运行更快,在速度和精度上达到了平衡。

     

    在低分辨率图片检测中,YOLOv2是检测速度快(计算消耗低),精度较高的检测器。输入为228 * 228的时候,帧率达到90FPS,mAP几乎和Faster R-CNN的水准相同。使得其更加适用于低性能GPU、高帧率视频和多路视频场景。

     

    在高分辨率图片检测中,YOLOv2达到了先进水平(state-of-the-art),VOC2007 上mAP为78.6%,而且超过实时速度要求。下图是YOLOv2和其他网络在VOC2007上的对比:

     

     

     

    Further Experiments

    我们在VOC2012中对YOLO v2进行了训练。表4显示了对比结果。当速度最快的时候YOLO v2达到了73.4的mAP值,我们同样训练了COCO与其他方法进行对比,如表5.在VOC矩阵中(IOU=0.5),YOLO获得了44%的mAP值。

     

     

     

     

    3 Faster

     

    我们想要检测的精确些,但是我们同样想要检测的快。对于检测的大部分应用,比如机器人技术、自动驾驶汽车,需要非常低的延迟。为了表现的更好,我们设计YOLO V2,使其变得更快。

     

    大多数的框架依赖于VGG-16作为基本的特征提取器。这是一种强大的、精确的分类网络,但是非常复杂。对于224*224分辨率的每一张图片来说,VGG-16的卷积层需要306.9亿次浮点运算。

     

    YOLO使用了一种基于Googlenet的自建网络。这种网络比vgg-16要快,只需要85亿次运算,然而,他的精度比VGG-16只是下降了一点。224 * 224图片取 single-crop, top-5 accuracy,YOLO的定制网络得到88%(VGG-16得到90%)。

     

    Darknet-19

     

    对于YOLO v2来说,我们使用了一种新的分类模型。我们的模型参考了前人的经验,类似于VGG,我们使用3*3的卷积核,每次池化之后,通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling)做预测,把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。使用batch normalization稳定模型训练,加速收敛,正则化模型。

     

    我们最终的模型称为Darknet-19,拥有19个卷积层,5个最大池化层。见表6.Darknet-19处理一张照片需要55.8亿次运算,imagenet的top-1准确率为72.9%,top-5准确率为91.2%。

     

     

    Training for classification

    我们在标准的ImageNet1000类分类数据集上进行训练,一共160个epochs,使用随机梯度下降法,开始学习率为0.1,polynomial rate decay为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据扩充方法(data augmentation),包括random crops, rotations, and hue, saturation, and exposure shifts。(参数都是基于作者的darknet框架)

     

    作为以上的讨论,在进行了224*224的训练之后,我们fine tune为448*448.我们仍然用上面的参数来训练,但是仅仅进行10个epochs,初始学习率为0.001.高分辨率下训练的分类网络top-1准确率76.5%,top-5准确率93.3%。

     

    Training for detection

    把分类网络改为检测网络,去掉最后一个卷积层,增加了3个3*3的卷积层,并且在每个卷积层后面都跟一个1*1的卷积层,输出的维度为需要检测的数量。对于VOC数据集,预测5种boxes,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度。也添加了passthrough layer,从最后3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。

     

    我们训练了160个epochs,出是学习率为0.001,在第60、90次epochs的时候,将学习率降为原来的十分之一,。weight decay为0.0005,momentum为0.9,以及类似于Faster-RCNN和SSD的数据扩充(data augmentation)策略: random crops, color shifting, etc。使用相同的策略在 COCO 和VOC上训练。

     

    4 Stronger

     

    我们提出了一种联合训练机制,用来将检测数据集和分类数据集联合训练。我们的方法使用含有标签的检测数据集去学习检测相关的信息,比如bbox的坐标预测,是否包含目标,以及包含目标的概率。使用仅有类别标签的分类数据集图片去扩展可以检测的种类。

     

    在训练的时候,我们把检测和分类数据集混合起来,当网络遇到一张属于检测数据集的图片就基于YOLOv2的全部损失函数(包含分类部分和检测部分)做反向传播。当网络遇到一张属于分类数据集的图片就仅基于分类部分的损失函数做反向传播。

     

    这种方法出现了新的挑战。检测数据集仅仅含有通用的目标,以及抽象的标签,比如“狗”“船”。分类数据集有更宽、更深的类别,比如ImageNet数据集拥有超过100种的狗。如果我们想要去训练这两个数据集,我们需要一种方式来整合他们的标签。

     

    大多数的分类方法使用softmax进行计算最终的结果。但是softmax假设类别之间互不包含,但是整合之后的数据是类别是有包含关系的,例如 “Norfolk terrier” 和 “dog”。 所以整合数据集没法使用这种方式(softmax 模型)。

     

    我们采用一种不要求互不包含的多标签模型(multi-label model)来整合数据集。这种方法忽略了数据集的结构(例如 COCO数据集的所有类别之间是互不包含的)

     

    Hierarchical classification

     

    ImageNet标签参考了Wordnet,这是一种结构化概念及概念之间关系的语言数据库。在wordnet中,Norfolk terrier以及Yorkshire terriers都是terrier,这是一种hunting dog,同时也是狗的一种,是canine的一种,等等。大多数的分类方法需要扁平化的标签数据,而在这里,我们需要结构化的标签数据。

     

    WordNet是一个有向图结构(而非树结构),因为语言是复杂的(例如“dog”既是“canine”又是“domestic animal”),为了简化问题,我们从ImageNet的概念中构建了一个层次树结构(hierarchical tree)来代替图结构方案。

     

    为了建立这个tree,我们遍历了ImageNet中的视觉名词,在WordNet上找到从它所在位置到根节点(“physical object”)的路径。 许多同义词集只有一条路径。所以先把这些路径加入层次树结构。然后迭代检查剩下的名词,得到路径,逐个加入到层次树。路径选择办法是:如果一个名词有两条路径到根节点,其中一条需要添加3个边到层次树,另一条仅需添加一条边,那么就选择添加边数少的那条路径。

     

    最后的结果就是一个wordtree,这是一种视觉上的层次模型,在使用wordtree进行分类的时候,我们预测每个节点的条件概率(conditional probability)。比如说,在terrier节点处,我们预测:

     

     

    如果我们想要计算某个特定节点的绝对概率,我们只需要沿着路径做连续乘积。例如 如果想知道一张图片是不是“Norfolk terrier ”需要计算:

     

    分类时,假设图片包含了物体,即Pr(physical object) = 1.

     

    为了验证这种方法,我们在WordTree(用1000类别的ImageNet创建)上训练了Darknet-19模型。为了创建WordTree1k作者天添加了很多中间节点,把标签由1000扩展到1369。训练过程中ground truth标签要顺着向根节点的路径传播:例如 如果一张图片被标记为“Norfolk terrier”它也被标记为“dog” 和“mammal”等。为了计算条件概率,模型预测了一个包含1369个元素的向量,而且基于所有“同义词集”计算softmax,其中“同义词集”是同一概念的下位词。见图5

     

     

    使用相同的训练参数,层次式Darknet-19获得71.9%的top-1精度和90.4%top-5精度。尽管添加了369个额外概念,且让网络去预测树形结构,精度只有略微降低。按照这种方式执行分类有一些好处,当遇到新的或未知物体类别,预测精确度降低的很温和(没有突然巨幅下降)。例如:如果网络看到一张狗的图片,但是不确定狗的类别,网络预测为狗的置信度依然很高,但是,狗的下位词(“xx狗”)的置信度就比较低。

     

    这个策略野同样可用于检测。不再假设每一张图片都包含物体,取而代之使用YOLOv2的物体预测器(objectness predictor)得到Pr(physical object)的值。检测器预测一个bounding box和概率树(WordTree)。沿着根节点向下每次都走置信度最高的分支直到达到某个阈值,最终预测物体的类别为最后的节点类别。

     

    Dataset combination with wordtree

     

    可以使用WordTree把多个数据集整合在一起。只需要把数据集中的类别映射到树结构中的同义词集合(synsets)。使用WordTree整合ImageNet和COCO的标签如下图:

     

     

     

    Joint classification and detection.

     

    现在,我们可以使用wordtree来联合数据集,我们可以在分类和检测数据集上训练我们的联合模型。我们希望训练一个非常广的检测器,所以,我们使用COCO检测数据集和全部ImageNet的前9000类创造一个联合数据集。为了评估我们使用的方法,也从ImageNet detection challenge 中向整合数据集添加一些还没有存在于整合数据集的类别。相应的WordTree有9418个类别。由于ImageNet是一个非常大的数据集,所以通过oversampling COCO数据集来保持平衡,使ImageNet:COCO = 4:1。

     

    使用这个数据集,我们训练了YOLO9000,我们使用了YOLO v2的结构,anchor box数量由5调整为3用以限制输出大小。当网络遇到一张检测图片就正常反向传播。其中对于分类损失只在当前及其路径以上对应的节点类别上进行反向传播。For example, if the label is “dog” we do assign any error to predictions further down in the tree, “German Shepherd” versus “Golden Retriever”, because we do not have that information.

     

    当网络遇到一张分类图片仅反向传播分类损失。在该类别对应的所有bounding box中找到一个置信度最高的(作为预测坐标),同样只反向传播该类及其路径以上对应节点的类别损失。反向传播objectness损失基于如下假设:预测box与ground truth box的重叠度至少0.31IOU。

     

    采用这种联合训练,YOLO9000从COCO检测数据集中学习如何在图片中寻找物体,从ImageNet数据集中学习更广泛的物体分类。

     

    我们在ImageNet detection task上评估YOLO9000。ImageNet detection task和COCO有44个物体类别是相同的。这意味着YOLO9000只从大多数测试数据集中看到过分类数据而非检测数据。最终整体精度为19.7mAP,在从未见过的156个物体检测数据类别上精度为16.0mAP。这个结果高于DPM,但是YOLO9000是在不同数据集上进行半监督训练。而且YOLO9000可以同时实时检测9000多种其它物体类别。

     

    当我们在ImageNet中分析YOLO9000的时候,它在学习新的动物类型表现很好,但是对于像衣服、设备这种类别表现不好。因为从COCO数据集上动物类别那里学习到的物体预测泛化性很好。但是COCO数据集并没有任何衣服类别的标签数据(只有"人"类别),所以YOLO9000很难对“太阳镜”,“游泳裤”这些类别建模。

     

    5 Conclusion

     

    我们介绍了YOLO v2和YOLO9000,这是一种实时的检测系统。YOLO v2是最先进的,比其他的检测系统更快。另外,它可以在不同的图像尺寸上运行,这样就可以在速度与精度之间提供一个非常好的平衡。

     

    YOLO9000是一个实时的检测框架,通过联合检测机制,它可以检测超过9000种类别。我们使用wordtree来整合不同的资源,使用我们的联合训练技术在ImageNet和COCO数据集上进行训练。YOLO9000是缩小检测数据集和分类数据集之间尺寸差异的巨大一步。

     

    我们的许多技术不仅仅是关于目标检测的,我们的wordtree对于图像分类来说,提供了更丰富、更详尽的输出空间。使用分层分类的数据集联合在分类以及分割领域是非常有用的。多尺度的训练技术对于不同的视觉任务来说是非常有用的。

     

    对于未来的工作,我们希望利用类似的技术进行弱监督的图像分割。我们还计划在训练期间对弱监督标签的分类数据使用更加强大的匹配策略提升我们的检测结果。计算机视觉在海量的标记数据上是非常好的,我们将会继续寻找将不同资源整合在一起进行训练的模型。

    展开全文
    ma3252788 2017-06-16 12:48:34
  • YOLO9000: Better, Faster, Stronger YOLO9000:更好、更快、更强 Joseph Redmon*†, Ali Farhadi*† University of Washington*, Allen Institute for AI† http://pjreddie.com/yolo9000/ ...

    YOLO9000: Better, Faster, Stronger

    YOLO9000:更好、更快、更强

    Joseph Redmon*†, Ali Farhadi*†

    University of Washington*, Allen Institute for AI†

    http://pjreddie.com/yolo9000/

    Abstract

    We introduce YOLO9000, a state-of-the-art, real-time object detection system that can detect over 9000 object categories. 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. 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 dont 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 of the 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.

    摘要

    我们引入了一个先进的实时目标检测系统YOLO9000,可以检测超过9000个目标类别。首先,我们提出了对YOLO检测方法的各种改进,既有新发明的一些东西,也参考了前人的工作。改进后的模型YOLOv2PASCAL VOCCOCO等标准检测任务上性能是最好的。使用一种新颖的、多尺度训练方法,同样的YOLOv2模型可以以不同的尺度运行,从而在速度和准确性之间获得了良好的权衡。以67FPS的检测速度,YOLOv2VOC 2007上获得了76.8 mAP。而检测速度40FPS时,YOLOv2获得了78.6 mAP,比使用ResNetFaster R-CNNSSD等先进方法表现更出色,同时仍然运行速度显著更快。最后我们提出了一种联合训练目标检测与分类的方法。使用这种方法,我们在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。我们的联合训练允许YOLO9000预测未标注的检测数据目标类别的检测结果。我们在ImageNet检测任务上验证了我们的方法。YOLO9000ImageNet检测验证集上获得19.7 mAP,尽管200个类别中只有44个具有检测数据。不在COCO中的156个类别上,YOLO9000获得16.0 mAP。但YOLO可以检测到200多个类别;它预测超过9000个不同目标类别的检测结果。并且它仍然能实时运行。

    1. Introduction

    General purpose object detection should be fast, accurate, and able to recognize a wide variety of objects. Since the introduction of neural networks, detection frameworks have become increasingly fast and accurate. However, most detection methods are still constrained to a small set of objects.

    1. 引言

    通用目的的目标检测系统应该是快速的、准确的,并且能够识别各种各样的目标。自从引入神经网络以来,检测框架变得越来越快速和准确。但是,大多数检测方法仍然受限于一小部分目标。

    Current object detection datasets are limited compared to datasets for other tasks like classification and tagging. The most common detection datasets contain thousands to hundreds of thousands of images with dozens to hundreds of tags [3] [10] [2]. Classification datasets have millions of images with tens or hundreds of thousands of categories [20] [2].

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

    We would like detection to scale to level of object classification. However, labelling images for detection is far more expensive than labelling for classification or tagging (tags are often user-supplied for free). Thus we are unlikely to see detection datasets on the same scale as classification datasets in the near future.

    我们希望检测能够扩展到目标分类的级别。但是,标注检测图像要代价比标注分类或贴标签要大得多(标签通常是用户免费提供的)。因此,我们不太可能在近期内看到与分类数据集相同规模的检测数据集。

    We propose a new method to harness the large amount of classification data we already have and use it to expand the scope of current detection systems. Our method uses a hierarchical view of object classification that allows us to combine distinct datasets together.

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

    We also propose a joint training algorithm that allows us to train object detectors on both detection and classification data. Our method leverages labeled detection images to learn to precisely localize objects while it uses classification images to increase its vocabulary and robustness.

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

    Using this method we train YOLO9000, a real-time object detector that can detect over 9000 different object categories. First we improve upon the base YOLO detection system to produce YOLOv2, a state-of-the-art, real-time detector. Then we use our dataset combination method and joint training algorithm to train a model on more than 9000 classes from ImageNet as well as detection data from COCO.

    Figure 1: YOLO9000. YOLO9000 can detect a wide variety of object classes in real-time.

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

    1YOLO9000YOLO9000可以实时检测许多目标类别。

    All of our code and pre-trained models are available online at http://pjreddie.com/yolo9000/.

    我们的所有代码和预训练模型都可在线获得:http://pjreddie.com/yolo9000/

    2. Better

    YOLO suffers from a variety of shortcomings relative to state-of-the-art detection systems. Error analysis of YOLO compared to Fast R-CNN shows that YOLO makes a significant number of localization errors. Furthermore, YOLO has relatively low recall compared to region proposal-based methods. Thus we focus mainly on improving recall and localization while maintaining classification accuracy.

    2. 更好

    与最先进的检测系统相比,YOLO有许多缺点。YOLOFast R-CNN的误差分析比较表明,YOLO存在大量的定位误差。此外,与基于region proposal的方法相比,YOLO召回率相对较低。因此,我们主要侧重于提高召回率和改进目标精确定位,同时保持分类准确性。

    Computer vision generally trends towards larger, deeper networks [6] [18] [17]. Better performance often hinges on training larger networks or ensembling multiple models together. However, with YOLOv2 we want a more accurate detector that is still fast. Instead of scaling up our network, we simplify the network and then make the representation easier to learn. We pool a variety of ideas from past work with our own novel concepts to improve YOLOs performance. A summary of results can be found in Table 2.

    Table 2: The path from YOLO to YOLOv2. Most of the listed design decisions lead to significant increases in mAP. Two exceptions are switching to a fully convolutional network with anchor boxes and using the new network. Switching to the anchor box style approach increased recall without changing mAP while using the new network cut computation by 33%.

    计算机视觉一般趋向于更大、更深的网络[6][18][17]。更好的性能通常取决于训练更大的网络或将多个模型组合在一起。但是,在YOLOv2中,我们需要一个更精确的检测器,而且需要它仍然很快。我们不是扩大我们的网络,而是简化网络,然后让表示更容易学习。我们将过去的工作与我们自己的新概念汇集起来,以提高YOLO的性能。表2列出了结果总结。

     

    2:从YOLOYOLOv2的过程。列出的大部分设计决定都会获得mAP的显著增加。有两个例外是切换到具有anchor框的一个全卷积网络和使用新网络。切换到anchor框形式的方法增加了召回率,然而没有改变mAP,但可以使新网络会削减33%的计算量。

    Batch Normalization. Batch normalization leads to significant improvements in convergence while eliminating the need for other forms of regularization [7]. By adding batch normalization on all of the convolutional layers in YOLO we get more than 2% improvement in mAP. Batch normalization also helps regularize the model. With batch normalization we can remove dropout from the model without overfitting.

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

    High Resolution Classifier. All state-of-the-art detection methods use classifier pre-trained on ImageNet [16]. Starting with AlexNet most classifiers operate on input images smaller than 256 × 256 [8]. The original YOLO trains the classifier network at 224 × 224 and increases the resolution to 448 for detection. This means the network has to simultaneously switch to learning object detection and adjust to the new input resolution.

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

    For YOLOv2 we first fine tune the classification network at the full 448 × 448 resolution for 10 epochs on ImageNet. This gives the network time to adjust its filters to work better on higher resolution input. We then fine tune the resulting network on detection. This high resolution classification network gives us an increase of almost 4%4% mAP.

    对于YOLOv2,我们首先在ImageNet上以448×448的分辨率对分类网络进行10个迭代周期的fine tune。这使得网络来调整其卷积核以便更好地处理更高分辨率的输入。然后我们对得到的网络进行fine tune并用于检测任务。这个高分辨率分类网络使我们增加了近4%mAP

    Convolutional With Anchor Boxes. YOLO predicts the coordinates of bounding boxes directly using fully connected layers on top of the convolutional feature extractor. Instead of predicting coordinates directly Faster R-CNN predicts bounding boxes using hand-picked priors [15]. Using only convolutional layers the region proposal network (RPN) in Faster R-CNN predicts offsets and confidences for anchor boxes. Since the prediction layer is convolutional, the RPN predicts these offsets at every location in a feature map. Predicting offsets instead of coordinates simplifies the problem and makes it easier for the network to learn.

    具有Anchor框的卷积YOLO直接使用卷积特征提取器顶部的全连接层来预测边界框的坐标。Faster R-CNN使用手动选择的先验来预测边界框而不是直接预测坐标[15]Faster R-CNN中的region proposal网络(RPN)仅使用卷积层来预测Anchor框的偏移和置信度。由于预测层是卷积类型的层,所以RPN在特征图的每个位置上预测这些偏移。预测偏移而不是坐标简化了问题,并且使网络更容易学习。

    We remove the fully connected layers from YOLO and use anchor boxes to predict bounding boxes. First we eliminate one pooling layer to make the output of the networks convolutional layers higher resolution. We also shrink the network to operate on 416 input images instead of 448×448. We do this because we want an odd number of locations in our feature map so there is a single center cell. Objects, especially large objects, tend to occupy the center of the image so its good to have a single location right at the center to predict these objects instead of four locations that are all nearby. YOLO’s convolutional layers downsample the image by a factor of 32 so by using an input image of 416 we get an output feature map of 13 × 13.

    我们从YOLO中移除全连接层,并使用Anchor框来预测边界框。首先,我们去除了一个池化层,使网络卷积层输出具有更高的分辨率。我们还缩小了网络,操作416×416的输入图像而不是448×448。我们这样做是因为我们要在我们的特征图中位置个数是奇数,所以只会有一个中心格子。目标,特别是大目标,往往占据图像的中心,所以在中心有一个单独的位置来预测这些目标的很好的,而不是四个都相邻的位置。YOLO的卷积层将图像下采样32倍,所以通过使用416的输入图像,我们得到了13×13的输出特征图。

    When we move to anchor boxes we also decouple the class prediction mechanism from the spatial location and instead predict class and objectness for every anchor box. Following YOLO, the objectness prediction still predicts the IOU of the ground truth and the proposed box and the class predictions predict the conditional probability of that class given that there is an object.

    当我们移动到Anchor框时,我们也将类预测机制与空间位置分离,预测每个Anchor框的类别和目标。与YOLO类似,是否为目标的预测仍然预测了真值和proposal的边界框的IOU,并且类别预测预测了当存在目标时该类别的条件概率。

    Using anchor boxes we get a small decrease in accuracy. YOLO only predicts 98 boxes per image but with anchor boxes our model predicts more than a thousand. Without anchor boxes our intermediate model gets 69.5 mAP with a recall of 81%. With anchor boxes our model gets 69.2 mAP with a recall of 88%. Even though the mAP decreases, the increase in recall means that our model has more room to improve.

    使用Anchor框,我们的精度发生了一些小的下降。YOLO对每张图像只预测98个边界框,但是使用Anchor框我们的模型预测超过一千个。如果不使用Anchor框,我们的中间模型将获得69.5mAP,召回率为81%。使用Anchor框的模型得到了69.2 mAP,召回率为88%。尽管mAP下降了一点,但召回率的上升意味着我们的模型有更大的改进空间。

    Dimension Clusters. We encounter two issues with anchor boxes when using them with YOLO. The first is that the box dimensions are hand picked. The network can learn to adjust the boxes appropriately but if we pick better priors for the network to start with we can make it easier for the network to learn to predict good detections.

    维度聚类Anchor框与YOLO一起使用时,我们遇到了两个问题。首先是边界框尺寸是手工挑选的。网络可以学习到如何适当调整边界框,但如果我们为网络选择更好的先验,我们可以使网络更容易学习它以便获得更好的检测结果。

    Instead of choosing priors by hand, we run k-means clustering on the training set bounding boxes to automatically find good priors. If we use standard k-means with Euclidean distance larger boxes generate more error than smaller boxes. However, what we really want are priors that lead to good IOU scores, which is independent of the size of the box. Thus for our distance metric we use:

    d(box, centroid)=1−IOU(box,centroid)

    We run k-means for various values of k and plot the average IOU with closest centroid, see Figure 2. We choose k=5 as a good tradeoff between model complexity and high recall. The cluster centroids are significantly different than hand-picked anchor boxes. There are fewer short, wide boxes and more tall, thin boxes.

    Figure 2: Clustering box dimensions on VOC and COCO. We run k-means clustering on the dimensions of bounding boxes to get good priors for our model. The left image shows the average IOU we get with various choices for k. We find that k=5 gives a good tradeoff for recall vs. complexity of the model. The right image shows the relative centroids for VOC and COCO. Both sets of priors favor thinner, taller boxes while COCO has greater variation in size than VOC.

    我们不用手工选择先验,而是在训练集边界框上运行k-means聚类,自动找到好的先验。如果我们使用欧式距离的标准k-means,那么较大的边界框比较小的边界框产生更多的误差。然而,我们真正想要的是产生好的IOU分数的先验,这是独立于边界框大小的。因此,对于我们的距离度量,我们使用:

    d(box,centroid)=1−IOU(box,centroid)

    如图2所示,我们运行不同k值的k-means,并画出平均IOU与最接近的几何中心的关系图。我们选择k=5模型复杂性和高召回率之间的具有良好的权衡。聚类中心与手工挑选的Anchor框明显不同。聚类结果有更短更宽的边界框,也有更高更细的边界框。

     

    2VOCCOCO的聚类边界框尺寸。我们对边界框的维度进行k-means聚类,以获得我们模型的良好先验。左图显示了我们通过对k的各种选择得到的平均IOU。我们发现k=5给出了一个很好的召回率与模型复杂度的权衡。右图显示了VOCCOCO的相对中心。这两种先验集合都具有更瘦更高的边界框,而COCOVOC在尺寸上有更大的变化。

    We compare the average IOU to closest prior of our clustering strategy and the hand-picked anchor boxes in Table 1. At only 5 priors the centroids perform similarly to 9 anchor boxes with an average IOU of 61.0 compared to 60.9. If we use 9 centroids we see a much higher average IOU. This indicates that using k-means to generate our bounding box starts the model off with a better representation and makes the task easier to learn.

    Table 1: Average IOU of boxes to closest priors on VOC 2007. The average IOU of objects on VOC 2007 to their closest, unmodified prior using different generation methods. Clustering gives much better results than using hand-picked priors.

    在表1中我们将平均IOU与我们聚类策略中最接近的先验以及手工选取的Anchor框进行了比较。仅有5个先验中心的平均IOU61.0,其性能类似于9Anchor框的60.9。如果我们使用9个中心,我们会看到更高的平均IOU。这表明使用k-means来生成我们的边界框会以更好的表示开始训练模型,并使得任务更容易学习。

     

    1VOC 2007上最接近先验的边界框平均IOUVOC 2007上目标的平均IOU与其最接近的,使用不同生成方法之前未经修改的平均值。聚类结果比使用手工选择的先验结果要更好。

    Direct location prediction. When using anchor boxes with YOLO we encounter a second issue: model instability, especially during early iterations. Most of the instability comes from predicting the (x,y) locations for the box. In region proposal networks the network predicts values tx and ty and the (x,y) center coordinates are calculated as:

    直接定位预测YOLO使用Anchor框时,我们会遇到第二个问题:模型不稳定,特别是在早期的迭代过程中。大部分的不稳定来自预测边界框的(x,y)位置。在region proposal网络中,网络预测值txty(x, y)中心坐标计算如下:

    For example, a prediction of tx=1 would shift the box to the right by the width of the anchor box, a prediction of tx=−1 would shift it to the left by the same amount.

    例如,预测tx=1会将边界框向右移动Anchor框的宽度,预测tx=−1会将其向左移动相同的宽度。

    This formulation is unconstrained so any anchor box can end up at any point in the image, regardless of what location predicted the box. With random initialization the model takes a long time to stabilize to predicting sensible offsets.

    这个公式是不受限制的,所以任何Anchor框都可以在图像任一点结束,而不管在哪个位置预测该边界框。随机初始化模型需要很长时间才能稳定以预测合理的偏移量。

    Instead of predicting offsets we follow the approach of YOLO and predict location coordinates relative to the location of the grid cell. This bounds the ground truth to fall between 0 and 1. We use a logistic activation to constrain the network’s predictions to fall in this range.

    我们没有预测偏移量,而是按照YOLO的方法预测相对于网格单元位置的位置坐标。这使得真值落到了01之间。我们使用logistic激活函数来限制网络的预测值落在这个范围内。

    The network predicts 5 bounding boxes at each cell in the output feature map. The network predicts 5 coordinates for each bounding box, tx, ty, tw, th, and to. If the cell is offset from the top left corner of the image by (cx, cy) and the bounding box prior has width and height pw, ph, then the predictions correspond to:

    Figure 3: Bounding boxes with dimension priors and location prediction. We predict the width and height of the box as offsets from cluster centroids. We predict the center coordinates of the box relative to the location of filter application using a sigmoid function.

    网络预测输出特征图中每个格子的5个边界框。网络预测每个边界框的5个坐标,txtytwthto。如果格子相对于图像的左上角偏移量为(cx, cy),边界框先验的宽度和高度为pw, ph,那么预测结果对应为:

    3:维度先验和位置预测的边界框示意图。我们预测边界框的宽度和高度作为聚类中心的偏移量。我们使用sigmoid函数预测边界框相对于卷积核应用位置的中心坐标。

    Since we constrain the location prediction the parametrization is easier to learn, making the network more stable. Using dimension clusters along with directly predicting the bounding box center location improves YOLO by almost 5% over the version with anchor boxes.

    由于我们限制位置预测参数化更容易学习,使网络更稳定。使用维度聚类以及直接预测边界框中心位置的方式比使用Anchor框的版本将YOLO提高了近5%

    Fine-Grained Features. This modified YOLO predicts detections on a 13 × 13 feature map. While this is sufficient for large objects, it may benefit from finer grained features for localizing smaller objects. Faster R-CNN and SSD both run their proposal networks at various feature maps in the network to get a range of resolutions. We take a different approach, simply adding a passthrough layer that brings features from an earlier layer at 26 × 26 resolution.

    细粒度特征这个修改后的YOLO13×13特征图上预测检测结果。虽然这对于大型目标来说已经足够了,但它通过更细粒度的特征定位出更小的目标。Faster R-CNNSSD都在网络的各种特征图上运行他们提出的网络,以获得一系列的分辨率。我们采用不同的方法,仅仅添加一个passthrough层,从26x26分辨率的更早层中提取特征。

    The passthrough layer concatenates the higher resolution features with the low resolution features by stacking adjacent features into different channels instead of spatial locations, similar to the identity mappings in ResNet. This turns the 26 × 26 × 512 feature map into a 13 × 13 × 2048 feature map, which can be concatenated with the original features. Our detector runs on top of this expanded feature map so that it has access to fine grained features. This gives a modest 1% performance increase.

    passthrough层通过将相邻特征堆叠到不同的通道而不是空间位置来连接较高分辨率特征和较低分辨率特征,类似于ResNet中的恒等映射。将26×26×512特征图变成13×13×2048特征图(译者注:如何将26×26×512变成13×13×204826×26×512首先变成413×13×512,然后在通道方向上将4个拼接在一起就成了13×13×2048),其可以与原始特征连接。我们的检测器运行在这个扩展的特征图之上,以便它可以访问细粒度的特征。这会使性能提高1%

    Multi-Scale Training. The original YOLO uses an input resolution of 448 × 448. With the addition of anchor boxes we changed the resolution to 416×416. However, since our model only uses convolutional and pooling layers it can be resized on the fly. We want YOLOv2 to be robust to running on images of different sizes so we train this into the model.

    多尺度训练原来的YOLO使用448×448的输入分辨率。通过添加Anchor框,我们将分辨率更改为416×416。但是,由于我们的模型只使用卷积层和池化层,因此它可以动态调整大小。我们希望YOLOv2能够鲁棒地运行在不同大小的图像上,因此我们可以将该特性训练到模型中。

    Instead of fixing the input image size we change the network every few iterations. Every 10 batches our network randomly chooses a new image dimension size. Since our model downsamples by a factor of 32, we pull from the following multiples of 32: {320, 352, , 608}. Thus the smallest option is 320 × 320 and the largest is 608 × 608. We resize the network to that dimension and continue training.

    我们没有固定输入图像的大小,而是每隔几次迭代就改变网络。每隔10个批次我们的网络会随机选择一个新的图像尺寸大小。由于我们的模型缩减了32倍,我们从下面的32的倍数中选择:{320,352,…,608}。因此最小的是320×320,最大的是608×608。我们将网络调整到这些尺寸并继续训练。

    This regime forces the network to learn to predict well across a variety of input dimensions. This means the same network can predict detections at different resolutions. The network runs faster at smaller sizes so YOLOv2 offers an easy tradeoff between speed and accuracy.

    这个模型架构迫使网络学习如何在各种输入维度上完成较好的预测。这意味着相同的网络可以预测不同分辨率下的检测结果。在更小尺寸上网络运行速度更快,因此YOLOv2在速度和准确性之间得到了一个简单的折衷。

    At low resolutions YOLOv2 operates as a cheap, fairly accurate detector. At 288 × 288 it runs at more than 90 FPS with mAP almost as good as Fast R-CNN. This makes it ideal for smaller GPUs, high framerate video, or multiple video streams.

    分辨率较低时YOLOv2可以作为一个低成本、相当准确的检测器。在288×288时,其运行速度超过90FPSmAPFast R-CNN差不多。这使其成为小型GPU、高帧率视频或多视频流的理想选择。

    At high resolution YOLOv2 is a state-of-the-art detector with 78.6 mAP on VOC 2007 while still operating above real-time speeds. See Table 3 for a comparison of YOLOv2 with other frameworks on VOC 2007. Figure 4

    Table 3: Detection frameworks on PASCAL VOC 2007. YOLOv2 is faster and more accurate than prior detection methods. It can also run at different resolutions for an easy tradeoff between speed and accuracy. Each YOLOv2 entry is actually the same trained model with the same weights, just evaluated at a different size. All timing information is on a Geforce GTX Titan X (original, not Pascal model).

    Figure 4: Accuracy and speed on VOC 2007.

    在高分辨率下,YOLOv2VOC 2007上最先进的检测器,mAP达到了78.6,同时能够保持实时检测的速度要求。如表3所示为YOLOv2与其他框架在VOC 2007上的比较。图4

    3PASCAL VOC 2007上的检测框架YOLOv2比先前的检测方法更快、更准确。它也可以在不同的分辨率下运行,以便在速度和准确性之间进行简单折衷。每条YOLOv2结果实际上是具有相同权重的相同训练模型,只是以不同的输入大小进行评估。所有的时间信息都是在Geforce GTX Titan X(原始的,而不是Pascal模型)上测得的。

    4VOC 2007上的准确性与速度。

    Further Experiments. We train YOLOv2 for detection on VOC 2012. Table 4 shows the comparative performance of YOLOv2 versus other state-of-the-art detection systems. YOLOv2 achieves 73.4 mAP while running far faster than competing methods. We also train on COCO and compare to other methods in Table 5. On the VOC metric (IOU = .5) YOLOv2 gets 44.0 mAP, comparable to SSD and Faster R-CNN.

    Table 4: PASCAL VOC2012 test detection results. YOLOv2 performs on par with state-of-the-art detectors like Faster R-CNN with ResNet and SSD512 and is 210× faster.

    Table 5: Results on COCO test-dev2015. Table adapted from [11]

    进一步实验我们在VOC 2012上训练YOLOv2检测模型。表4所显为YOLOv2与其他最先进的检测系统性能比较的结果。YOLOv2取得了73.4 mAP的同时运行速度比比对方法快的多。我们在COCO上进行了训练,并与表5中其他方法进行比较。在VOC指标(IOU = 0.5)上,YOLOv2得到44.0 mAP,与SSDFaster R-CNN相当。

     

    4PASCAL VOC2012测试集上的检测结果YOLOv2与最先进的检测器如具有ResNetFaster R-CNNSSD512在标准数据集上运行,YOLOv2比它们快2-10倍。

     

    5:在COCO test-dev2015数据集上的结果。表改编自[11]

    3. Faster

    We want detection to be accurate but we also want it to be fast. Most applications for detection, like robotics or self-driving cars, rely on low latency predictions. In order to maximize performance we design YOLOv2 to be fast from the ground up.

    3. 更快

    我们不仅希望检测是准确的,而且我们还希望它速度也快。大多数检测应用(如机器人或自动驾驶机车)依赖于低延迟预测。为了最大限度提高性能,我们从头开始设计YOLOv2

    Most detection frameworks rely on VGG-16 as the base feature extractor [17]. VGG-16 is a powerful, accurate classification network but it is needlessly complex. The convolutional layers of VGG-16 require 30.69 billion floating point operations for a single pass over a single image at 224 × 224 resolution.

    大多数检测框架依赖于VGG-16作为的基础特征提取器[17]VGG-16是一个强大的、准确的分类网络,但它有些过于复杂。在单张图像224×224分辨率的情况下,VGG-16的卷积层运行一次前向传播需要306.90亿次浮点运算。

    The YOLO framework uses a custom network based on the Googlenet architecture [19]. This network is faster than VGG-16, only using 8.52 billion operations for a forward pass. However, it’s accuracy is slightly worse than VGG-16. For single-crop, top-5 accuracy at 224 × 224, YOLO’s custom model gets 88.0% ImageNet compared to 90.0% for VGG-16.

    YOLO框架使用基于GoogLeNet架构[19]的自定义网络。这个网络比VGG-16更快,一次前向传播只有85.2亿次的计算操作。然而,它的准确性比VGG-16略差(译者注:ILSVRC2014竞赛中GoogLeNet获得分类任务第一名,VGG第二名,但是在定位任务中VGG是第一名)。在ImageNet上,对于单张裁剪图像,224×224分辨率下的top-5准确率,YOLO的自定义模型获得了88.0%,而VGG-16则为90.0%

    Darknet-19. We propose a new classification model to be used as the base of YOLOv2. Our model builds off of prior work on network design as well as common knowledge in the field. Similar to the VGG models we use mostly 3 × 3 filters and double the number of channels after every pooling step [17]. Following the work on Network in Network (NIN) we use global average pooling to make predictions as well as 1 × 1 filters to compress the feature representation between 3 × 3 convolutions [9]. We use batch normalization to stabilize training, speed up convergence, and regularize the model [7].

    Darknet-19我们提出了一个新的分类模型作为YOLOv2的基础。我们的模型建立在网络设计先前工作以及该领域常识的基础上。与VGG模型类似,我们大多使用3×3卷积核,并在每个池化步骤之后使得通道数量加倍[17]。按照Network in NetworkNIN)的工作,我们使用全局平均池化的结果做预测,并且使用1×1卷积核来压缩3×3卷积之间的特征表示[9]。我们使用批归一化来稳定训练、加速收敛,并正则化模型[7]

    Our final model, called Darknet-19, has 19 convolutional layers and 5 maxpooling layers. For a full description see Table 6. Darknet-19 only requires 5.58 billion operations to process an image yet achieves 72.9% top-1 accuracy and 91.2% top-5 accuracy on ImageNet.

    Table 6: Darknet-19.

    我们的最终模型叫做Darknet-19,它有19个卷积层和5个最大池化层。完整描述请看表6Darknet-19只需要55.8亿次运算来处理图像,但在ImageNet上却达到了72.9%top-1准确率和91.2%top-5准确率。

    6Darknet-19

    Training for classification. We train the network on the standard ImageNet 1000 class classification dataset for 160 epochs using stochastic gradient descent with a starting learning rate of 0.1, polynomial rate decay with a power of 4, weight decay of 0.0005 and momentum of 0.9 using the Darknet neural network framework [13]. During training we use standard data augmentation tricks including random crops, rotations, and hue, saturation, and exposure shifts.

    分类训练我们使用Darknet神经网络结构,使用随机梯度下降、初始学习率为0.1、学习率多项式衰减系数为4、权重衰减为0.0005、动量为0.9,在标准ImageNet 1000类分类数据集上训练网络160个迭代周期[13]。在训练过程中,我们使用标准的数据增强技巧,包括随机裁剪、旋转、以及色调、饱和度和曝光的改变。

    As discussed above, after our initial training on images at 224 × 224 we fine tune our network at a larger size, 448. For this fine tuning we train with the above parameters but for only 10 epochs and starting at a learning rate of 10−3. At this higher resolution our network achieves a top-1 accuracy of 76.5% and a top-5 accuracy of 93.3%.

    如上所述,在我们对224×224的图像进行初始训练之后,我们对网络在更大的尺寸448上进行了fine tune。对于这种fine tune,我们使用上述参数进行训练,但是只有10个迭代周期,并且以10−3的学习率开始(译者注:fine-tune时通常会使用较低的学习率)。在这种更高的分辨率下,我们的网络达到了76.5%top-1准确率和93.3%top-5准确率。

    Training for detection. We modify this network for detection by removing the last convolutional layer and instead adding on three 3 × 3 convolutional layers with 1024 filters each followed by a final 1 × 1 convolutional layer with the number of outputs we need for detection. For VOC we predict 5 boxes with 5 coordinates each and 20 classes per box so 125 filters. We also add a passthrough layer from the final 3 × 3 × 512 layer to the second to last convolutional layer so that our model can use fine grain features.

    检测训练我们修改这个网络使得可以用于检测任务,删除了最后一个卷积层,加上了三层具有1024个卷积核的3×3卷积层,每层后面接1×1卷积层,卷积核数量与我们检测输出数量一致。对于VOC,我们预测5个边界框,每个边界框有5个坐标和20个类别,所以有125个卷积核。我们还添加了从最后的3×3×512层到倒数第二层卷积层的直通层,以便我们的模型可以使用细粒度特征。

    We train the network for 160 epochs with a starting learning rate of 10−3, dividing it by 10 at 60 and 90 epochs. We use a weight decay of 0.0005 and momentum of 0.9. We use a similar data augmentation to YOLO and SSD with random crops, color shifting, etc. We use the same training strategy on COCO and VOC.

    我们训练网络160个迭代周期,初始学习率为10−3,在60个和90个迭代周期时将学习率除以10。我们使用0.0005的权重衰减和0.9的动量。我们对YOLOSSD进行类似的数据增强:随机裁剪、色彩改变等。我们对COCOVOC使用相同的训练策略。

    4. Stronger

    We propose a mechanism for jointly training on classification and detection data. Our method uses images labelled for detection to learn detection-specific information like bounding box coordinate prediction and objectness as well as how to classify common objects. It uses images with only class labels to expand the number of categories it can detect.

    4. 更强

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

    During training we mix images from both detection and classification datasets. When our network sees an image labelled for detection we can backpropagate based on the full YOLOv2 loss function. When it sees a classification image we only backpropagate loss from the classification-specific parts of the architecture.

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

    This approach presents a few challenges. Detection datasets have only common objects and general labels, like dog or boat. Classification datasets have a much wider and deeper range of labels. ImageNet has more than a hundred breeds of dog, including Norfolk terrierYorkshire terrier, and Bedlington terrier. If we want to train on both datasets we need a coherent way to merge these labels.

    这种方法存在一些挑战。检测数据集只有常见目标和通用标签,如“狗”或“船”。分类数据集具有更广更深的标签范围。ImageNet有超过一百种品种的狗,包括Norfolk terrierYorkshire terrierBedlington terrier。如果我们想在两个数据集上训练,我们需要一个连贯的方式来合并这些标签。

    Most approaches to classification use a softmax layer across all the possible categories to compute the final probability distribution. Using a softmax assumes the classes are mutually exclusive. This presents problems for combining datasets, for example you would not want to combine ImageNet and COCO using this model because the classes “Norfolk terrierand” and “dog” are not mutually exclusive.

    大多数分类方法使用跨所有可能类别的softmax层来计算最终的概率分布。使用softmax假定这些类是互斥的。这给数据集的组合带来了问题,例如你不想用这个模型来组合ImageNetCOCO,因为类Norfolk terrierdog不是互斥的。

    We could instead use a multi-label model to combine the datasets which does not assume mutual exclusion. This approach ignores all the structure we do know about the data, for example that all of the COCO classes are mutually exclusive.

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

    Hierarchical classification. ImageNet labels are pulled from WordNet, a language database that structures concepts and how they relate [12]. In WordNet, Norfolk terrier and Yorkshire terrier are both hyponyms of terrier which is a type of hunting dog, which is a type of dog, which is a canine, etc. Most approaches to classification assume a flat structure to the labels however for combining datasets, structure is exactly what we need.

    分层分类ImageNet标签是从WordNet中提取的,这是一个构建概念及其相互关系的语言数据库[12]。在WordNet中,Norfolk terrierYorkshire terrier都是terrier的下义词,terrier是一种hunting doghunting dogdogdogcanine等。分类的大多数方法假设标签是一个扁平结构,但是对于数据集的组合,结构正是我们所需要的。

    WordNet is structured as a directed graph, not a tree, because language is complex. For example a dog is both a type of canine and a type of domestic animal which are both synsets in WordNet. Instead of using the full graph structure, we simplify the problem by building a hierarchical tree from the concepts in ImageNet.

    WordNet的结构是有向图,而不是树,因为语言是复杂的。例如,dog既是一种canine(犬),也是一种domestic animal(家畜),它们都是WordNet中的同义词。我们不是使用完整的图结构,而是通过从ImageNet的概念中构建分层树来简化问题。

    To build this tree we examine the visual nouns in ImageNet and look at their paths through the WordNet graph to the root node, in this case physical object. Many synsets only have one path through the graph so first we add all of those paths to our tree. Then we iteratively examine the concepts we have left and add the paths that grow the tree by as little as possible. So if a concept has two paths to the root and one path would add three edges to our tree and the other would only add one edge, we choose the shorter path.

    为了构建这棵树,我们检查了ImageNet中的视觉名词,并查看它们通过WordNet图到根节点的路径,在这种情况下是“物理对象”。许多同义词通过图只有一条路径,所以首先我们将所有这些路径添加到我们的树中。然后我们反复检查我们留下的概念,并尽可能少地添加生长树的路径。所以如果一个概念有两条路径到一个根,一条路径会给我们的树增加三条边,另一条只增加一条边,我们选择更短的路径。

    The final result is WordTree, a hierarchical model of visual concepts. To perform classification with WordTree we predict conditional probabilities at every node for the probability of each hyponym of that synset given that synset. For example, at the terrier node we predict: 

    Pr(Norfolk terrier|terrier)

    Pr(Yorkshire terrier|terrier)

    Pr(Bedlington terrier|terrier)

    ...

    最终的结果是WordTree,一个视觉概念的分层模型。为了使用WordTree进行分类,我们预测每个节点的条件概率,以得到同义词集合中每个同义词下义词的概率。例如,在terrier节点我们预测:

    Pr(Norfolk terrier|terrier)

    Pr(Yorkshire terrier|terrier)

    Pr(Bedlington terrier|terrier)

    ...

    If we want to compute the absolute probability for a particular node we simply follow the path through the tree to the root node and multiply to conditional probabilities. So if we want to know if a picture is of a Norfolk terrier we compute: 

    Pr(Norfolk terrier)=Pr(Norfolk terrier|terrier)

    *Pr(terrier|hunting dog)

    *…*

    *Pr(mammal|Pr(animal)

    *Pr(animal|physical object)

    如果我们想要计算一个特定节点的绝对概率,我们只需沿着通过树到达根节点的路径,再乘以条件概率。所以如果我们想知道一张图片是否是Norfolk terrier,我们计算:

    Pr(Norfolk terrier)=Pr(Norfolk terrier|terrier)

    *Pr(terrier|hunting dog)

    *…*

    *Pr(mammal|Pr(animal)

    *Pr(animal|physical object)

    For classification purposes we assume that the the image contains an object: Pr(physical object)=1.

    对于分类任务,我们假定图像只包含一个目标:Pr(physical object)=1

    To validate this approach we train the Darknet-19 model on WordTree built using the 1000 class ImageNet. To build WordTree1k we add in all of the intermediate nodes which expands the label space from 1000 to 1369. During training we propagate ground truth labels up the tree so that if an image is labelled as a Norfolk terrier it also gets labelled as a dog and a mammal, etc. To compute the conditional probabilities our model predicts a vector of 1369 values and we compute the softmax over all sysnsets that are hyponyms of the same concept, see Figure 5.

    Figure 5: Prediction on ImageNet vs WordTree. Most ImageNet models use one large softmax to predict a probability distribution. Using WordTree we perform multiple softmax operations over co-hyponyms.

    为了验证这种方法,我们在使用1000ImageNet构建的WordTree上训练Darknet-19模型。为了构建WordTree1k,我们添加了所有将标签空间从1000扩展到1369的中间节点。在训练过程中,我们将真实标签向树上面传播,以便如果图像被标记为Norfolk terrier,则它也被标记为dogmammal等。为了计算条件概率,我们的模型预测了具有1369个值的向量,并且我们计算了相同概念的下义词在所有同义词集上的softmax,见图5

    5:在ImageNetWordTree上的预测。大多数ImageNet模型使用一个较大的softmax来预测概率分布。使用WordTree,我们可以在共同的下义词上执行多次softmax操作。

    Using the same training parameters as before, our hierarchical Darknet-19 achieves 71.9% top-1 accuracy and 90.4% top-5 accuracy. Despite adding 369 additional concepts and having our network predict a tree structure our accuracy only drops marginally. Performing classification in this manner also has some benefits. Performance degrades gracefully on new or unknown object categories. For example, if the network sees a picture of a dog but is uncertain what type of dog it is, it will still predict dog with high confidence but have lower confidences spread out among the hyponyms.

    使用与之前相同的训练参数,我们的分层Darknet-19达到71.9%top-1准确率和90.4%top-5准确率。尽管增加了369个额外的概念,而且我们的网络预测了一个树状结构,但我们的准确率仅下降了一点点。以这种方式进行分类也有一些好处。在新的或未知的目标类别上性能不会下降太多。例如,如果网络看到一只狗的照片,但不确定它是什么类型的狗,它仍然会高度自信地预测“狗”,但是扩展到下义词后可能有更低的置信度。

    This formulation also works for detection. Now, instead of assuming every image has an object, we use YOLOv2’s objectness predictor to give us the value of Pr(physical object). The detector predicts a bounding box and the tree of probabilities. We traverse the tree down, taking the highest confidence path at every split until we reach some threshold and we predict that object class.

    这个构想也适用于检测。现在,我们不是假定每张图像都有一个目标,而是使用YOLOv2的目标预测器给我们Pr(physical object)的值。检测器预测边界框和概率树。我们遍历树,在每个分割中采用最高的置信度路径,直到达到某个阈值,然后我们预测目标类。

    Dataset combination with WordTree. We can use WordTree to combine multiple datasets together in a sensible fashion. We simply map the categories in the datasets to synsets in the tree. Figure 6 shows an example of using WordTree to combine the labels from ImageNet and COCO. WordNet is extremely diverse so we can use this technique with most datasets.

    使用WordTree组合数据集我们可以使用WordTree以合理的方式将多个数据集组合在一起。我们只需将数据集中的类别映射到树中的同义词集(synsets)即可。图6显示了使用WordTree来组合来自ImageNetCOCO的标签的示例。WordNet是非常多样化的,所以我们可以在大多数数据集中使用这种技术。

    Joint classification and detection. Now that we can combine datasets using WordTree we can train our joint model on classification and detection. We want to train an extremely large scale detector so we create our combined dataset using the COCO detection dataset and the top 9000 classes from the full ImageNet release. We also need to evaluate our method so we add in any classes from the ImageNet detection challenge that were not already included. The corresponding WordTree for this dataset has 9418 classes. ImageNet is a much larger dataset so we balance the dataset by oversampling COCO so that ImageNet is only larger by a factor of 4:1.

    联合分类和检测现在我们可以使用WordTree组合数据集,我们可以在分类和检测上训练联合模型。我们想要训练一个非常大规模的检测器,所以我们使用COCO检测数据集和完整的ImageNet版本中的前9000个类来创建我们的组合数据集。我们还需要评估我们的方法,因此还添加了ImageNet检测挑战中未包含的类。该数据集的对应的WordTree9418个类别。ImageNet相比于COCO是一个更大的数据集,所以我们通过对COCO进行过采样来平衡数据集,使得ImageNet仅仅大于4:1的比例。

    Using this dataset we train YOLO9000. We use the base YOLOv2 architecture but only 3 priors instead of 5 to limit the output size. When our network sees a detection image we backpropagate loss as normal. For classification loss, we only backpropagate loss at or above the corresponding level of the label. For example, if the label is dog we do assign any error to predictions further down in the tree, German Shepherd versus Golden Retriever, because we do not have that information.

    使用这个数据集我们训练YOLO9000。我们使用基础的YOLOv2架构,但只有3个先验(priors)而不是5个来限制输出大小。当我们的网络看到一个检测图像时,我们正常地对损失进行反向传播。对于分类损失,我们仅在等于或高于标签对应的层对损失进行反向传播。例如,如果标签是“狗”,我们将沿着树向下进一步预测“德国牧羊犬”与“金毛猎犬”之间的差异,因为我们没有这些信息。

    When it sees a classification image we only backpropagate classification loss. To do this we simply find the bounding box that predicts the highest probability for that class and we compute the loss on just its predicted tree. We also assume that the predicted box overlaps what would be the ground truth label by at least 0.3 IOU and we backpropagate objectness loss based on this assumption.

    当它看到分类图像时,我们只能反向传播分类损失。要做到这一点,我们只需找到预测该类别最高概率的边界框,然后计算其预测树上的损失。我们还假设预测边界框与真实标签重叠至少0.3IOU,并且基于这个假设反向传播目标损失。

    Using this joint training, YOLO9000 learns to find objects in images using the detection data in COCO and it learns to classify a wide variety of these objects using data from ImageNet.

    使用这种联合训练,YOLO9000学习使用COCO中的检测数据来查找图像中的目标,并学习使用来自ImageNet的数据对各种目标进行分类。

    We evaluate YOLO9000 on the ImageNet detection task. The detection task for ImageNet shares on 44 object categories with COCO which means that YOLO9000 has only seen classification data for the majority of the test images, not detection data. YOLO9000 gets 19.7 mAP overall with 16.0 mAP on the disjoint 156 object classes that it has never seen any labelled detection data for. This mAP is higher than results achieved by DPM but YOLO9000 is trained on different datasets with only partial supervision [4]. It also is simultaneously detecting 9000 other object categories, all in real-time.

    我们在ImageNet检测任务上评估了YOLO9000ImageNet的检测任务与COCO共有的目标类别有44个,这意味着YOLO9000只能看到大多数测试图像的分类数据,而不是检测数据。YOLO9000在从未见过任何标记的检测数据的情况下,整体上获得了19.7 mAP,在不相交的156个目标类别中获得了16.0 mAP。这个mAP高于DPM的结果,但是YOLO9000在不同的数据集上训练,只有部分监督[4]。它也同时检测9000个其他目标类别,所有的都是实时的。

    When we analyze YOLO9000’s performance on ImageNet we see it learns new species of animals well but struggles with learning categories like clothing and equipment. New animals are easier to learn because the objectness predictions generalize well from the animals in COCO. Conversely, COCO does not have bounding box label for any type of clothing, only for person, so YOLO9000 struggles to model categories like sunglasses or swimming trunks.

    当我们分析YOLO9000ImageNet上的性能时,我们发现它很好地学习了新的动物种类,但是却在像服装和设备这样的学习类别中效果不好。新动物更容易学习,因为目标预测可以从COCO中的动物泛化的很好。相反,COCO没有任何类型的衣服的边界框标签,只有针对人的检测标签,因此YOLO9000很难建模好“墨镜”或“泳裤”等类别。

    5. Conclusion

    We introduce YOLOv2 and YOLO9000, real-time detection systems. YOLOv2 is state-of-the-art and faster than other detection systems across a variety of detection datasets. Furthermore, it can be run at a variety of image sizes to provide a smooth tradeoff between speed and accuracy.

    5. 结论

    我们介绍了YOLOv2YOLO9000,两个实时检测系统。YOLOv2在各种检测数据集上都是最先进的,也比其他检测系统更快。此外,它可以运行在各种图像大小,以提供速度和准确性之间的平滑折衷。

    YOLO9000 is a real-time framework for detection more than 9000 object categories by jointly optimizing detection and classification. We use WordTree to combine data from various sources and our joint optimization technique to train simultaneously on ImageNet and COCO. YOLO9000 is a strong step towards closing the dataset size gap between detection and classification.

    YOLO9000是一个通过联合优化检测和分类来检测9000多个目标类别的实时框架。我们使用WordTree将各种来源的数据和我们的联合优化技术相结合,在ImageNetCOCO上同时进行训练。YOLO9000是在检测和分类之间缩小数据集大小差距的重要一步。

    Many of our techniques generalize outside of object detection. Our WordTree representation of ImageNet offers a richer, more detailed output space for image classification. Dataset combination using hierarchical classification would be useful in the classification and segmentation domains. Training techniques like multi-scale training could provide benefit across a variety of visual tasks.

    我们的许多技术都可以泛化到目标检测之外。我们对ImageNetWordTree表示为图像分类提供了更丰富、更详细的输出空间。使用分层分类的数据集组合在分类和分割领域将是有用的。像多尺度训练这样的训练技术可以为各种视觉任务提供益处。

    For future work we hope to use similar techniques for weakly supervised image segmentation. We also plan to improve our detection results using more powerful matching strategies for assigning weak labels to classification data during training. Computer vision is blessed with an enormous amount of labelled data. We will continue looking for ways to bring different sources and structures of data together to make stronger models of the visual world.

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

    References

    参考文献

    [1] S. Bell, C. L. Zitnick, K. Bala, and R. Girshick. Inside-outside net: Detecting objects in context with skip pooling and recurrent neural networks. arXiv preprint arXiv:1512.04143, 2015. 6

    [2] J. Deng, W. Dong, R. Socher, L.-J. Li, K. Li, and L. Fei- Fei. Imagenet: A large-scale hierarchical image database. In Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on, pages 248255. IEEE, 2009. 1

    [3] M. Everingham, L. Van Gool, C. K. Williams, J. Winn, and A. Zisserman. The pascal visual object classes (voc) challenge. International journal of computer vision, 88(2):303 338, 2010. 1

    [4] P. F. Felzenszwalb, R. B. Girshick, and D. McAllester. Discriminatively trained deformable part models, release 4. http://people.cs.uchicago.edu/pff/latent-release4/. 8

    [5] R. B. Girshick. Fast R-CNN. CoRR, abs/1504.08083, 2015. 4, 5, 6

    [6] K. He, X. Zhang, S. Ren, and J. Sun. Deep residual learning for image recognition. arXiv preprint arXiv:1512.03385, 2015. 2, 4, 5

    [7] S. Ioffe and C. Szegedy. Batch normalization: Accelerating deep network training by reducing internal covariate shift. arXiv preprint arXiv:1502.03167, 2015. 2, 5

    [8] A. Krizhevsky, I. Sutskever, and G. E. Hinton. Imagenet classification with deep convolutional neural networks. In Advances in neural information processing systems, pages 10971105, 2012. 2

    [9] M. Lin, Q. Chen, and S. Yan. Network in network. arXiv preprint arXiv:1312.4400, 2013. 5

    [10] T.-Y. Lin, M. Maire, S. Belongie, J. Hays, P. Perona, D. Ramanan, P. Dollar, and C. L. Zitnick. Microsoft coco: Common objects in context. In European Conference on Computer Vision, pages 740755. Springer, 2014. 1, 6

    [11] W. Liu, D. Anguelov, D. Erhan, C. Szegedy, and S. E. Reed. SSD: single shot multibox detector. CoRR, abs/1512.02325, 2015. 4, 5, 6

    [12] G. A. Miller, R. Beckwith, C. Fellbaum, D. Gross, and K. J. Miller. Introduction to wordnet: An on-line lexical database. International journal of lexicography, 3(4):235244, 1990. 6

    [13] J. Redmon. Darknet: Open source neural networks in c. http://pjreddie.com/darknet/, 20132016. 5

    [14] J. Redmon, S. Divvala, R. Girshick, and A. Farhadi. You only look once: Unified, real-time object detection. arXiv preprint arXiv:1506.02640, 2015. 4, 5

    [15] S. Ren, K. He, R. Girshick, and J. Sun. Faster r-cnn: Towards real-time object detection with region proposal net- works. arXiv preprint arXiv:1506.01497, 2015. 2, 3, 4, 5, 6

    [16] O. Russakovsky, J. Deng, H. Su, J. Krause, S. Satheesh, S. Ma, Z. Huang, A. Karpathy, A. Khosla, M. Bernstein, A. C. Berg, and L. Fei-Fei. ImageNet Large Scale Visual Recognition Challenge. International Journal of Computer Vision (IJCV), 2015. 2

    [17] K. Simonyan and A. Zisserman. Very deep convolutional networks for large-scale image recognition. arXiv preprint arXiv:1409.1556, 2014. 2, 5

    [18] C. Szegedy, S. Ioffe, and V. Vanhoucke. Inception-v4, inception-resnet and the impact of residual connections on learning. CoRR, abs/1602.07261, 2016. 2

    [19] C. Szegedy, W. Liu, Y. Jia, P. Sermanet, S. Reed, D. Anguelov, D. Erhan, V. Vanhoucke, and A. Rabinovich. Going deeper with convolutions. CoRR, abs/1409.4842, 2014. 5

    [20] B. Thomee, D. A. Shamma, G. Friedland, B. Elizalde, K. Ni, D. Poland, D. Borth, and L.-J. Li. Yfcc100m: The new data in multimedia research. Communications of the ACM, 59(2):6473, 2016. 1

     

    展开全文
    Jwenxue 2020-07-31 09:44:19
  • 目录 预测更准确(Better) batch normalization(批归一化) 使用高分辨率图像微调分类模型 采用先验框(Anchor Boxes) ...识别对象更多(Stronger)/ YOLO9000 构建WordTree WordTree的构建方法。 WordTree.

    目录

    预测更准确(Better)

     batch normalization(批归一化)

    使用高分辨率图像微调分类模型

    采用先验框(Anchor Boxes)

    聚类提取先验框尺度

    约束预测边框的位置

    passthrough层检测细粒度特征

    多尺度图像训练

    高分辨率图像的对象检测

    速度更快(Faster)

    YOLO2 输入->输出

    YOLO2 误差函数

    识别对象更多(Stronger)/ YOLO9000

    构建WordTree

    WordTree的构建方法。

    WordTree如何表达对象的类别

    预测时如何确定一个WordTree所对应的对象

    分类和检测联合训练

    小结

    参考


    YOLOv2相对v1版本,在继续保持处理速度的基础上,从预测更准确(Better),速度更快(Faster),识别对象更多(Stronger)这三个方面进行了改进。其中识别更多对象也就是扩展到能够检测9000种不同对象,称之为YOLO9000。

    预测更准确(Better)

    论文[1]中给出了下面的改进项目列表,列出各项改进对mAP的提升效果。

     batch normalization(批归一化)

    批归一化使mAP有2.4的提升。

    批归一化有助于解决反向传播过程中的梯度消失梯度爆炸问题,降低对一些超参数(比如学习率、网络参数的大小范围、激活函数的选择)的敏感性,并且每个batch分别进行归一化的时候,起到了一定的正则化效果(YOLO2不再使用dropout),从而能够获得更好的收敛速度和收敛效果

    通常,一次训练会输入一批样本(batch)进入神经网络。批规一化在神经网络的每一层,在网络(线性变换)输出后和激活函数(非线性变换)之前增加一个批归一化层(BN),BN层进行如下变换:①对该批样本的各特征量(对于中间层来说,就是每一个神经元)分别进行归一化处理,分别使每个特征的数据分布变换为均值0,方差1。从而使得每一批训练样本在每一层都有类似的分布。这一变换不需要引入额外的参数。②对上一步的输出再做一次线性变换,假设上一步的输出为Z,则Z1=γZ + β。这里γ、β是可以训练的参数。增加这一变换是因为上一步骤中强制改变了特征数据的分布,可能影响了原有数据的信息表达能力。增加的线性变换使其有机会恢复其原本的信息。

    关于批规一化的更多信息可以参考 Batch Normalization原理与实战

    使用高分辨率图像微调分类模型

    mAP提升了3.7。

    图像分类的训练样本很多,而标注了边框的用于训练对象检测的样本相比而言就比较少了,因为标注边框的人工成本比较高。所以对象检测模型通常都先用图像分类样本训练卷积层,提取图像特征。但这引出的另一个问题是,图像分类样本的分辨率不是很高。所以YOLO v1使用ImageNet的图像分类样本采用 224*224 作为输入,来训练CNN卷积层。然后在训练对象检测时,检测用的图像样本采用更高分辨率的 448*448 的图像作为输入。但这样切换对模型性能有一定影响

    所以YOLO2在采用 224*224 图像进行分类模型预训练后,再采用 448*448 的高分辨率样本对分类模型进行微调(10个epoch),使网络特征逐渐适应 448*448 的分辨率。然后再使用 448*448 的检测样本进行训练,缓解了分辨率突然切换造成的影响。

    采用先验框(Anchor Boxes)

    召回率大幅提升到88%,同时mAP轻微下降了0.2。

    借鉴Faster RCNN的做法,YOLO2也尝试采用先验框(anchor)。在每个grid预先设定一组不同大小和宽高比的边框,来覆盖整个图像的不同位置和多种尺度,这些先验框作为预定义的候选区在神经网络中将检测其中是否存在对象,以及微调边框的位置。

    同时YOLO2移除了全连接层。另外去掉了一个池化层,使网络卷积层输出具有更高的分辨率。

    之前YOLO1并没有采用先验框,并且每个grid只预测两个bounding box,整个图像98个。YOLO2如果每个grid采用9个先验框,总共有13*13*9=1521个先验框。所以,相对YOLO1的81%的召回率,YOLO2的召回率大幅提升到88%。同时mAP有0.2%的轻微下降。

    不过YOLO2接着进一步对先验框进行了改良。

    聚类提取先验框尺度

    聚类提取先验框尺度,结合下面的约束预测边框的位置,使得mAP有4.8的提升。

    之前先验框都是手工设定的,YOLO2尝试统计出更符合样本中对象尺寸的先验框,这样就可以减少网络微调先验框到实际位置的难度YOLO2的做法是对训练集中标注的边框进行聚类分析,以寻找尽可能匹配样本的边框尺寸。

    聚类算法最重要的是选择如何计算两个边框之间的“距离”,对于常用的欧式距离,大边框会产生更大的误差,但我们关心的是边框的IOU。所以,YOLO2在聚类时采用以下公式来计算两个边框之间的“距离”。 centroid是聚类时被选作中心的边框,box就是其它边框,d就是两者间的“距离”。IOU越大,“距离”越近。YOLO2给出的聚类分析结果如下图所示:

    上图左边是选择不同的聚类k值情况下,得到的k个centroid边框,计算样本中标注的边框与各centroid的Avg IOU。显然,边框数k越多,Avg IOU越大。YOLO2选择k=5作为边框数量与IOU的折中。对比手工选择的先验框,使用5个聚类框即可达到61 Avg IOU,相当于9个手工设置的先验框60.9 Avg IOU。

    上图右边显示了5种聚类得到的先验框,VOC和COCO数据集略有差异,不过都有较多的瘦高形边框。

    约束预测边框的位置

    借鉴于Faster RCNN的先验框方法,在训练的早期阶段,其位置预测容易不稳定。其位置预测公式为:

    其中,x,y是预测边框的中心, x_a,y_a是先验框(anchor)的中心点坐标, w_a,h_a是先验框(anchor)的宽和高, t_x,t_y 是要学习的参数。 注意,YOLO论文中写的是 - ,根据Faster RCNN,应该是"+"。

    由于 t_x,t_y 的取值没有任何约束,因此预测边框的中心可能出现在任何位置,训练早期阶段不容易稳定。YOLO调整了预测公式,将预测边框的中心约束在特定gird网格内。

    其中, 是预测边框的中心和宽高。 是预测边框的置信度,YOLO1是直接预测置信度的值,这里对预测参数 进行σ变换后作为置信度的值。 是当前网格左上角到图像左上角的距离,要先将网格大小归一化,即令一个网格的宽=1,高=1。 是先验框的宽和高。 σ是sigmoid函数。 是要学习的参数,分别用于预测边框的中心和宽高,以及置信度。

    参考上图,由于σ函数将 约束在(0,1)范围内,所以根据上面的计算公式,预测边框的蓝色中心点被约束在蓝色背景的网格内。约束边框位置使得模型更容易学习,且预测更为稳定

    passthrough层检测细粒度特征

    passthrough层检测细粒度特征使mAP提升1。

    对象检测面临的一个问题是图像中对象会有大有小,输入图像经过多层网络提取特征,最后输出的特征图中(比如YOLO2中输入416*416经过卷积网络下采样最后输出是13*13),较小的对象可能特征已经不明显甚至被忽略掉了。为了更好的检测出一些比较小的对象,最后输出的特征图需要保留一些更细节的信息。

    YOLO2引入一种称为passthrough层的方法在特征图中保留一些细节信息。具体来说,就是在最后一个pooling之前,特征图的大小是26*26*512,将其1拆4,直接传递(passthrough)到pooling后(并且又经过一组卷积)的特征图,两者叠加到一起作为输出的特征图

    具体怎样1拆4,下面借用参考文章[3]中的一副图看的很清楚。图中示例的是1个4*4拆成4个2*2。因为深度不变,所以没有画出来。

     

    另外,根据YOLO2的代码,特征图先用1*1卷积从 26*26*512 降维到 26*26*64,再做1拆4并passthrough。下面图6有更详细的网络输入输出结构。

    多尺度图像训练

    多尺度图像训练对mAP有1.4的提升

    因为去掉了全连接层,YOLO2可以输入任何尺寸的图像。因为整个网络下采样倍数是32,作者采用了{320,352,...,608}等10种输入图像的尺寸,这些尺寸的输入图像对应输出的特征图宽和高是{10,11,...19}。训练时每10个batch就随机更换一种尺寸,使网络能够适应各种大小的对象检测。

    高分辨率图像的对象检测

    图1表格中最后一行有个hi-res detector,使mAP提高了1.8。因为YOLO2调整网络结构后能够支持多种尺寸的输入图像。通常是使用416*416的输入图像,如果用较高分辨率的输入图像,比如544*544,则mAP可以达到78.6,有1.8的提升。

    速度更快(Faster)

    为了进一步提升速度,YOLO2提出了Darknet-19(有19个卷积层和5个MaxPooling层)网络结构。DarkNet-19比VGG-16小一些,精度不弱于VGG-16,但浮点运算量减少到约1/5,以保证更快的运算速度。

     

     

    YOLO2的训练主要包括三个阶段。

    • 第一阶段就是先在ImageNet分类数据集上预训练Darknet-19,此时模型输入为 224*224 ,共训练160个epochs。
    • 然后第二阶段将网络的输入调整为 448*448 ,继续在ImageNet数据集上finetune分类模型,训练10个epochs,此时分类模型的top-1准确度为76.5%,而top-5准确度为93.3%。
    • 第三个阶段就是修改Darknet-19分类模型为检测模型,移除最后一个卷积层、global avgpooling层以及softmax层,并且新增了三个 3*3*1024卷积层,同时增加了一个passthrough层,最后使用 1*1 卷积层输出预测结果.

    输出的channels数为:num_anchors*(5+num_classes) ,和训练采用的数据集有关系。由于anchors数为5,对于VOC数据集(20种分类对象)输出的channels数就是125,最终的预测矩阵T的shape为 (batch_size, 13, 13, 125),可以先将其reshape为 (batch_size, 13, 13, 5, 25) ,其中 T[:, :, :, :, 0:4] 为边界框的位置和大小 ,T[:, :, :, :, 4] 为边界框的置信度,而 T[:, :, :, :, 5:] 为类别预测值。

    对象检测模型各层的结构如下(参考文章[4]):

     

     

    看一下passthrough层。图中第25层route 16,意思是来自16层的output,即26*26*512,这是passthrough层的来源(细粒度特征)。第26层1*1卷积降低通道数,从512降低到64(这一点论文在讨论passthrough的时候没有提到),输出26*26*64。第27层进行拆分(passthrough层)操作,1拆4分成13*13*256。第28层叠加27层和24层的输出,得到13*13*1280。后面再经过3*3卷积和1*1卷积,最后输出13*13*125。

    YOLO2 输入->输出

    综上所述,虽然YOLO2做出了一些改进,但总的来说网络结构依然很简单,就是一些卷积+pooling,从416*416*3 变换到 13*13*5*25。稍微大一点的变化是增加了batch normalization,增加了一个passthrough层,去掉了全连接层,以及采用了5个先验框。

    对比YOLO1的输出张量,YOLO2的主要变化就是会输出5个先验框,且每个先验框都会尝试预测一个对象。输出的 13*13*5*25 张量中,25维向量包含 20个对象的分类概率+4个边框坐标+1个边框置信度。

    YOLO2 误差函数

    误差依然包括边框位置误差、置信度误差、对象分类误差。

    公式中:

    意思是预测边框中,与真实对象边框IOU最大的那个,其IOU<阈值Thresh,此系数为1,即计入误差,否则为0,不计入误差。YOLO2使用Thresh=0.6。

    意思是前128000次迭代计入误差。注意这里是与先验框的误差,而不是与真实对象边框的误差。可能是为了在训练早期使模型更快学会先预测先验框的位置。

    意思是该边框负责预测一个真实对象(边框内有对象)。

    各种 是不同类型误差的调节系数。这一篇解释的也不错:https://zhuanlan.zhihu.com/p/183781646

    识别对象更多(Stronger)/ YOLO9000

    VOC数据集可以检测20种对象,但实际上对象的种类非常多,只是缺少相应的用于对象检测的训练样本。YOLO2尝试利用ImageNet非常大量的分类样本,联合COCO的对象检测数据集一起训练,使得YOLO2即使没有学过很多对象的检测样本,也能检测出这些对象。

    基本的思路是,如果是检测样本,训练时其Loss包括分类误差和定位误差,如果是分类样本,则Loss只包括分类误差。

    构建WordTree

    要检测更多对象,比如从原来的VOC的20种对象,扩展到ImageNet的9000种对象。简单来想的话,好像把原来输出20维的softmax改成9000维的softmax就可以了,但是,ImageNet的对象类别与COCO的对象类别不是互斥的。比如COCO对象类别有“狗”,而ImageNet细分成100多个品种的狗,狗与100多个狗的品种是包含关系,而不是互斥关系。一个Norfolk terrier同时也是dog,这样就不适合用单个softmax来做对象分类,而是要采用一种多标签分类模型。

    YOLO2于是根据WordNet[5],将ImageNet和COCO中的名词对象一起构建了一个WordTree,以physical object为根节点,各名词依据相互间的关系构建树枝、树叶,节点间的连接表达了对象概念之间的蕴含关系(上位/下位关系)。

    整个WordTree中的对象之间不是互斥的关系,但对于单个节点,属于它的所有子节点之间是互斥关系。比如terrier节点之下的Norfolk terrier、Yorkshire terrier、Bedlington terrier等,各品种的terrier之间是互斥的,所以计算上可以进行softmax操作。上面图10只画出了3个softmax作为示意,实际中每个节点下的所有子节点都会进行softmax。

    WordTree的构建方法。

    构建好的WordTree有9418个节点(对象类型),包括ImageNet的Top 9000个对象,COCO对象,以及ImageNet对象检测挑战数据集中的对象,以及为了添加这些对象,从WordNet路径中提取出的中间对象。

    构建WordTree的步骤是

    ①检查每一个将用于训练和测试的ImageNet和COCO对象,在WordNet中找到对应的节点,如果该节点到WordTree根节点(physical object)的路径只有一条(大部分对象都只有一条路径),就将该路径添加到WrodTree。

    ②经过上面操作后,剩下的是存在多条路径的对象。对每个对象,检查其额外路径长度(将其添加到已有的WordTree中所需的路径长度),选择最短的路径添加到WordTree。这样就构造好了整个WordTree。

    WordTree如何表达对象的类别

    之前对象互斥的情况下,用一个n维向量(n是预测对象的类别数)就可以表达一个对象(预测对象的那一维数值接近1,其它维数值接近0)。现在变成WordTree,如何表达一个对象呢?如果也是n维向量(这里WordTree有9418个节点(对象),即9418维向量),使预测的对象那一位为1,其它维都为0,这样的形式依然是互斥关系,这样是不合理的。合理的向量应该能够体现对象之间的蕴含关系

    比如一个样本图像,其标签是是"dog",那么显然dog节点的概率应该是1,然后,dog属于mammal,自然mammal的概率也是1,......一直沿路径向上到根节点physical object,所有经过的节点其概率都是1。参考上面图10,红色框内的节点概率都是1,其它节点概率为0。另一个样本假如标签是"Norfolk terrier",则从"Norfolk terrier"直到根节点的所有节点概率为1(图10中黄色框内的节点),其它节点概率为0。

    所以,一个WordTree对应且仅对应一个对象,不过该对象节点到根节点的所有节点概率都是1,体现出对象之间的蕴含关系,而其它节点概率是0。

    预测时如何确定一个WordTree所对应的对象

    上面讲到训练时,有标签的样本对应的WordTree中,该对象节点到根节点的所有节点概率都是1,其它节点概率是0。那么用于预测时,如何根据WordTree各节点的概率值来确定其对应的对象呢?

    根据训练标签的设置,其实模型学习的是各节点的条件概率。比如我们看WordTree(图10)中的一小段。假设一个样本标签是dog,那么dog=1,父节点mammal=1,同级节点cat=0,即P(dog|mammal)=1,P(cat|mammal)=0。

    既然各节点预测的是条件概率,那么一个节点的绝对概率就是它到根节点路径上所有条件概率的乘积。比如

    P(Norfolk terrier) = P(Norfolk terrier|terrier) * P(terrier|hunting dog) * P(hunting dog|dog) *......* P(animal|physical object) * P(physical object)

    对于分类的计算,P(physical object) = 1。

    不过,为了计算简便,实际中并不计算出所有节点的绝对概率。而是采用一种比较贪婪的算法。从根节点开始向下遍历,对每一个节点,在它的所有子节点中,选择概率最大的那个(一个节点下面的所有子节点是互斥的),一直向下遍历直到某个节点的子节点概率低于设定的阈值(意味着很难确定它的下一层对象到底是哪个),或达到叶子节点,那么该节点就是该WordTree对应的对象。

    分类和检测联合训练

    由于ImageNet样本比COCO多得多,所以对COCO样本会多做一些采样(oversampling),适当平衡一下样本数量,使两者样本数量比为4:1。

    YOLO9000依然采用YOLO2的网络结构,不过5个先验框减少到3个先验框,以减少计算量。YOLO2的输出是13*13*5*(4+1+20),现在YOLO9000的输出是13*13*3*(4+1+9418)。假设输入是416*416*3。

    由于对象分类改成WordTree的形式,相应的误差计算也需要一些调整。

    • 对一个检测样本:其分类误差只包含该标签节点以及到根节点的所有节点的误差。比如一个样本的标签是dog,那么dog往上标签都是1,但dog往下就不好设置了。因为这个dog其实必然也是某种具体的dog,假设它是一个Norfolk terrier,那么最符合实际的设置是从Norfolk terrier到根节点的标签都是1。但是因为样本没有告诉我们这是一个Norfolk terrier,只是说一个dog,那么从dog以下的标签就没法确定了。
    • 对于分类样本,则只计算分类误差。YOLO9000总共会输出13*13*3=507个预测框(预测对象),计算它们对样本标签的预测概率,选择概率最大的那个框负责预测该样本的对象,即计算其WrodTree的误差。

    另外论文中还有一句话,"We also assume that the predicted box overlaps what would be the ground truth label by at least .3 IOU and we backpropagate objectness loss based on this assumption."。感觉意思是其它那些边框,选择其中预测置信度>0.3的边框,作为分类的负样本(objectness)。即这些边框不应该有那么高的置信度来预测该样本对象。具体的就要看下代码了。

    小结

    总的来说,YOLO2通过一些改进明显提升了预测准确性,同时继续保持其运行速度快的优势。YOLO9000则开创性的提出联合使用分类样本和检测样本的训练方法,使对象检测能够扩展到缺乏检测样本的对象

    参考

    [1]YOLO9000: Better, Faster, Stronger

    [2]Batch Normalization原理与实战

    [3]目标检测|YOLOv2原理与实现(附YOLOv3)

    [4]YOLO9000: Better, Faster, Stronger

    [5]WordNet

    [6]YOLO v1深入理解

    展开全文
    qq_38156104 2020-08-16 18:08:10
  • jsibdhdbjsninsjs 2021-07-30 10:18:00
  • zhazhiqiang2010 2018-09-12 22:46:56
  • 5星
    5.01MB chenjiehua123456789 2017-01-04 20:17:47
  • Rocky6688 2020-06-15 23:04:01
  • weixin_44751294 2021-06-13 12:14:32
  • Small_Munich 2018-03-13 23:07:58
  • hysteric314 2016-12-29 15:57:31
  • zcg1942 2018-12-05 17:01:06
  • shadow_guo 2017-02-11 12:58:36
  • chengyq116 2019-10-19 09:46:38
  • woduitaodong2698 2019-01-09 12:48:31
  • 5.22MB qq_34423864 2017-10-07 12:03:47
  • qq_41915226 2020-05-22 18:18:36
  • ms961516792 2018-08-01 17:29:43
  • hx921123 2017-02-19 21:09:04
  • 6.76MB mixnavy 2017-05-11 18:02:44
  • weixin_43554136 2018-10-30 09:07:28

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,463
精华内容 985
关键字:

yolo9000