【读点论文】YOLO9000:Better, Faster, Stronger,(yolov2),集合各种方法提高mAP,WordTree数据融合的思路

YOLO9000:Better, Faster, Stronger(yolov2)

  • YOLO9000,一个最先进的实时目标检测系统,可以检测9000多个目标类别。
  • 使用一种新颖的多尺度训练方法,同一个YOLOv2模型可以在不同的大小下运行,在速度和精度之间提供了一个简单的折衷。
  • 利用标记的检测图像来学习精确定位对象,同时使用分类图像来增加词汇表和鲁棒性。
  • 使用我们的数据集组合方法和联合训练算法,对来自ImageNet的9000多个类以及来自COCO的检测数据进行模型训练。
  • 相对于最先进的检测系统,YOLO存在着各种各样的缺点。与快速R-CNN相比,YOLO的错误分析表明,YOLO产生了大量的定位错误。此外,与基于区域建议的方法相比,YOLO的召回率相对较低。

在这里插入图片描述

batch normalization

  • 批量标准化可显著提高收敛性,同时消除对其他形式正则化的需求,批量规范化还有助于规范化模型。

  • 在YOLO中的所有卷积层上添加批量标准化,我们可以使mAP提高2%以上。

  • 批量标准化,可以在不进行过度拟合的情况下从模型中删除缺失。

  • BN和Dropout单独使用都能减少过拟合并加速训练速度,但如果一起使用的话并不会产生1+1>2的效果,相反可能会得到比单独使用更差的效果。

    • 自批量归一化(以正则项的形式来提高基线水平)提出以来,Dropout(缓解了过拟合问题) 似乎就失去了用武之处,流行的深度架构也心照不宣地在批归一化上不采用 Dropout。

    • 理解 Dropout 与 BN 之间冲突的关键是网络状态切换过程中存在神经方差的(neural variance)不一致行为。

    • 试想若有神经响应 X,当网络从训练转为测试时,Dropout 可以通过其随机失活保留率(即 p)来缩放响应,并在学习中改变神经元的方差,而 BN 仍然维持 X 的统计滑动方差。这种方差不匹配可能导致数值不稳定(见下图中的红色曲线)。而随着网络越来越深,最终预测的数值偏差可能会累计,从而降低系统的性能。如果没有 Dropout,那么实际前馈中的神经元方差将与 BN 所累计的滑动方差非常接近(见图 1 中的蓝色曲线),这也保证了其较高的测试准确率。
      如何通过方差偏移理解批归一化与Dropout之间的冲突 | 机器之心 (jiqizhixin.com)

      • 在这里插入图片描述
  • 采用了两种策略来探索如何打破这种局限。一个是在所有 BN 层后使用 Dropout,另一个就是修改 Dropout 的公式让它对方差并不那么敏感,提到的一种高斯Dropout,进一步提出了一个均匀分布Dropout。因为这两种方法都能降低方差偏移的风险,它们大多数情况下都能工作得很好,且能取得额外的提升。

  • dropout

    • 训练时:

      • 随机临时地删除一部分神经元(即每个神经元以一定的概率使得其激活函数的输出为0),这些被删除的神经元的权重要备份起来。
      • 用保留的神经元进行前向传播得到误差,采用反向传播对这些保留的神经元进行参数更新,临时删除的不更新。
      • 恢复被删除的神经元,然后再重复步骤直到训练完成。
    • 测试时:

      • 由于训练时由部分神经元进行前向传播的,测试时采用全部神经元,因此每一个神经单元的权重参数要乘以概率p。
    • dropout为什么能防止过拟合

      • 训练时通过设置有n个节点的隐藏层是否激活,我们可以模拟出

        C

        n

        m

        C_n^m

        Cnm个子模型。

      • 在测试时,通过对子模型进行求平均得到整个模型的预测结果,整个过程相当于bagging,可以减少方差,从而降低过拟合的风险。
      • 不同结构的网络分开训练,再集成到一起共同预测,有点集成学习的味道。
  • Batch normalization

    • 深度网络在采用Mini-Batch SGD训练的过程中,隐藏层激活函数的输入分布变化大,导致模型收敛慢。

    • x

      ~

      =

      γ

      x

      μ

      δ

      2

      +

      ε

      +

      β

      \widetilde{x}=\gamma\frac{x-\mu}{\sqrt{\delta^2+\varepsilon}}+\beta

      x

      =γδ2+ε

      xμ+β

    • 训练时:

      • γ和 β 分别是缩放和平移的可学习的参数,一旦网络训练完成,这两个参数便被固定下来了
      • μ和 δ分别是该batch的均值和标准差
      • ε

        \varepsilon

        ε是人为设置的以防分母为0

    • 测试时:

      • γ和 β 已经是网络的固定参数了,

      • μ和 δ是训练时指数加权滑动平均值:在训练的时候会计算出每一个batch的μ和 δ,然后采用momentum算法来分别计算μ的滑动平均值和 δ的滑动平均值,记录下来作为测试用。m一般取0.99或者0.999,即连乘多个0.99之后,之前的batch影响会变弱。

      • μ

        =

        m

        μ

        p

        r

        e

        +

        (

        1

        m

        )

        μ

        b

        a

        t

        c

        h

        δ

        =

        m

        δ

        p

        r

        e

        +

        (

        1

        m

        )

        δ

        b

        a

        t

        c

        h

        \mu=m*\mu_{pre}+(1-m)*\mu_{batch}\\ \delta=m*\delta_{pre}+(1-m)*\delta_{batch}

        μ=mμpre+(1m)μbatchδ=mδpre+(1m)δbatch

    • Batch Normalization的好处

      • 解决了Internal Covariate Shift的问题:前人采用很小的学习率/非常小心的权重初始化来解决Internal Covariate Shift的问题,BN解决了Internal Covariate Shift问题之后,就可以采用较大的学习率,能更快收敛
      • BN减轻了梯度消失,梯度爆炸问题
      • BN可支持更多的激活函数
      • BN一定程度上增加了泛化能力

