RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉。但是这种方法却又非常非常重要,对三维物体的检测非常有启发,所以在这里做个总结。

1、RCNN - the original idea

  —— <Rich feature hierarchies for accurate object detection and semantic segmentation>

这篇文章提出了用CNN网络来对物体进行检测的思路。

Q:

  a. CNN网络中存在卷积层和池化层,每次池化都会弱化物体的位置信息,强化物体的特征信息,所以CNN网络最终会告诉我们是什么,而不是在哪儿

  b. 要使用CNN网络来检测,直觉上我们可以训练一个识别某物体的网络,来对小方块进行分类。但是这需要大量的训练集,可能对于待检测物体,我们没有收集大量训练集的机会

  c. CNN网络的图像输入层具有固定的维度,任意大小的小方块是无法直接输入到CNN网络里的

A:

  a. 文章提出了可以在已经训练好的网络上利用小规模的训练集进行优化,也能达到很好的效果。

  b.通过 selective search来确定可能含有物体的小方块

  c.将消方块进行拉伸(warp),送入CNN进行分类,最终实现检测

细节:

  1、使用了ILSVRC 2012对网络进行预训练,步长0.01

  2、精训练使用的步长是0.001

  3、mini-batch size = 128, 其中背景96,带东西的32。有意的bias,让网络更大概率判为背景

  4、loss function 中,IoU超过50%判为1,否则为0

  5、使用svm对物体类别进行判断

  6、对box进行线性回归,获得更高的精度(后面还会提到)

2、SPPNet - 结合金字塔

  —— <Spatial pyramid pooling in deep convolutional networks for visual recognition>

  在第一步使用rcnn中,检测需要将图片拉伸成特定的大小,便于输入网络。这显然很不合理,很多东西拉伸以后就完全变形了,这会降低检测的精度。所以需要一种不拉伸方块的方法,来对物体进行检测。

Q:

  a.拉伸图像会带来识别精度的下降,在r-cnn中尤其明显

A:

  a.金字塔池化:将任意维度的图片池化成同一维度。例如,图片为256*256,金字塔接受的就是maxpool2dlayer(16,'stride',16),如果图片为128*128,金字塔接受的就是maxpool2dlayer(8,'stride',8)

  

细节:

  只用了两种bin size 来构建训练集,180 * 180, 224 * 224. 因为只有两种情况,所以可以很方便的构建bp函数

3、FastCNN - 要啥金字塔,一层就够啦

  —— <Fast R-CNN>

Q:

  a.对于每个 box/proposal 都需要进行一次feed forward.

  b.训练时需要对分类函数和回归函数分开训练

A:

  a.对图像进行一次整体的feed forward,得到总的卷积结果;对总结果中的box,每个box一次,分别进行ROI pooling (其实就是金字塔的第一层)

  b. ROI pooling 后会得到固定维度的向量,送入多次全连接层,直接映射成类别和box的回归

细节:

  1、训练时,所有的权重都得到迭代

4、Faster R-CNN — 这才是颠覆

  ——<Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks>

Q:

  a. 对每张图都要进行一次 selective search 以获得proposal太耗时了

A:

  a.设计一个神经网络 Region Proposal Net 自动来提出proposal 吧!

RPN 本质上可以看作一个非常独立的部分,虽然它号称使用了整幅图像的feature,但功能上RPN是独立的。RPN的任务是输入图像,输出一系列Proposal(四点坐标+是否有物体)

1、使用卷积网络的最后一个卷积层卷积完的结果 Last_Image * final_convolution2dlayer(n,d). 作为RPN的真正输入(前面都是公用的,后面才是RPN)

2、使用一个3*3的小卷积掩模将1中的结果抽象成d 维向量。

3、将该向量送入2个全连接层——分类全连接(2K输出)和坐标全连接(4K输出)————k个proposal (3 scale,2 aspect ratio)

4、在2中,掩模的位置决定了全连接输出参数的"原点"

5、总结

  在神经网络中,全连接是最强的非线性映射方式,也是花费最重的。在结果层少量的使用全连接以换取强大的映射方程是很有意义的。

  说了那么多,和三维视觉有毛关系?其实关系在这里,在二维图像中检测物体位置和在三维图像中检测物体位姿是对偶的。不信?见 <Deep Sliding Shapes for amodal 3D object detection in RGB-D images>

  

  

