【论文阅读】YOLO系列论文:YOLO v2

论文:YOLO9000: Better, Faster, Stronger

https://arxiv.org/abs/1612.08242

代码:YOLO: Real-Time Object Detection

作者:Joseph Redmon, Ali Farhadi

发布时间 :CVPR, 2016

优缺点/总结

优点

  • 在V1基础上,预测更准确,速度更快,识别对象更多(到9000种)
  • 联合训练算法
  • 引入Anchor和使用K-means聚类,提高了Recall
  • 引入特征融合模块(passthrouch),融合细粒度特征
  • 引入BN,加速网络收敛;约束输出范围,训练更稳定

缺点

  • 只是单个检测头,小目标识别还不太好
  • 损失函数可持续优化

模型的改进

1、BN(Batch Normalization)

  • 原因:CNN在训练过程中网络每层输入的分布一直在改变, 会使训练过程难度加大
  • 方法:normalize每层的输入,在每一个卷积层后激活函数之前添加batch normalization;同时也有助于规范化模型,可以在舍弃dropout优化后依然不会过拟合。

2、High Resolution Classifier

  • 原因:目前的目标检测方法中,基本上都会使用ImageNet预训练过的模型(classifier)来提取特征,如果用的是AlexNet网络,那么输入图片会被resize到不足256 * 256,导致分辨率不够高,给检测带来困难。
  • 方法:把分辨率直接提升到了448 * 448,在原有网络模型上进行fine tune

3、Convolutional With Anchor Boxes

  • 原因:之前的YOLO利用全连接层的数据完成边框的预测,导致丢失较多的空间信息,定位不准。
  • 方法:引入anchor boxes来预测bounding boxes
    • 去掉了后面的一个池化层以确保输出的卷积特征图有更高的分辨率
    • 通过缩减网络,让图片输入分辨率为416 * 416,这一步的目的是为了让后面产生的卷积特征图宽高都为奇数,这样就可以产生一个center cell。
    • 作者认为大物体通常占据了图像的中间位置, 就可以只用中心的一个cell来预测这些物体的位置,否则就要用中间的4个cell来进行预测,这个技巧可稍稍提升效率。
    • 最后,YOLOv2使用了卷积层降采样(factor为32),使得输入卷积网络的416 * 416图片最终得到13 * 13的卷积特征图(416/32=13)。

4、Dimension Clusters(维度聚类)

  • 原因:使用anchor boxes存在的问题:anchor boxes的宽高维度往往是精选的先验框(hand-picked priors),虽说在训练过程中网络也会学习调整boxes的宽高维度,最终得到准确的bounding boxes。但是,如果一开始就选择了更好的、更有代表性的先验boxes维度,那么网络就更容易学到准确的预测位置。
  • 方法:作者使用了K-means聚类方法类训练bounding boxes,可以自动找到更好的boxes宽高维度。作者采用的评判标准是IOU得分,使error与box的尺度无关,最终的距离函数为:

5、Direct location prediction(直接位置预测)

  • 原因:使用anchor box存在的问题:模型不稳定,尤其是在早期迭代的时候。大部分的不稳定现象出现在预测box的 (x,y)坐标上。在区域建议网络中,预测 (x,y)以及正在上传…重新上传取消使用的是如下公式:

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

  • 方法:作者没有采用预测直接的offset的方法,而使用了预测相对于grid cell的坐标位置的办法,作者又把ground truth限制在了0到1之间,利用logistic回归函数来进行这一限制。

6、Fine-Grained Features(细粒度特征)

  • 原因:上述网络上的修改使YOLO最终在13 * 13的特征图上进行预测,虽然这足以胜任大尺度物体的检测,但是用上细粒度特征的话,这可能对小尺度的物体检测有帮助。
  • 方法:简单添加了一个转移层( passthrough layer),这一层要把浅层特征图(分辨率为26 * 26,是底层分辨率4倍)连接到深层特征图。
    • 这个转移层也就是把高低两种分辨率的特征图做了一次连结,连接方式是叠加特征到不同的通道而不是空间位置,类似于Resnet中的identity mappings。

    • 这个方法把26 * 26 * 512的特征图连接到了13 * 13 * 2048的特征图,这个特征图与原来的特征相连接。
    • YOLO的检测器使用的就是经过扩张的特征图,它可以拥有更好的细粒度特征,使得模型的性能获得了1%的提升。

