YoloV2/Yolo9000 论文解读与理解

摘要:

  • YOLO是基于深度学习方法的端到端实时目标检测系统(YOLO:实时快速目标检测)。YOLO的升级版有两种:YOLOv2和YOLO9000。作者采用了一系列的方法优化了YOLO的模型结构,产生了YOLOv2,在快速的同时准确率达到state of the art。然后作者采用wordtree的方法,综合ImageNet数据集和COCO数据集训练YOLO9000,使之可以实时识别超过9000种物品。
  • 使用一种新颖的,多尺度训练方法,这样YOLOv2模型可以以不同的尺寸运行,从而在速度和准确性之间提供了一个简单的折衷。
    在67FPS时,YOLOv2在VOC 2007上获得了76.8 mAP。在40FPS时,YOLOv2获得了78.6 mAP,比同时期的ResNet的Faster R-CNN和SSD等先进方法表现更出色,同时仍然运行速度显著更快。
  • 提出了一种联合训练目标检测与分类的方法。
    使用这种方法,在COCO检测数据集和ImageNet分类数据集上同时训练YOLO9000。联合训练允许YOLO9000预测未标注的检测数据目标类别的检测结果。在ImageNet检测任务上验证了,YOLO9000在ImageNet检测验证集上获得19.7 mAP,尽管200个类别中只有44个具有检测数据。在没有COCO的156个类别上,YOLO9000获得16.0 mAP。但YOLO可以检测到200多个类别;它预测超过9000个不同目标类别的检测结果。并且它仍然能实时运行。
    1. 引言
    通用目的的目标检测应该快速,准确,并且能够识别各种各样的目标。自从引入神经网络以来,检测框架变得越来越快速和准确。但是,大多数检测方法仍然只能检测一小部分目标(对于多种类的目标效果并不好)。
    与分类和标记等其他任务的数据集相比,目前目标检测数据集是有限的。最常见的检测数据集包含成千上万到数十万张,具有成百上千个标签的图像。分类数据集有数以百万计的图像,数十或数十万个类别。
    我们希望目标检测能够像目标分类那样,有大量的标注数据。但是,标注检测图像要比标注分类或贴标签要昂贵得多(标签通常是用户免费提供的)。因此,不太可能在近期内看到与分类数据集相同规模的检测数据集。
    Yolo9000提出了一种新的方法,利用已经拥有的大量分类数据,并用它来扩大当前检测系统的数据集的范围。它使用目标分类的分层视图,将不同的数据集组合在一起。
    Yolo9000提出了一种联合训练算法,使我们能够在检测和分类数据上训练目标检测模型。这个方法利用标记的检测图像来学习物体的精确定位,同时使用分类图像来增加词表和鲁棒性。
    使用这种方法我们训练YOLO9000,一个实时的目标检测器,可以检测超过9000种不同的目标类别。首先,我们改进YOLO基础检测系统,产生最先进的实时检测器YOLOv2。然后利用我们的数据集组合方法和联合训练算法对来自ImageNet的9000多个类别以及COCO的检测数据训练了一个模型。