High resolution classifier

  • 原始YOLO以224×224的速度训练分类器网络,并将检测分辨率提高到448。
    • 这会导致从分类模型切换到检测模型的时候,模型还要适应图像分辨率的改变。
    • YOLOv2则将预训练分成两步:先用224*224的输入从头开始训练网络,大概160个epoch(表示将所有训练数据循环跑160次),然后再将输入调整到448*448,再训练10个epoch。两步都是在ImageNet数据集上操作。
    • 最后再在检测的数据集上fine-tuning,也就是detection的时候用448*448的图像作为输入就可以顺利过渡了。
  • 高分辨率分类网络使我们的mAP增加了近4%。

Convolutional With Anchor Boxes

  • YOLO使用卷积特征提取器顶部的完全连接层直接预测边界框的坐标

  • YOLOv2借鉴了Faster R-CNN的思想,引入anchor

    • 首先将原网络的全连接层和最后一个pooling层去掉,使得最后的卷积层可以有更高分辨率的特征;
    • 然后缩减网络,用416*416大小的输入代替原来448*448
      • 这样做的原因在于希望得到的特征图都有奇数大小的宽和高,奇数大小的宽和高会使得每个特征图在划分cell的时候就只有一个center cell(比如可以划分成7*7或9*9个cell,center cell只有一个,如果划分成8*8或10*10的,center cell就有4个)。
      • 大的object一般会占据图像的中心,所以希望用一个center cell去预测,而不是4个center cell去预测。
      • YOLOv2通过引入anchor boxes,以输出feature map大小为13*13为例,每个grid cell有5个anchor box的话,一共就是13*13*5个。
      • 实验证明:虽然加入anchor使得MAP值下降了一点(69.5降到69.2),但是提高了recall(81%提高到88%)。
  • R-CNN 采用对区域进行识别的方案

    1. 给定一张输入图片,从图片中提取 2000 个类别独立的候选区域
    2. 对于每个区域利用 CNN 抽取一个固定长度的特征向量
    3. 再对每个区域利用 SVM 进行目标分类
  • 在这里插入图片描述

