转载自:http://blog.sina.com.cn/s/blog_9ae57c020102vopp.html

先截个图,这就是RCNN的原理图。

该文是由UC-Berkeley(加利福尼亚大学伯克利分校)发表的。说明下RCNN的意思。CNN也就是众多周知的convolutional neural network, R是region的缩写,意为对图像进行局部区域的处理。 该文的主要亮点在于:,一是利用的region proposals对物体探测中位置信息的精确处理,二是利用监督式预训练和主域特殊化的微调方法,代替了传统的非监督式预训练和监督式微调,使得MAP(mean average precision )得到大幅提升。现在来介绍原理图的具体实现。

由于在深度CNN中,FC(full-connected)层的输入是需要定的size的,所以对输入图像的大小需要做预处理以满足这一要求。本文中采取的是wrap方案。生成类别独立的region proposals 有许多可选方法,该文采取了selective search方案。在image中取出大约有2000个region proposals, 他们的维数都是4096维。之前提到的wrap接着对region proposals进行固定size的处理。接着通过CNN进行特征提取,然后再用这些特征训练SVM分类/预测器。在原理图实现中需要注意有以下几点:

1) selective search提取region proposals时,由于它对scale是敏感的,所以选取出来的region proposals的个数就会发生变化,为了使得region proposals的个数一定,在selective search之前还需要进行resize的处理。

2)原始图像进行wrap处理时,固定大小的选择,一般是227*227;

3)由于训练集庞大,分类器优化开销很大,该文采用了标准的hard negative mining method方法提高了存储利用率;

4)分类器采用的是非线性核的SV;

5)为了强化定位,引入Bounding-Box;

该文算是诸多文章优势的集成体现。它达到的MAP也再次刷新了记录:在PASCAL VOC 2010上,其MAP达到了53.7%;在ILSVRC2013 detection dataset达到了31.4%

但一如文章中提到的,该方法的主要缺陷在于计算的时间成本很大,根本达不到real-time的要求。原因也在于region proposals处理中所固有的缺陷:CNN需要对每个region proposals进行单独的特征提取,这是十分耗时的。同时在进入CNN之前的wrap处理也是存在问题的,这种预处理会使得图像失真,部分信息丢失。

于是MSRA(微软亚洲研究院)的何凯明等人提出了SPP-net。

SPP-net

还是先贴上图。首先需要声明的是这篇paper仍有些地方没搞明白(上边的RCNN虽然算是吧啦完了,但难免存在理解偏差,望大牛们多多指教。)

首先,我们看看截图二,很清楚的看到该文将crop/wrap这一预处理方法去掉了,同时在卷积层后加上了SPP。那我们就从这里开始谈起。

Crop/wrap,顾名思义就是对图像进行分割和变形。这两种方法都存在着丢失或者扭曲原始图像信息的缺陷。这样CNN获取的特征也就受到了限制,从而导致后续分类/预测的泛化能力不够。需要略作解释的是crop/wrap处理的充分性是由于FC层固有特性决定的,即FC层的输入必须固定大小。该文亮点在于,将这一固定大小的处理放在特征提取之后。这样原始图像得到保护,特征提取更加的充分,然后再利用该文中提出的SPP代替最后一个卷积层的max-pooling层,完成大小固定的处理。该文主要亮点如下:

1)对输入图像尺度无限制,同时输出的是定长特征,但运用滑动窗口的pooling技术就不能;

2) SPP可运用不同大小的pooling窗口,但CNN只能是单一的窗口;

3)SPP可以从尺度变化中提取特征;

4)大大提高了图像处理速度,24-102*faster than the R-CNN method;

接下来就来看看SPP到底是什么。上边已经谈到,SPP是代替了传统CNN中的pool5层,所以它也是一种pooling方法。同时,传统CNN中pooling层的滑动窗口是一定的,但在SPP中可以看到,它的pooling层是分层的,正如SPP自身的含义——金字塔式池化一样,它每层pooling  bins的大小是可变的,它的大小是个输入图像的大小成比例的;同时pooling bins的个数是确定的,这就相当于多尺度的pooling,相较于传统CNN中单尺度的pooling,肯定存在更多的优势。

