RCNN (Regions with CNN) 目标物检测 Fast RCNN的基础

Abstract:
贡献主要有两点1:可以将卷积神经网络应用region proposal的策略,自底下上训练可以用来定位目标物和图像分割 2:当标注数据是比较稀疏的时候,在有监督的数据集上训练之后到特定任务的数据集上fine-tuning可以得到较好的新能,也就是说用Imagenet上训练好的模型,然后到你自己需要训练的数据上fine-tuning一下,检测效果很好。现在达到的效果比目前最好的DPM方法 mAP还要高上20点,目前voc上性能最好。

着篇文章主要是介绍RCNN,跟后面的,Fast RCNN和Faster RCNN比较关联,这篇文章是后两个的基础
1.介绍
在开始他说到LeCun对卷积神经网络中采用的SGD(通过反向传播的随机梯度下降算法)对网络训练很有效,也直接促进了利用CNN来做检测。
其实CNN的算法在90年代就已经出现了,可惜当时被SVM取代了,主要原因就是当时训练不动。2012年的时候Krizhevsky复燃了CNN,其在Imagenet的数据集上训练达到了非常好的效果,主要是用了LeCun中的一些技巧如(rectifying non-linearities and “dropout” regularization)

后来就有了讨论说把CNN方到目标检测上能达到什么样的效果。因此RossGirshick把问题主要聚集在了2个点上:
1一个是用深度网络来做一个检测,并且在整个high-capacity model中用较少的标注数据来training,比如几万张图像,(毕竟Imagenet上有上千万的图像数据)。不像图像分类任务,检测是需要定位的。因此RCNN里把这个定位转换成一个regression problem(即回归问题)。当然他们在当时也想采用最经典的也就是sliding window,在卷积层增加了较大的感受野。但是他们最后没有采用,因为之前的DPM中也已经不采用这种方法了,无效的操作太多(PS.这里是我个人感觉,而且会增加复杂度)。他们最后采用的是Recognition using region的策略(这种paradigm已经在目标识别和semantic segmention中取得了较好的成功)。在测试阶段,他们提取约2000K预选框,从预选框中通过CNN提取出fixed-length的特征,最后通过特定类别的SVM来分类。对于不同大小的ROI采用了(affine image warping)来调整到固定的size,这种方法是不考虑region的形状的。整个系统的overview

2.在实际检测中,训练的样本肯定是scarce,不足以训练一个大型的CNN网络。解决这个问题的方法是,首先通过无监督的预训练unsupervised pretraining,然后再进行supervised training,在实验中他们提到经过fine-tuninig,检测的mAP有8个点的提高。Ross提到Donahue的同时期的工作,其直接拿了krizhevsky的CNN网络用来做一个blackbox feature的extractor,这也在识别任务中表现出了较好的性能,如场景识别,细粒度的子分类,领域适应。分类计算中只有整个的分类工作只是一个矩阵相乘和非极大值抑制。

在错误分析中,可以发现bounding box的regression 可以明显的减少mislocalization。同理,作者说因为RCNN是工作在Region上的,因此其也可以较好的应用到semantic segmentation,最后也在voc2011上取得了较好的效果,比最好的高出1个点,(PS.我认为应该会有更好的性能,应该还没有做透,原来的那些分割仍然依赖浅层的特征)
特征提取:在网络之前,ROI不管大小形状都被缩放到一个固定的尺寸以适应网络。