三维计算机视觉 —— 中层次视觉 —— RCNN Family的更多相关文章

  1. 三维计算机视觉 — 中层次视觉 — Point Pair Feature

    机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Learning 的东风已经在图像的物体标记领域耍的飞起了.而从三维场景中提取物体还有待研究.目前已有的思路是先提 ...

  2. PCL —— RCNN Family 中层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/6046411.html RCNN是从图像中检测物体位置的方法,严格来讲不属于三维计算机视觉.但是这种方法却又非常非常 ...

  3. PCL—低层次视觉—关键点检测(NARF)

    关键点检测本质上来说,并不是一个独立的部分,它往往和特征描述联系在一起,再将特征描述和识别.寻物联系在一起.关键点检测可以说是通往高层次视觉的重要基础.但本章节仅在低层次视觉上讨论点云处理问题,故所有 ...

  4. PCL—低层次视觉—关键点检测(rangeImage)

    关键点又称为感兴趣的点,是低层次视觉通往高层次视觉的捷径,抑或是高层次感知对低层次处理手段的妥协. ——三维视觉关键点检测 1.关键点,线,面 关键点=特征点: 关键线=边缘: 关键面=foregro ...

  5. PCL—低层次视觉—点云分割(邻近信息)

    分割给人最直观的影响大概就是邻居和我不一样.比如某条界线这边是中华文明,界线那边是西方文,最简单的分割方式就是在边界上找些居民问:"小伙子,你到底能不能上油管啊?”.然后把能上油管的居民坐标 ...

  6. [Deep-Learning-with-Python]计算机视觉中的深度学习

    包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络学习结果以及分类决策过程 介绍卷积神经网络,convnets,深度学习在计算机视觉方面 ...

  7. PCL — Point Pair Feature 中层次点云处理

    博客转载自:http://www.cnblogs.com/ironstark/p/5971976.html 机器人视觉中有一项重要人物就是从场景中提取物体的位置,姿态.图像处理算法借助Deep Lea ...

  8. 计算机视觉中的词袋模型(Bow,Bag-of-words)

    计算机视觉中的词袋模型(Bow,Bag-of-words) Bag-of-words 读 'xw20084898的专栏'的blogBag-of-words model in computer visi ...

  9. 三维场景中使用BillBoard技术

    三维场景中对于渲染效果不是很精致的物体可以使用BillBoard技术实现,使用该技术需要将物体实时朝向摄像机,即计算billboard的旋转矩阵M. 首先根据摄像机位置cameraPos和billBo ...

随机推荐

  1. Linux 压缩解压缩

    先直接给出各种解压缩命令 .tar 压缩:tar cvf FileName.tar FileName 解压:tar xvf FileName.tar ------------------------- ...

  2. Linux之临时配置网络(ip,网关,dns)+永久配置

    作业一:临时配置网络(ip,网关,dns)+永久配置 配置网络信息 [root@localhost ~]# ifconfig eno16777736: flags=4163<UP,BROADCA ...

  3. Concurrency in C# Cookbook 笔记

    Pausing for a Period of TimeProblem:You need to (asynchronously) wait for a period of time. This can ...

  4. 转 Configuring Relationships with the Fluent API

    http://msdn.microsoft.com/zh-cn/data/jj591620 Configuring a Required-to-Optional Relationship (One-t ...

  5. JAVA自学笔记07

    JAVA自学笔记07 1.构造方法 1) 例如:Student s = new Student();//构造方法 System.out.println(s);// Student@e5bbd6 2)功 ...

  6. JAVA自学笔记15

    JAVA自学笔记15 @例题1:共有5个学生,请把五个学生的信息存储到数组中,并遍历数组,并获取每个学生的信息 Students[] students=new Student[5]; Student ...

  7. 顺序栈的基本操作中Push压入后的- S.top = S.base + S.stacksize; 作用

    #include <stdio.h> #include <malloc.h> #define TRUE 1 #define OK 1 #define ERROR 0 #defi ...

  8. C#异步Task编程模型实战手册

    一.课程介绍 本次分享课程属于<C#高级编程实战技能开发宝典课程系列>中的第一部分,阿笨后续会计划将实际项目中的一些比较实用的关于C#高级编程的技巧分享出来给大家进行学习,不断的收集.整理 ...

  9. 浅谈MFC类CrackMe中消息处理函数查找方法

    最近一个学姐发给我了一份CrackMe希望我解一下,其中涉及到了MFC的消息函数查找的问题,就顺便以此为例谈一下自己使用的消息函数查找的方法.本人萌新,如果有任何错漏与解释不清的地方,欢迎各路大佬指正 ...

  10. CentOS安装mariadb做为mysql的替代品

    mariadb做为mysql的替代品 现在centos的新版本yum包已换成mariadb 安装一些库 yum install gcc gcc-c++ wget net-tools 复制代码 查看SE ...