SPP-net在物体探测中的效果也非常好。在RCNN中是对上千个region proposals分别进行CNN特征提取,而在SPP-net中则是对原始图像进行CNN特征提取,然后再对region 所对应的window利用SPP。这里需要理解的是,对图像的分割操作仍然是需要的,只是SPP中并不是立即对每个region直接特征抽取,而是将“对每个region的操作”放在了SPP这一过程中,即RCNN是多个regions+多次CNN+单个pooling,而SPP则是单个图像+单次CNN+多个region+多个pooling。

尽管如此,SPP-net仍存在缺陷:一是SPP-net虽然极大的提高了RCNN的速度,但和RCNN一样,他们的训练过程都是一个多阶段过程:即包含着特征抽取,网络微调,分类器SVM的训练以及最后的对BB回归器的匹配。二是SPP-net中用到的微调技术只能更新FC层,这无疑限制了深度CNN的潜力。

Fast-RCNN

在此基础上,MSRA又提出了Fast-RCNN。相较与RCNN和SPP-net,它的亮点在于:

1)MAP相较于RCNN也有很大的提高;

2)训练过程通过运用多任务损失,实现单步骤完成;

3)在训练过程中所有层都可以得到更新;

4)不再需要磁盘存储器作为特征缓存;

5)比RCNN的训练时间快9倍,测试时间快213倍,在 PASCAL VOC 2012上获得MAP也更高.。和SPPnet相比,训练时间快3倍,测试时间快10倍,MAP也有提升。

从下图可以看到如下变化:一是输入从单输入变为双输入;二是引入ROI pooling层(region of interest,它是只含一层的SPP);三是在FC层后有两个输入。接下看看这些变化的具体实现和影响。

  上述的变化都是在训练过程做的改变,在微调阶段曾谈及SPP-net只能更新FC层,这是因为卷积特征是线下计算的,从而无法再微调阶段反向传播误差。而在fast-RCNN中则是通过image-centric sampling提高了卷积层特征抽取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。
      上述的变化都是在训练过程做的改变,在微调阶段曾谈及SPP-net只能更新FC层,这是因为卷积特征是线下计算的,从而无法再微调阶段反向传播误差。而在fast-RCNN中则是通过image-centric sampling提高了卷积层特征抽取的速度,从而保证了梯度可以通过SPP层(即ROI pooling层)反向传播。

输入除了batch大小为N的图像外,还有R大小的ROI序列。这种多任务训练机制避免了对顺序训练任务的pipeline的管理,同时也对MAP的提高起到了一定的作用。输出也因为变成两个输出而存在着两个loss function。一个输出对k个物体类别的可能性的softmax型预测,一个输出针对每个类的四位实数。

该文在随后还探讨了SVM和softmax两类分类器在VOC07上MAP的大小,发现softmax表现更为突出;同时发现region proposals并不是越多越好,这些都可作为一些trick指导自己的工作。

RCNN到SPP-net,再到Fast-RCNN,在MAP不断得到提升的同时,速度也不断的提升,但我们也注意到在proposals的计算中仍然存在的计算瓶颈,而最近MSRA提出的Faster-RCNN正是这一问题的解决方案。由于这篇文章才出来不久,还没来得及读,暂时写到这里。

PS:文章完全来自个人理解,肯定很多漏洞或者理解过于表面的问题,此文后续会不断更新,以求更全面更简单的诠释。

参考文献:

[1] R. Girshick, J. Donahue, T. Darrell, and J. Malik, “Rich feature hierarchies for accurate object detection and semantic segmentation,”in CVPR, 2014

[2] K. He, X. Zhang, S. Ren, and J. Sun. Spatial pyramid pooling in deep convolutional networks for visual recognition. In ECCV, 2014.

[3] R. Girshick. Fast R-CNN. arXiv:1504.08083, 2015.

[4] Shaoqing Ren Kaiming He Ross Girshick Jian Sun. Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks.arXiv:1506.01497,2015

