faster-rcnn自己的理解总结(包括它的前世今身R-CNN和fast R-CNN)
1、grandfather: R-CNN网络
结构如下:

工作流程:
Input(an image)
Proposals(~2K个,在使用CNN提取特征之前还要先resize)
feature maps
每类得分,再经过NMS筛选,再使用手工设计的回归器进行box regression;
缺点:
(1)速度慢,2K多个proposals都要经过CNN提取特征;
(2)先分类在再回归,没有实现end to end;
2、father: fast R-CNN网络
结构如下:

工作流程:
Input(an Image,同时已经用SS提取了proposals,知道了它们的位置)
整图的feature map(同时将proposals映射到了feature map上)
(经过Rol Pooling的resize操作)
再使用softmax分类以及box regssion
改进:
(1)不用再对每一个proposal单独提取特征,大大提高了速度;
(2)引入了ROI Pooling层;
(3)将分类和回归加入了网络,且共享卷积层,不用再像R-CNN中那样单独训练SVM和回归器了;
缺点:
(1)依然在使用SS(selective search)提取候选框,很耗时;
为了摒弃SS,我们取而代之使用RPN网络,即用CNN实现提取特征框的功能,这样一来所有的操作都可以通过CNN实现了,真正实现了end to end,然后我们的猪脚登场了:
3、son : faster-rcnn的网络结构如下:

如上图所示,(im_info = [M , N , scale_factor]),说一下它的前向传播流程:
(1)一般对于输入的图像,P*Q的原图先统一缩放为M*N,并且在前面的特征提取层(也可称“共享卷积层”)中,由于stride = 1 , pad = 1 , kernel size = 3 * 3,所以卷积前后图像大小不变,只有四个Pool层起到了作用,因此原始图像经过提取层后的feature map大小为(M / 16)* (N /16),这样做也是为了使原始图像到feature map的缩放系数为整数从而使得feature map上的每个特征点和M*N的原始图像的区域坐标更方便地实现一一映射关系,这对后面生成proposal会有帮助;
(2)RPN结构中第一个层是一个3*3的卷积层,它作用在经过特征提取层后的feature map上,我觉得这个3*3的卷积作用是为了增加目标附近区域的语义理解;然后再经过两条支路,每条都首先经过一个1*1的卷积。先看上面一条,这条的作用是对“foreground”和"background"进行二分类,所以经过1*1之后的深度为18(9*2,对应每个点生成9个anchors和每个anchor两个类别),再看下面一条,也是经过一个1*1的卷积,深度为36(9*4)进行矩形框回归,然后这两条支路汇合,首先去除掉background类别,然后对于剩下的forground类别,利用im_info先将anchors放大到M*N的原始图像上,这些放大后在原始图像上的区域就是一开始的proposals,数量很多所以我们还要进行两次筛选:第一次,判断这些proposals是否大范围超出图像边界,剔除严重超出边界的;第二次,对剩下的proposals进行nms,然后对nms后的proposals根据cls scores进行排序,选取top-N个作为最终的proposals(一般在600个左右),其实到这里检测任务差不多就完成了,但作者后面还加另一步,相当于一个refine;
(3)之后就涉及到ROI Pooling层了,由于RPN输出的proposals对应的M*N的输入图像,所以我们先通过im_info中的scale_factor将其映射到特征提取层的feature map上,但由于后面需要经过全连接层,而这里每个proposals映射到feature map上的大小均不同,所以我们使用了ROI Pooling层将这些proposals映射后的大小固定(7*7或者6*6,好像论文和实现里稍微有点不同,看代码就知道了),然后这块固定的区域再经过全连接层进行分类和坐标框回归;
关于如何训练,参考这个:https://www.cnblogs.com/zf-blog/p/7142463.html
补充:
(1)bounding box regression:

faster-rcnn自己的理解总结(包括它的前世今身R-CNN和fast R-CNN)的更多相关文章
- Faster RCNN代码理解(Python)
转自http://www.infocool.net/kb/Python/201611/209696.html#原文地址 第一步,准备 从train_faster_rcnn_alt_opt.py入: 初 ...
- 目标检测(四)Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun SPPnet.Fast R-CNN等目标检测算法已经大幅降低了目标检测网络的运行时间. ...
- 从编程实现角度学习Faster R-CNN(附极简实现)
https://www.jianshu.com/p/9da1f0756813 从编程实现角度学习Faster R-CNN(附极简实现) GoDeep 关注 2018.03.11 15:51* 字数 5 ...
- 小刘的深度学习---Faster RCNN
前言: 对于目标检测Faster RCNN有着广泛的应用,其性能更是远超传统的方法. 正文: R-CNN(第一个成功在目标检测上应用的深度学习的算法) 从名字上可以看出R-CNN是 Faster RC ...
- 原 CNN--卷积神经网络从R-CNN到Faster R-CNN的理解(CIFAR10分类代码)
1. 什么是CNN 卷积神经网络(Convolutional Neural Networks, CNN)是一类包含卷积计算且具有深度结构的前馈神经网络(Feedforward Neural Netwo ...
- (原)faster rcnn的tensorflow代码的理解
转载请注明出处: https://www.cnblogs.com/darkknightzh/p/10043864.html 参考网址: 论文:https://arxiv.org/abs/1506.01 ...
- Faster rcnn代码理解(4)
上一篇我们说完了AnchorTargetLayer层,然后我将Faster rcnn中的其他层看了,这里把ROIPoolingLayer层说一下: 我先说一下它的实现原理:RPN生成的roi区域大小是 ...
- Faster rcnn代码理解(2)
接着上篇的博客,咱们继续看一下Faster RCNN的代码- 上次大致讲完了Faster rcnn在训练时是如何获取imdb和roidb文件的,主要都在train_rpn()的get_roidb()函 ...
- Faster rcnn代码理解(1)
这段时间看了不少论文,回头看看,感觉还是有必要将Faster rcnn的源码理解一下,毕竟后来很多方法都和它有相近之处,同时理解该框架也有助于以后自己修改和编写自己的框架.好的开始吧- 这里我们跟着F ...
随机推荐
- jenkins配置小结
启动jenkins:javaw -jar -Dhudson.model.DirectoryBrowserSupport.CSP= jenkins.war --httpPort=8001 wget h ...
- 9、字符串转数字用int、因为input里面接受的全部是字符串
#!/user/bin/python# -*- coding:utf-8 -*-num = int(input('请输入数字:'))if num == 1: print(666)elif num == ...
- 数据库基础SQL知识面试题二
数据库基础SQL知识面试题二 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.选课系统SQL语法练习 course数据库中有以下四张表: •students表(学生表): si ...
- 《Apache Kafka 实战》读书笔记-认识Apache Kafka
<Apache Kafka 实战>读书笔记-认识Apache Kafka 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.kafka概要设计 kafka在设计初衷就是 ...
- shop++改造之Filter类
基于shop++源码进行商城改造.本来想大展手脚,结果一入手.发觉瞬间淹没了我的才华,sql语句也得贼溜没啥用. 不得不说这个商城源码价值很高,封装的很精屁. 下面是我第一天入手的坑. 数据库建好了表 ...
- vue加载本地json文件
背景:做地区跟行业级联下拉选择,因为想做成可以搜索的,所以必须一次加载数据,后台有做memcache缓存,但因为数据量大,还是比较费时间,所以做成本地文件,简单记录一下 准备数据,放到static下 ...
- SpringBoot入门笔记(一)、HelloWorld
本文是一篇SprintBoot学习入门笔记 1.打开Eclipse,版本为Oxygen 4.7.0 2.新建项目NewProject->MavenProject->Next->Nex ...
- 如何实现从 Redis 中订阅消息转发到 WebSocket 客户端
PHP 的redis扩展是阻塞式 IO ,使用订阅/发布模式时,会导致整个进程进入阻塞.因此必须使用Swoole\Redis异步客户端来实现. 实例代码 $server = new swoole_we ...
- MySQL Out-of-Band 攻击
概述 当涉及到MSSQL与Oracle时,Out-of-Band 注入是非常好的方式.但我注意到MySQL注入的情况并非如此,于是我准备以自己在SQL注入方面的经验做相关的研究.我们可以利用诸如loa ...
- ubuntu安装matlab
https://blog.csdn.net/qq_36982160/article/details/78397514 https://blog.csdn.net/weixin_40294256/art ...