2. 更好
与最先进的检测系统相比,YOLO有许多缺点。YOLO与Fast R-CNN相比的误差分析表明,YOLO造成了大量的定位误差。此外,与基于区域提出的方法相比,YOLO召回率相对较低。因此,我们主要侧重于提高召回率和改进定位,同时保持分类准确性。
计算机视觉一般趋向于更大,更深的网络。更好的性能通常取决于训练更大的网络或将多个模型组合在一起。但是,在YOLOv2中,我们需要一个更精确的检测器,它仍然很快。我们不是扩大我们的网络,而是简化网络,然后让表示更容易学习。我们将过去的工作与我们自己的新概念汇集起来,以提高YOLO的性能。表2列出了结果总结。
在这里插入图片描述表2:从YOLO到YOLOv2的路径。列出的大部分设选项都会导致mAP的显著增加。有两个例外是切换到具有Anchor Box的一个全卷积网络和使用新网络。切换到Anchor Box风格的方法增加了召回率,而不改变mAP,而使用新网络会削减33%的计算量。

  • Batch Normalization
    批标准化导致收敛性的显著改善,同时消除了对其他形式正则化的需求。通过在YOLO的所有卷积层上添加批标准化,我们在mAP中获得了超过2%的改进。批标准化也有助于模型正则化。通过批标准化,我们可以从模型中去除dropout机制,但也不会不会过拟合。

  • 高分辨率分类器
    所有最先进的检测方法都使用在ImageNet上预训练的分类器。从AlexNet开始,大多数分类器对小于256×256的输入图像进行操作。原来的YOLO以224×224的分辨率训练分类器网络,并将分辨率提高到448进行检测。这意味着网络必须同时切换到学习目标检测和调整到新的输入分辨率。
    对于YOLOv2,我们首先ImageNet上以448×448的分辨率对分类网络进行10个迭代周期的微调。这给了网络时间,来调整其滤波器以便更好地处理更高分辨率的输入。然后,我们在检测上微调得到的网络。这个高分辨率分类网络使我们增加了近4%的mAP。

  • 具有Anchor Box的卷积
    YOLO直接使用卷积特征提取器顶部的全连接层来预测边界框的坐标。Faster R-CNN使用手动选择的先验来预测边界框而不是直接预测坐标。Faster R-CNN中的区域提出网络(RPN)仅使用卷积层来预测锚盒的偏移和置信度。由于预测层是卷积的,所以RPN在特征映射的每个位置上预测这些偏移。预测偏移而不是坐标简化了问题,并且使网络更容易学习。
    作者去除了YOLO的全连接层,采用固定框(anchor boxes)来预测bounding boxes。首先,去除了一个pooling层来提高卷积层输出分辨率。然后,修改网络输入尺寸:由448×448改为416,使特征图只有一个中心。物品(特别是大的物品)更有可能出现在图像中心。YOLO的卷积层下采样率为32,因此输入尺寸变为416,输出尺寸为13×13。
    采用anchor boxes,提升了精确度。YOLO每张图片预测98个boxes,但是采用anchor boxes,每张图片可以预测超过1000个boxes。YOLO模型精确度为69.5mAP,recall为81%;采用anchor boxes方法后,结果为69.2mAP,recall为88%。
    维度聚类
    当锚盒与YOLO一起使用时,我们遇到了两个问题。首先是边界框尺寸是手工挑选的。网络可以学习适当调整边界框,但如果我们为网络选择更好的先验,我们可以使网络更容易学习它以便预测好的检测。
    我们不用手工选择先验,而是在训练集边界框上运行k-means聚类,自动找到好的先验。如果我们使用具有欧几里得距离的标准k-means,那么较大的边界框比较小的边界框产生更多的误差。然而,我们真正想要的是导致好的IOU分数的先验,这是独立于边界框大小的。因此,对于我们的距离度量,我们使用:
    d (  box, centroid  ) = 1 − I O U (  box, centroid  ) d(\text { box, centroid })=1-I O U(\text { box, centroid }) d( box, centroid )=1IOU( box, centroid )
    我们运行各种k值的k-means,并画出平均IOU与最接近的几何中心,见图2。我们选择k=5作为模型复杂性和高召回率之间的良好折衷。聚类中心与手工挑选的锚盒明显不同。有更短更宽的边界框和更高更细的边界框。
    在这里插入图片描述直接位置预测(Direct location prediction)
    当YOLO使用锚盒(Anchor Box)时,我们会遇到第二个问题:模型不稳定,特别是在早期的迭代过程中。大部分的不稳定来自预测边界框的 ( x , y ) (x,y) (x,y)位置。在区域提出网络中,网络预测值 t x t_x tx t y t_y ty ( x , y ) (x,y) (x,y)中心坐标计算如下:
    x = ( t x ∗ w a ) − x a y = ( t y ∗ h a ) − y a \begin{array}{l} x=\left(t_{x} * w_{a}\right)-x_{a} \\ y=\left(t_{y} * h_{a}\right)-y_{a} \end{array} x=(txwa)xay=(tyha)ya
    例如,预测tx=1会将边界框向右移动锚盒的宽度,预测tx=−1会将其向左移动相同的宽度。
    这个公式是不受限制的,所以任何锚盒都可以在图像任一点结束,而不管在哪个位置预测该边界框。随机初始化模型需要很长时间才能稳定以预测合理的偏移量。
    网络预测输出特征映射中每个单元的5个边界框。网络预测每个边界框的5个坐标, t x t_x tx t y t_y ty t w t_w tw t h t_h th t o t_o to。如果单元从图像的左上角偏移了 ( c x , c y ) (c_x,c_y) (cx,cy),并且边界框先验的宽度和高度为 p w p_w pw p h p_h ph,那么预测对应:
    b x = σ ( t x ) + c x b y = σ ( t y ) + c y b w = p w e t w b h = p h e t h P r (  object  ) ∗ I O U ( b ,  object  ) = σ ( t o ) \begin{array}{c} b_{x}=\sigma\left(t_{x}\right)+c_{x} \\ b_{y}=\sigma\left(t_{y}\right)+c_{y} \\ b_{w}=p_{w} e^{t_{w}} \\ b_{h}=p_{h} e^{t_{h}} \\ P r(\text { object }) * I O U(b, \text { object })=\sigma\left(t_{o}\right) \end{array} bx=σ(tx)+cxby=σ(ty)+cybw=pwetwbh=phethPr( object )IOU(b, object )=σ(to)
    在这里插入图片描述图3:具有维度先验和位置预测的边界框。我们预测边界框的宽度和高度作为聚类中心的偏移量。我们使用sigmoid函数预测边界框相对于滤波器应用位置的中心坐标。
    由于我们限制位置预测参数化更容易学习,使网络更稳定。使用维度聚类以及直接预测边界框中心位置的方式比使用锚盒的版本将YOLO提高了近5%。
    细粒度功能(Fine-Grained Features)
    改进后的YOLO对13×13的feature map进行目标检测。更精确的特征(finer grained features)可以提高对于小目标的检测。作者向网络加入passtrough层以增加特征。passthrough类似于ResNet,将高分辨率特征和低分辨率特征结合,使26×26×512的特征图转化为13×13×2048的特征图。该改进增加了1%的性能。
    多尺度训练(Multi-Scale Training)
    最初的YOLO输入尺寸为448×448,加入anchor boxes后,输入尺寸为416×416。模型只包含卷积层和pooling 层,因此可以随时改变输入尺寸。