RCNN SPP-net Fast-RCNN Faster-RCNN相关推荐

  1. 【Faster RCNN detectron2】detectron2实现Faster RCNN目标检测

    目录 1. 背景介绍 2.安装步骤 3.Faster RCNN目标检测 4. 效果 5.错误解决 6.参考博客 7,下一节代码解析 在上一篇博客记录了 SlowFast的复现过程,slowfast其中 ...

  2. 阿里巴巴提出Auto-Context R-CNN算法,刷出Faster RCNN目标检测新高度

    基于区域的CNN(R-CNN),在目标检测领域具有统治地位,在兴趣区域(RoI)上的操作比如RoIPooling和RoIAlign扮演了重要角色,但是它们只利用了兴趣区域内的信息,而兴趣区域附近的上下 ...

  3. 目标检测方法系列:R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD

    本文转载自: http://www.cnblogs.com/lillylin/p/6207119.html 目标检测方法系列--R-CNN, SPP, Fast R-CNN, Faster R-CNN ...

  4. 目标检测方法系列——R-CNN, SPP, Fast R-CNN, Faster R-CNN, YOLO, SSD

    目录 相关背景 从传统方法到R-CNN 从R-CNN到SPP Fast R-CNN Faster R-CNN YOLO SSD 总结 参考文献 推荐链接 相关背景 14年以来的目标检测方法(以R-CN ...

  5. 目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    一. 从图像识别的任务说起   1.1 思路一:看做回归问题   1.2 思路二:取图像窗口 二. R-CNN横空出世 三. SPP Net 四.Fast R-CNN 五.Faster R-CNN 看 ...

  6. [转]一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/kwame211/article/details/88016151 一.目标检测常见算法 object ...

  7. RCNN,fast R-CNN,faster R-CNN

    转自:https://www.cnblogs.com/skyfsm/p/6806246.html object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别. ...

  8. 目标检测总结:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

    目标检测总结:R-CNN.Fast R-CNN.Faster R-CNN.YOLO.SSD 转自:七月在线实验室 一.目标检测常见算法 object detection,就是在给定的图片中精确找到物体 ...

  9. 基于深度学习的目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN

    object detection我的理解,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别.object detection要解决的问题就是物体在哪里,是什么这整个流程的问题.然而,这个问题 ...

  10. 一文读懂目标检测:R-CNN、Fast R-CNN、Faster R-CNN、YOLO、SSD

    前言 之前我所在的公司七月在线开设的深度学习等一系列课程经常会讲目标检测,包括R-CNN.Fast R-CNN.Faster R-CNN,但一直没有比较好的机会深入(但当你对目标检测有个基本的了解之后 ...

最新文章

  1. group by总结(还有having)
  2. LiveVideoStack线上分享第五季(五):用FFmpeg搭建基于CNN的视频分析方案
  3. VC内存对齐准则(Memory alignment)
  4. 使用 WinSCP 连接到 VCSA 6.5 失败并显示以下错误:收到的 SFTP 数据包过大
  5. linux qemu原理,最全的剖析QEMU原理的文章3
  6. 孙鑫VC学习笔记:第十一讲 (一) 坐标空间与各种转换的概念
  7. ubuntu安装配置搜狗拼音输入法
  8. [hdu5285]wyh2000 and pupil
  9. 修复SQL2000数据库一致性错误的语句
  10. 在公交车上想出的一个java算法
  11. Google Guava的5个鲜为人知的特性
  12. as.net core 5.0 Configuration读取consul的kv存储
  13. sublime使用简介
  14. 关于深度学习方面的一些概念
  15. 那些年收藏的技术文章(一)-CSDN篇
  16. 微课--Python获取局域网内所有机器IP地址与MAC地址
  17. 【关于四足机器人那些事】腿部运动学建模(三维)
  18. TrueChain初链:带你解读区块链3.0时代
  19. 奇异值分解和豪斯赫尔德变换法
  20. latex中怎么在符号正上和正下方编写公式

热门文章

  1. fastJson解析复杂对象时碰到的问题
  2. spring cloud config配置中心源码分析之注解@EnableConfigServer
  3. 李宏毅深度学习——第一天
  4. 机器学习Sklearn实战——其他线性回归模型、逻辑回归
  5. 信贷风控知识问答库(持续更新)
  6. V神最新演讲:以太坊2.0的分片交易
  7. [搜索]字符串的相似度问题-从编程之美说起
  8. Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)
  9. 白话Elasticsearch68-ES生产集群部署重要的操作系统设置
  10. Shell-实际业务操作01