2.2
测试时检测
在RCNN中,为每一类都训练了一个SVM,最后根据输出的特征类判断,每一个区域都有一个得分,最后通过greedy non-maximun supperssinon(for each class independently)来接受或者拒绝一个region,主要是看他这个有IoU的region是否比学习到的阈值有更高的得分。
对于运行分析
1.所有的CNN参数都在各个类别分享参数
2.CNN计算出来的参数是low dimensional 低维的,与其他方法比起来如空间金字塔,以及视觉词带模型

  1. The only class-specific computations are dot products between features and SVM weights and non-maximum suppression
    4.RCNN可以应付类别很多情况并且不需要借助一些额外的近似手段,比如哈希什么的,别的方法在类别增长时,整个复杂度会上升很多,比之前的DPM的方法也要好很多
    2.3 训练过程
    supervised-pretraining ----> domain-specifi fine-tuning ---->object categroy classier
    1.supervised-pretraining是在imagenet上训练好的模型
    2.domian-specific fine-tuning 首先需要修改类别数目,并且在文中,Ross将IoU和GT大于0.5的看成是正样本,在SGD中 lr为pre-training rate的十分之一为0.001,这样不会影响预训练。在SGD中,每一次迭代,mini-batch大小是128,总共有32个postive window,96个negtive window.`

3可视化学习的特征
在可视化学习特征中中,采用了一个很大的局部感受野的数据集。这了主要对卷基层进行可视化,输入region图像,根据unit激活之的大小排序,来看他对什么样的输入敏感。下图可以看到有一些Unit对人脸敏感如1,有一些对点阵,狗敏感如2行,第三行,对红色敏感,对第四行对文字敏感,也能将一些特征融合到一起入颜色、纹理、形状,如5行的屋子。。等等
这里很关键!5层之后为全连接层,全连接层可以将这些丰富的特征进行组合建模!

3.2 关于参数消除的研究
1.performace没有fine-tuning
从表中可以看到fc7产生的特征比fc6澶色恒的特征要差,这也就是说29%差不多1.68million个数据是可以从CNN网络中去掉的,并且几乎对mAP没什么影响。更加惊讶的是,如果把f6和f7都去掉的话,只用pool5层的参数也就是大于整个网络6%的参数也可以取得不错的结果如下图所示:可以看到大部分representational的能力主要是来自于CNN的卷积层,而不是主要的全连接层。这个发现可以用在稠密的特征map中,比如说Hog。这种表现能力也就是说我们有可以将其应用到一些滑动窗检测子中如DPM,在pool5的特征基础之上。作者原文(Much of the CNN’s representationalpower comes from its convolutional layers, rather than fromthe much larger densely connected layers. This finding suggests potential utility in computing a dense feature map, in the sense of HOG, of an arbitrary-sized image by using only the convolutional layers of the CNN. This representation would enable experimentation with sliding-window detectors, including DPM, on top of pool5 features)
2.经过fine-tuning的性能
可以看到fine-tuning的效果还是很明显的,几乎提高了8个点,并且对于fc67的效果更明显,这也就是说从imagenet中学习到的pool5的特征比较general,并且对于性能的提升主要是来自对于在他们基础上的domain-specific具体应用场景的non-linear分类器的训练。

3.4 关于BBOX
首先需要明确的是,RCNN并不是从预选框里选择一个判断一下那么简单,在论文中的错误分析,大部分的检测错误的主要成分都是localize error 也就是定位错误,IoU在0.1和0.5之间。与别的类别以及背景confusion比例非常小,在这里作者根据最后输出的feature 进一步做了regression, 采用的是之前在DPM检测中的用的Linear regression model,这个让mAP大概提高了4个点。

4 Semantic segmentation
文中也提到了将RCNN网络用语分割,但是效果与目前较好的O2P的方法没有本质的提高约0.9。我认为主要还是网络学习过程并不足,其对于细粒度的特征没有一个整体的学习过程,目前在semantic segmentation上性能最好的是《Learning Deconvolution Network for Semantic Segmentation》目前在pascal-voc数据集上是第一的性能,他的网络中有一个对称的deconvolutoin network。

结束语:最近这几年确实,在目标物检测的性能上是停滞不前了,现在最好的DPM算法都是结合好多low-level的feature,并且这些feature都是手工设计的加上一些high-level context from detector和scene classifier。这篇文章给出了基于Region proposal和CNN网络极大的提高了mAP。有监督的预训练在特定场合的fine-tuning这一模式会针对很多数据系稀疏的是视觉问题有效。作者这里的意思是说拿Imagenet上训练好的那个模型,然后根据自己的特定应用场景,把模型用自己的数据fine-tuning一下,这样的做法是挺有效的。

#1楼 2016-01-27 16:02 kltsyn 
您好楼主
看了您的分析明白了不少
一直不明白最后的SVM是根据什么做的分类,每个proposal提完特征以后,svm是怎么知道把这些特征分为哪一类的呢
支持(0)反对(0)

#2楼[楼主] 2016-02-19 13:07 楼燚航的blog 
@ kltsyn
首先训练的时候是有GroundTruth的,跟这个GroundTruth重合的比例在文中默认是50%就归为这个GT对应的类别,否则小于50%就算作Background了

RCNN (Regions with CNN) 目标物检测 Fast RCNN的基础相关推荐

  1. RCNN (Regions with CNN) 目标物检测

    转载自: RCNN (Regions with CNN) 目标物检测 Fast RCNN的基础 - 楼燚航的blog - 博客园 http://www.cnblogs.com/louyihang-lo ...

  2. cnn 句向量_深度学习目标检测Fast R-CNN论文解读

    前言 我们知道,R-CNN存在着以下几个问题: 分步骤进行,过程繁琐.Selective Search生成候选区域region proposal->fine tune预训练网络->针对每个 ...

  3. 重温目标检测--Fast R-CNN

    Fast R-CNN ICCV 2015 https://github.com/rbgirshick/fast-rcnn 本文在目标检测中起到一个承上启下的作用,从 R-CNN 经由 Fast R-C ...

  4. rcnn 回归_基础目标检测算法介绍:CNN、RCNN、Fast RCNN和Faster RCNN

    每次丢了东西,我们都希望有一种方法能快速定位出失物.现在,目标检测算法或许能做到.目标检测的用途遍布多个行业,从安防监控,到智慧城市中的实时交通监测.简单来说,这些技术背后都是强大的深度学习算法. 在 ...

  5. 目标检测经典论文——Fast R-CNN论文翻译(中英文对照版):Fast R-CNN(Ross Girshick, Microsoft Research(微软研究院))

    目标检测经典论文翻译汇总:[翻译汇总] 翻译pdf文件下载:[下载地址] 此版为纯中文版,中英文对照版请稳步:[Fast R-CNN纯中文版] Fast R-CNN Ross Girshick Mic ...

  6. 深度学习目标检测之RCNN、SPP-net、Fast RCNN、Faster RCNN

    一.目标检测介绍 目标检测(目标提取)是一种基于目标几何和统计特征的图像分割,将目标的分割和识别合二为一,主要是明确从图中看到了什么物体.它们分别在什么位置.传统的目标检测方法一般分为三个阶段:首先在 ...

  7. 《目标检测》R-CNN、SPP-NET、Fast R-CNN、Faster R-CNN

    学习内容来自:https://www.bilibili.com/video/BV1m5411A7FD?p=2 类似的博文:https://blog.csdn.net/v_JULY_v/article/ ...

  8. tensorflow精进之路(二十三)——Object Detection API目标检测(上)(Fast R-CNN算法)

    1.概述 上一讲,我们使用slim库对图片进行检测,每个物品用同一种颜色标注,显得乱七八糟的.这一讲,我们来学习目标检测.目标检测就是,输入一张图片,输出是将该图片中所含的所有目标物体识别,并标记出他 ...

  9. 目标检测 | RCNN算法系列汇总+详解(包括Fast, Faster)

    一.RCNN 1. 介绍 2. 步骤流程 3. 部分详解 4. 缺点 二.Fast RCNN 1. 介绍: 2. 步骤流程 3. 部分详解 4. 比较 三.Faster RCNN 1. 介绍 2. 步 ...

最新文章

  1. 快速排序原理及代码模板
  2. 主页面调用iframe里面匿名Javascript函数的问题
  3. 趣事:一根网线发起的攻击
  4. js 判断支持webgl_基于WebGL无插件虚拟场景漫游技术如何构建?ThingJS
  5. 微信开发直接访问本地调试
  6. xcode 8   去除无用打印信息
  7. hdu 1272 小希的迷宫 (并查集)
  8. Spotlight on oracle 使用
  9. Linux 安装卸载软件及管理软件仓库
  10. 【剑指offer】面试题31:栈的压入、弹出序列(Java)
  11. I/O流之缓冲流的文件复制代码及节点流处理数据加密
  12. 【2012百度之星资格赛】F:百科蝌蚪团
  13. 和孩子们一起学Python编程
  14. wubi安裝ubuntukylin 14.04过程以及基本配置
  15. 入手华为云学生机体验
  16. JavaScript实现视频播放器
  17. 悉尼大学的计算机专业叫什么,申请悉尼大学计算机专业怎么样?你想知道的都在这里...
  18. Unity教程2D入门
  19. python具有集成开发环境对吗_对于Python集成开发环境,你更喜欢哪一款?
  20. 如果有人再问你 Java IO,把这篇文章砸他头上

热门文章

  1. leetcode算法题--UTF-8 编码验证
  2. OVS端口镜像(十四)
  3. leetcode算法题--删除链表的倒数第N个节点
  4. oracle管理 题库,Oracle数据库管理与开发习题集
  5. Linux下gcc编译中关于头文件与库文件搜索路径相关问题
  6. centos下部署启动elasticsearch错误集合与解决方案
  7. 解决YUM下Loaded plugins: fastestmirror Determining fastest mirrors 的问题
  8. 分布式服务管理框架-Zookeeper节点ACL
  9. 参数 ByVal 和 ByRef 区别
  10. 09.20类类型random