作者在训练时,每隔几轮便改变模型输入尺寸,以使模型对不同尺寸图像具有鲁棒性。每个10batches,模型随机选择一种新的输入图像尺寸(320,352,…608,32的倍数,因为模型下采样因子为32),改变模型输入尺寸,继续训练。

该训练规则强迫模型取适应不同的输入分辨率。模型对于小尺寸的输入处理速度更快,因此YOLOv2可以按照需求调节速度和准确率。在低分辨率情况下(288×288),YOLOv2可以在保持和Fast R-CNN持平的准确率的情况下,处理速度可以达到90FPS。在高分辨率情况下,YOLOv2在VOC2007数据集上准确率可以达到state of the art(78.6mAP),如表2-2所示。
在这里插入图片描述表3:PASCAL VOC 2007的检测框架。YOLOv2比先前的检测方法更快,更准确。它也可以以不同的分辨率运行,以便在速度和准确性之间进行简单折衷。每个YOLOv2条目实际上是具有相同权重的相同训练模型,只是以不同的大小进行评估。所有的时间信息都是在Geforce GTX Titan X(原始的,而不是Pascal模型)上测得的。
在这里插入图片描述图4:VOC 2007上的准确性与速度。
进一步实验
作者在VOC 2012上训练YOLOv2进行检测。表4显示了YOLOv2与其他最先进的检测系统的比较性能。YOLOv2取得了73.4 mAP同时运行速度比竞争方法快的多。作者在COCO上进行了训练,并在表5中与其他方法进行比较。在VOC度量(IOU = 0.5)上,YOLOv2得到44.0 mAP,与SSD和Faster R-CNN相当。
在这里插入图片描述表4:PASCAL VOC2012 test上的检测结果。YOLOv2与最先进的检测器如具有ResNet的Faster R-CNN、SSD512在标准数据集上运行,YOLOv2比它们快2-10倍。