7、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主要提升原本yolo算法的两个缺点:定位不准确和基于region proposal的方法相比召回率较低

模型

结构

网络部分(Darknet-19)

YOLOv2使用了一个新的分类网络作为特征提取部分,在每一次池化操作后把通道数翻倍。借鉴了network in network的思想,网络使用了全局平均池化(global average pooling),把1 * 1的卷积核置于3 * 3的卷积核之间,用来压缩特征。也用了batch normalization(前面介绍过)稳定模型训练。

其包含19个卷积层、5个最大值池化层(maxpooling layers ),下图展示网络具体结构。Darknet-19运算次数为55.8亿次,imagenet图片分类top-1准确率72.9%,top-5准确率91.2%。

训练阶段

1、预训练 - 训练分类网络(Training for classification)

  • 采用随机梯度下降法SGD,在 ImageNet-1000分类数据集 上训练了160个epochs,参数设定:
  • 初始学习率 - starting learning rate:0.1
  • 多项式速率衰减 - polynomial rate decay:4的幂次
  • 权值衰减 - weight decay:0.0005
  • 动量 - momentum:0.9

2、数据增广方法(Data augmentation)

  • 采用了常见的data augmentation,包括:
  • 随机裁剪、旋转 - random crops、rotations
  • 色调、饱和度、曝光偏移 - hue、saturation、exposure shifts

3、多分辨率训练

  • 通过初始的224 * 224训练后,把分辨率上调到了448 * 448,同样的参数又训练了10个epochs,然后将学习率调整到了0.001。

4、训练检测网络 - Training for detection

  • 把分类网络改成检测网络,去掉原网络最后一个卷积层,增加了三个 3 * 3 (1024 filters)的卷积层,并且在每一个卷积层后面跟一个1 * 1的卷积层,输出个数是检测所需要的数量。
  • 初始学习率为0.001,训练了160个epochs(划分为60 | 10 | 90),权值衰减 与 momentum参数与前面一样。

Tricks

1、交叉数据集训练

通过ImageNet训练分类,COCO和VOC数据集来训练检测,这是一个很有价值的思路,可以让我们在公网上达到比较优的效果。 通过将两个数据集混合训练,如果遇到来自分类集的图片则只计算分类的Loss,遇到来自检测集的图片则计算完整的Loss。

  • 构造multi-label树形结构(分层树)完成label的匹配
    • 遍历Imagenet的label,然后在WordNet中寻找该label到根节点(指向一个物理对象)的路径;
    • 如果路径直有一条,那么就将该路径直接加入到分层树结构中;
    • 否则,从剩余的路径中选择一条最短路径,加入到分层树。

    • 分类时的概率计算借用了决策树思想,某个节点的概率值等于 该节点到根节点的所有条件概率之积。
    • 另外,softmax操作也同时应该采用分组操作

Prediction

检测网络

作者去掉了原网络最后一个卷积层,转而增加了三个3 * 3 * 1024的卷积层,并且在每一个上述卷积层后面跟一个1 * 1的卷积层,输出维度是检测所需的数量。对于VOC数据集,预测5种boxes大小,每个box包含5个坐标值和20个类别,所以总共是5 * (5+20)= 125个输出维度。同时也添加了转移层(passthrough layer ),从最后那个3 * 3 * 512的卷积层连到倒数第二层,使模型有了细粒度特征。

Objective Function/Loss Function

在计算boxes的w和h误差时,YOLOv1中采用的是平方根以降低boxes的大小对误差的影响,而YOLOv2是直接计算,但是根据ground truth的大小对权重系数进行修正,这样对于尺度较小的其权重系数会更大一些,可以放大误差,起到和YOLOv1计算平方根相似的效果。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值