Dimension Clusters

  • 采用k-means的方式对训练集的bounding boxes做聚类,试图找到合适的anchor box。

    • anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。

    • 传统的K-means聚类方法使用的是欧氏距离函数,也就意味着较大的boxes会比较小的boxes产生更多的error,聚类结果可能会偏离。

      • 采用的评判标准是IOU得分(也就是boxes之间的交集除以并集),这样的话,error就和box的尺度无关了,最终的距离函数为:

      • d

        (

        b

        o

        x

        ,

        c

        e

        n

        t

        r

        o

        i

        d

        )

        =

        1

        I

        O

        U

        (

        b

        o

        x

        ,

        c

        e

        n

        t

        r

        o

        i

        d

        )

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

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

  • VOC和COCO上的Dimension Clusters

    • 在边界框的维度上运行k-means聚类,以获得模型的良好先验。

    • 在这里插入图片描述

    • 左边的图像显示了我们在k的各种选择中得到的平均IOU。k=5在模型的召回率和复杂性之间进行了很好的权衡。

    • 右图显示了VOC和COCO的相对质心。两组先验知识都倾向于更薄、更高的盒子。

Direct location prediction

  • 模型不稳定性,尤其是在早期迭代中。大多数不稳定性来自于预测盒子的(x,y)位置。在region proposal networks中,网络预测值

    t

    x

    t_x

    tx

    t

    y

    t_y

    ty以及(x,y)中心坐标计算如下:

    • x

      =

      (

      t

      x

      w

      a

      )

      +

      x

      a

      y

      =

      (

      t

      y

      h

      a

      )

      +

      y

      a

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

      x=(txwa)+xay=(tyha)+ya

    • tx=1的预测将使框向右移动锚定框的宽度,即tx=−1的预测会将其向左移动相同的量。

    • 采用YOLO方法,预测相对于网格单元位置的位置坐标。这将bounding box真实值限制在0和1之间。使用逻辑激活将网络的预测限制在该范围内。 限制了位置预测,参数化更容易学习,使网络更稳定。

    • 网络在输出特征图中的每个单元预测5个边界框。网络为每个边界框tx、ty、tw、th和to预测5个坐标。如果单元格与图像左上角的偏移量为(cx,cy),且之前的边界框具有宽度和高度pw,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

        (

        o

        b

        j

        e

        c

        t

        )

        I

        O

        U

        (

        b

        ,

        o

        b

        j

        e

        c

        t

        )

        =

        δ

        (

        t

        o

        )

        b_x=\delta(t_x)+c_x\\ b_y=\delta(t_y)+c_y\\ b_w=p_we^{t_w}\\ b_h=p_he^{t_h}\\ P_r(object)*IOU(b,object)=\delta(t_o)

        bx=δ(tx)+cxby=δ(ty)+cybw=pwetwbh=phethPr(object)IOU(b,object)=δ(to)

    • 在这里插入图片描述

    • 首先是cx和cy,表示grid cell与图像左上角的横纵坐标距离,黑色虚线框是bounding box,蓝色矩形框就是预测的结果。

  • 神经网络在特征图(13 *13 )的每个cell上预测5个bounding boxes(聚类得出的值),同时每一个bounding box预测5个值,其中前四个是坐标,第五个是置信度。

Fine-Grained Features

  • faster R-CNN和SSD都在网络中的不同feature map上运行他们的RPN,以获得一系列分辨率。
  • 采用了一种不同的方法,只需添加一个直通层,以26×26的分辨率提供早期层的特征。 这个层的作用就是将前面一层的26*26的feature map和本层的13*13的feature map进行连接,有点像ResNet。
    • 这样做的原因在于虽然13*13的feature map对于预测大的object以及足够了,但是对于预测小的object就不一定有效。
    • 越小的object,经过层层卷积和pooling,可能到最后都不见了,所以通过合并前一层的size大一点的feature map,可以有效检测小的object。

Multi-Scale Training

  • 希望YOLOv2能够在不同大小的图像上运行,因此将其训练到模型中。

  • 不是调整输入图像的大小,而是每隔几次就改变网络。网络每10批随机选择一个新的图像尺寸。

  • 模型以32倍的倍数缩减样本,我们从以下32倍的倍数中得出:{320,352,…,608}。最小选项为320×320,最大选项为608×608。将网络调整到不同维度并继续训练。

  • 这种机制迫使网络学会在各种输入维度上进行良好预测。这意味着同一网络可以预测不同分辨率下的检测。

  • 网络在较小的尺寸下运行更快,因此YOLOv2在速度和准确性之间提供了一个简单的折衷。

    • 在这里插入图片描述
  • YOLOv2比以前的检测方法更快、更准确。它还可以在不同的分辨率下运行,以便在速度和精度之间进行简单的权衡。每个YOLOv2条目实际上是相同的训练模型,具有相同的权重,只是在不同的大小上进行评估。

    • 在这里插入图片描述