在这里插入图片描述表5:在COCO test-dev2015上的结果。表参考[11]

检测更加快速(faster)
大部分检测框架是基于VGG-16作为特征提取网络,但是VGG-16比较复杂,耗费计算量大。YOLO框架使用了类似googlenet的网络结构,计算量比VGG-16小,准确率比VGG16略低。

  • Darknet-19
    作者设计了一个新的分类网络(Darknet-19)来作为YOLOv2的基础模型。Darknet-19模型结构如表3-1所示。
    在这里插入图片描述

  • 分类任务训练
    作者采用ImageNet1000类数据集来训练分类模型。训练过程中,采用了 random crops, rotations, and hue, saturation, and exposure shifts等data augmentation方法。预训练后,作者采用高分辨率图像(448×448)对模型进行finetune。

  • 检测任务训练
    作者将分类模型的最后一层卷积层去除,替换为三层卷积层(3×3,1024 filters),最后一层为1×1卷积层,filters数目为需要检测的数目。对于VOC数据集,我们需要预测5个boxes,每个boxes包含5个适应度值,每个boxes预测20类别。因此,输出为125(520+55) filters。最后还加入了passthough 层。

stronger
作者提出了将分类数据和检测数据综合的联合训练机制。该机制使用目标检测标签的数据训练模型学习定位目标和检测部分类别的目标;再使用分类标签的数据取扩展模型对多类别的识别能力。在训练的过程中,混合目标检测和分类的数据集。当网络接受目标检测的训练数据,反馈网络采用YOLOv2 loss函数;当网络接受分类训练数据,反馈网络只更新部分网络参数。

这类训练方法有一定的难度。目标识别数据集仅包含常见目标和标签(比如狗,船);分类数据集包含更广和更深的标签。比如狗,ImageNet上包含超过100种的狗的类别。如果要联合训练,需要将这些标签进行合并。

大部分分类方法采用softmax输出所有类别的概率。采用softmax的前提假设是类别之间不相互包含(比如,犬和牧羊犬就是相互包含)。因此,我们需要一个多标签的模型来综合数据集,使类别之间不相互包含。

  • Hierarchical classification(多层分类)
    ImageNet的数据标签来源于WordNet,具有一定层次结构。作者根据WordNet建立了ImageNet标签的树(WordTree)。作者采用标签树训练了Darknet-19,结果如图所示。
    在这里插入图片描述
  • 采用Wordtree综合数据集

作者采用wordtree综合ImageNet和COCO数据集,如图所示。
在这里插入图片描述

  • 联合分类和检测
    作者采用综合数据集训练了YOLO9000,结果如图所示.
    YOLO9000测试结果
    在这里插入图片描述

5 结论

作者通过对YOLO网络结构和训练方法的改进,提出了YOLOv2和YOLO9000两种实时目标检测系统。YOLOv2在YOLO的基础上进行了一系列的改进,在快速的同时达到state of the art。同时,YOLOv2可以适应不同的输入尺寸,根据需要调整检测准确率和检测速度(值得参考)。作者综合了ImageNet数据集和COCO数据集,采用联合训练的方式训练,使该系统可以识别超过9000种物品。除此之外,作者提出的WordTree可以综合多种数据集 的方法可以应用于其它计算机数觉任务中。

参考文献:
https://zhuanlan.zhihu.com/p/25052190

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值