zoukankan      html  css  js  c++  java
  • Faster rcnn详解

    转载自:https://blog.csdn.net/zziahgf/article/details/7931127

    原文: Faster R-CNN: Down the rabbit hole of modern object detection - 2018.01.18
    作者:Javier Rey

    Object detection: an overview in the age of Deep Learning 已经对基于深度学习的目标检测进行了概述. 推荐先进行阅读.

    通过对 Faster R-CNN 及相关论文的阅读理解,以深入理解了其工作方式以及具体实现.

    Luminoth 上对 Faster R-CNN 进行了实现,Luminoth 是基于 TensorFlow 的计算机视觉工具包,其易于模型训练与使用. Luminoth 已经引起了广泛的关注,ODSC EuropeODSC West 作了相关成果分享.

    因此,这里对 Faster R-CNN 的所有细节进行总结,以供有兴趣的读者作为参考.

    目标检测的一般结构:

    [From Deep Residual Networks - ICML2016 Tourial]

    1. 背景

    Faster R-CNN 发表于 NIPS 2015,其后出现了很多改进版本,后面会进行介绍.

    R-CNN - Rich feature hierarchies for accurate object detection and semantic segmentation 是 Faster R-CNN 的启发版本. R-CNN 是采用 Selective Search 算法来提取(propose)可能的 RoIs(regions of interest) 区域,然后对每个提取区域采用标准 CNN 进行分类.

    出现于 2015 年早期的 Fast R-CNN 是 R-CNN 的改进,其采用兴趣区域池化(Region of Interest Pooling,RoI Pooling) 来共享计算量较大的部分,提高模型的效率.

    Faster R-CNN 随后被提出,其是第一个完全可微分的模型. Faster R-CNN 是 R-CNN 论文的第三个版本.

    R-CNNFast R-CNNFaster R-CNN 作者都有 Ross Girshick.

    2. 网络结构

    Faster R-CNN 的结构是复杂的,因为其有几个移动部件. 这里先对整体框架宏观介绍,然后再对每个部分的细节分析.

    问题描述:

    针对一张图片,需要获得的输出有:

    • 边界框(bounding boxes) 列表;
    • 每个边界框的类别标签;
    • 每个边界框和类别标签的概率.

    Figure 1. Faster R-CNN 结构

    首先,输入图片表示为 Height × Width × Depth 的张量(多维数组)形式,经过预训练 CNN 模型的处理,得到卷积特征图(conv feature map). 即,将 CNN 作为特征提取器,送入下一个部分.

    这种技术在迁移学习(Transfer Learning)中比较普遍,尤其是,采用在大规模数据集训练的网络权重,来对小规模数据集训练分类器. 后面会详细介绍.

    然后,RPN(Region Propose Network) 对提取的卷积特征图进行处理. RPN 用于寻找可能包含 objects 的预定义数量的区域(regions,边界框).

    基于深度学习的目标检测中,可能最难的问题就是生成长度不定(variable-length)的边界框列表. 在构建深度神经网络时,最后的网络输出一般是固定尺寸的张量输出(采用RNN的除外). 例如,在图片分类中,网络输出是 (N, ) 的张量,N 是类别标签数,张量的每个位置的标量值表示图片是类别 labelilabelilabelilabelilabeli { label_i }Δcenterx,Δcentery,Δwidth,Δheight.

    Figure 9. R-CNN 结构

    6.1. 训练和目标

    R-CNN 的目标基本上是与 RPN 目标的计算是一致的,但需要考虑不同的可能的 object 类别 classes.

    根据 proposals 和 ground-truth boxes,计算其 IoU.

    与任何一个 ground-truth box 的 IoU 大于 0.5 的 proposals 被设为正确的 boxes. IoU 在 0.1 到 0.5 之间时设为 background.

    与 RPN 中目标组装相关,这里忽略没有任何交叉的 proposals. 这是因为,在此阶段,假设已经获得良好的 proposals,主要关注于解决难例. 当然,所有的这些超参数都是可以用于调整以更好的拟合 objects.

    边界框回归的目标计算的是 proposal 与其对应的 ground-truth间的偏移量,只对基于 IoU 阈值设定类别class 后的 proposals 进行计算.

    随机采用一个平衡化的 mini-batch=64,其中,25% 的 foreground proposals(具有类别class) 和 75% 的background proposals.

    类似于 RPNs 的 losses,对于选定的 proposals,分类 loss 采用 multiclass entropy loss;对于 25% 的 foreground proposals 采用 SmoothL1 loss 计算其与 groundtruth box 的匹配.

    由于 R-CNN 全连接网络对每个类别class 仅输出一个预测值,当计算边框回归loss 时需谨慎. 当计算 loss 时,只需考虑正确的类别.

    6.2. 后处理

    类似于 RPN,R-CNN 最终输出一堆带有类别 class 的objects,在返回结果前,再进一步进行处理.

    为了调整边界框,需要考虑概率最大的类别的 proposals. 忽略概率最大值为 background class 的proposals.

    当得到最终的 objects 时,并忽略被预测为 background 的结果,采用 class-based NMS. 主要是通过对 objects 根据类别class 分组,然后根据概率排序,并对每个独立的分组采用 NMS 处理,最后再放在一起.

    最终得到的 objects 列表,仍可继续通过设定概率阈值的方式,来限制每个类的 objects 数量.

    7. Faster R-CNN 训练

    Faster R-CNN 在论文中是采用分步 multi-step 方法,对每个模块分别训练再合并训练的权重. 自此,End-to-end 的联合训练被发现能够得到更好的结果.

    当将完整的模型合并后,得到 4 个不同的 losses,2 个用于 RPN,2 个用于 R-CNN. RPN 和 R-CNN 的base基础网络可以是可训练(fine-tune)的,也可以是不能训练的.

    base基础网络的训练与否,取决于待学习的objects与可用的计算力. 如果新数据与 base基础网络训练的原始数据集相似,则不必进行训练,除非是想尝试其不同的表现. base基础网络的训练是比较时间与硬件消耗较高,需要适应梯度计算.

    4 种不同的 losses 以加权和的形式组织. 可以根据需要对分类 loss 和回归 loss 设置权重,或者对 R-CNN 和 RPNs 设置不同权重.

    采用 SGD 训练,momentum=0.9. 学习率初始值为 0.001,50K 次迭代后衰减为 0.0001. 这是一组常用参数设置

    采用 Luminoth 训练时,直接采用默认值开始.

    8. 评价 Evaluation

    评价准则:指定 IoU 阈值对应的 Mean Average Precision (mAP),如 mAP@0.5.

    mAP 来自信息检索,常用与计算 ranking 问题的误差计算,以及评估目标检测结果.

    9. 总结

    至此,对 Faster R-CNN 的处理方式有了清晰的理解,可以根据实际应用场合来做一些应用.

    如果想进一步深入理解,可以参考 Luminoth Faster R-CNN 实现.

    Faster R-CNN 可以用于解决复杂的计算机视觉问题,并取得很好的效果. 虽然这里模型是目标检测,但对于语义分割,3D目标检测等,都可以基于以上模型. 或借鉴于 RPN,或借鉴于 R-CNN,或两者都有. 因此,能够深度理解其工作原理,对于更好的解决其它问题很有帮助.

    Related

    [1] - 知乎 - Faster R-CNN

    [2] - 知乎 - 原始图片中的ROI如何映射到到feature map?

    [3] - 论文阅读学习 - Faster R-CNN

    [4] - 论文阅读学习 - Fast R-CNN

    [5] - Caffe源码 - RoI Pooling 层

    天上我才必有用,千金散尽还复来!
  • 相关阅读:
    为什么大多Virtual Globe程序纵向旋转效率比较低
    惠普卖印刷服务 GIS卖什么?
    OpenLayers的新功能:矢量支持
    Google部分开源GMap API
    为OpenLayers 2.3添加Overview窗口
    从Grid控件到GIS软件
    GIS(数据)浏览器的点点滴滴
    ArcGIS 9.3和ArcGIS 10,一点感想
    关注:Pitney Bowes以4.08亿美金收购Mapinfo
    ArcGIS Server安装的几个问题
  • 原文地址:https://www.cnblogs.com/lutaishi/p/13436324.html
Copyright © 2011-2022 走看看