YOLOv2比YOLOv1多的技术点

  • 在这里插入图片描述

  • 大多数列出的设计决策导致mAP的显著增加。两个例外是anchor boxes的完全卷积网络和使用new network。在使用new network切割计算时,anchor boxes方法可在不改变feature map的情况下提高召回率33%。

  • YOLOV2与ResNET,faster R-CNN和SSD512等最先进的探测器的2-10倍。

    • 在这里插入图片描述

    • YOLO框架使用基于Googlenet架构的自定义网络,精度比VGG16稍差。YOLO的定制模型获得88.0%的ImageNet,而VGG-16为90.0%。

  • Darknet-19

    • 在这里插入图片描述
    • Yolov2还采用了有着19个Conv 层与5个maxpooling层的darknet-19作为模型的特征提取前端网络。在此网络中引入了BN用于稳定训练,加快收敛,同时防止模型过拟合。
    • 在这里插入图片描述
    • 使用Darknet-19在标准1000类的ImageNet上训练了160次,用的随机梯度下降法,starting learning rate 为0.1,polynomial rate decay 为4,weight decay为0.0005 ,momentum 为0.9。训练的时候仍然使用了很多常见的数据增强方法(data augmentation)
      • 初始的224 * 224训练后,作者把分辨率上调到了448 * 448,然后又训练了10次,学习率调整到了0.001。高分辨率下训练的分类网络在top-1准确率76.5%,top-5准确率93.3%。
    • 分类网络训练完后,就该训练检测网络了,去掉了原网络最后一个卷积层,转而增加了三个3 * 3 * 1024的卷积层,并且在每一个上述卷积层后面跟一个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)策略。
  • 在这里插入图片描述

stronger

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

  • 要检测更多对象,比如从原来的VOC的20种对象,扩展到ImageNet的9000种对象。

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

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

    • 存在的问题:

      • coco数据集和voc数据集的不太兼容性。检测数据集只有通用对象和通用标签,如“狗”或“船”。分类数据集的标签范围更广、更深。ImageNet拥有100多种狗。如果想在两个数据集上进行训练,需要一种连贯的方法来合并这些标签。
      • 大多数分类方法在所有可能的类别中使用softmax层来计算最终概率分布。使用softmax假定类是互斥的。牧羊犬和狗在分类时候是互斥的是我们不愿看到的。
    • 解决方案:可以使用一个多标签模型来组合不假设互斥的数据集。

      • Hierarchical classification(层次分类)

        • https://zhuanlan.zhihu.com/p/47575929
          
        • ImageNet标签来自WordNet,这是一个语言数据库,用于构造概念及其关系。在WordNet中,“Norfolk terrier”和“Yorkshire terrier”都是“terrier”的下位词,terrier是“猎狗”的一种,是“dog”的一种,是“犬科”的一种。

        • WordNet的结构是有向图,而不是树,因为语言很复杂。例如,“狗”既是“犬科动物”的一种,也是“家畜”的一种,它们都是WordNet中的语法集。原文没有使用完整的图结构,而是通过从ImageNet中的概念构建层次树来简化问题。

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

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

            • 为了构建WordTree1k,我们添加了所有中间节点,将标签空间从1000扩展到1369(多出来的是中间对象)。
            • 在这里插入图片描述
        • 大多数ImageNet模型使用一个大型softmax来预测概率分布。使用WordTree,我们对同一下位词执行多个softmax操作。
        1. 检查每一个将用于训练和测试的ImageNet和COCO对象,在WordNet中找到对应的节点,如果该节点到WordTree根节点(physical object)的路径只有一条(大部分对象都只有一条路径),就将该路径添加到WrodTree。
        2. 经过上面操作后,剩下的是存在多条路径的对象。对每个对象,检查其额外路径长度(将其添加到已有的WordTree中所需的路径长度),选择最短的路径添加到WordTree。这样就构造好了整个WordTree。
        • 在这里插入图片描述
    • 分类和检测联合训练

      • 由于ImageNet样本比COCO多得多,所以对COCO样本会多做一些采样(oversampling),适当平衡一下样本数量,使两者样本数量比为4:1。
      • YOLO9000依然采用YOLO2的网络结构,不过5个先验框减少到3个先验框,以减少计算量。假设输入是416*416*3。YOLO2的输出是13*13*5*(4+1+20),现在YOLO9000的输出是13*13*3*(4+1+9418)。
      • 由于对象分类改成WordTree的形式,相应的误差计算也需要一些调整。对一个检测样本,其分类误差只包含该标签节点以及到根节点的所有节点的误差。
        • 比如一个样本的标签是dog,那么dog往上标签都是1,但dog往下就不好设置了。因为这个dog其实必然也是某种具体的dog,假设它是一个Norfolk terrier,那么最符合实际的设置是从Norfolk terrier到根节点的标签都是1。但是因为样本没有告诉我们这是一个Norfolk terrier,只是说一个dog,那么从dog以下的标签就没法确定了。
      • 对于分类样本,则只计算分类误差。YOLO9000总共会输出13*13*3=507个预测框(预测对象),计算它们对样本标签的预测概率,选择概率最大的那个框负责预测该样本的对象,即计算其WrodTree的误差。
    • 预测时如何确定一个WordTree所对应的对象

      • 有标签的样本对应的WordTree中,该对象节点到根节点的所有节点概率都是1,其它节点概率是0。
      • 根据训练标签的设置,其实模型学习的是各节点的条件概率。比如我们看WordTree(上图physical object)中的一小段。假设一个样本标签是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)
      • 为了计算简便,实际中并不计算出所有节点的绝对概率。而是采用一种比较贪婪的算法。从根节点开始向下遍历,对每一个节点,在它的所有子节点中,选择概率最大的那个(一个节点下面的所有子节点是互斥的),一直向下遍历直到某个节点的子节点概率低于设定的阈值(意味着很难确定它的下一层对象到底是哪个),或达到叶子节点,那么该节点就是该WordTree对应的对象
    • WordTree如何表达对象的类别

      • 对象互斥的情况下,用一个n维向量(n是预测对象的类别数)就可以表达一个对象(预测对象的那一维数值接近1,其它维数值接近0)。
      • 合理的向量应该能够体现对象之间的蕴含关系。比如一个样本图像,其标签是是"dog",那么显然dog节点的概率应该是1,然后,dog属于mammal,自然mammal的概率也是1,…一直沿路径向上到根节点physical object,所有经过的节点其概率都是1。
      • 一个WordTree对应且仅对应一个对象,不过该对象节点到根节点的所有节点概率都是1,体现出对象之间的蕴含关系,而其它节点概率是0。
    • 使用WordTree层次结构组合数据集

      • 使用WordNet概念图,构建了视觉概念的层次树。可以通过将数据集中的类映射到树中的synsets来合并数据集。
      • ImageNet的检测任务与COCO共享44个对象类别,这意味着YOLO9000只看到大多数测试图像的分类数据,而不是检测数据。

Conclusion(论文自己表示)

  • 介绍了实时检测系统YOLOv2和YOLO9000。YOLOv2是最先进的,在各种检测数据集上比其他检测系统更快。此外,它可以在各种图像大小下运行,以在速度和精度之间提供平滑的折衷。
  • YOLO9000是一个通过联合优化检测和分类来检测9000多个对象类别的实时框架。使用WordTree结合来自不同来源的数据,并使用我们的联合优化技术在ImageNet和COCO上同时进行培训。YOLO9000是缩小检测和分类之间数据集大小差距的有力一步。

版权声明:本文为CSDN博主「羞儿」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43424450/article/details/122371481

羞儿

我还没有学会写个人说明!

暂无评论

发表评论

相关推荐

YOLOv5论文笔记

1、网络结构图 (1)输入端 :Mosaic数据增强、自适应锚框计算、自适应图片缩放 (2)Backbone :Focus结构,CSP结构 &#x