FasterRCNN之整体框架详解
欢迎访问我的个人主页
刚接触物体检测领域,学习了Faster RCNN的论文及Tensorflow版本的源码,不得不说,读源码真的过瘾…不过确实能够帮助理解框架,下面按照Faster RCNN的预测过程介绍其整体流程
整体框架
Faster RCNN整体框架包括4部分:
一. 使用VGG16或者其他成熟的图片分类模型提取图片特征(feature map)
二. 将图片特征喂入RPN(Region Proposal Network)网络得到proposals (包含第一次回归)
三. 将上两步的结果:图片特征和 proposals 喂入RoI Pooling层得到综合的proposals特征
四. 根据poposals特征预测物体的bounding box和物体的类别 (包含第二次回归)
对应下图: 图中conv(3,3,512,1,1)对应conv(filter_height,filter_width,output_channels,stride_height,stride_width)
接下来分别介绍这四部分对应的网络结构,以预测过程为例(训练过程涉及ground truth的构建,会在之后的博客中具体介绍)
一.获取图片特征
使用预训练好的VGG16提取图片特征,如下图所示,喂入的图片(也就是’data’)并没有经过VGG16所有的流程,而是在得到’conv5_3’这个结果后就停下了,'conv5_3’就是Faster RCNN需要的图片特征(feature map)
注意:'conv5_3’的h,w是输入图片’data’的1/16
二.RPN网络输出proposals
这是Faster RCNN中最复杂的一部分. 将通过VGG16得到的图片特征喂入RPN(Region Proposal Network)网络得到proposals
RPN网络结构如下图所示
(1) 首先将图片特征’conv5_3’喂给卷积层conv(3,3,512,1,1),输出的图片特征 ‘rpn_conv/3x3’ 尺寸和通道数均保持不变.
根据卷积的运算公式,猜测这一层的作用为:该层 每个filter 分别将’conv5_3’的所有通道联系起来,也就是说经过卷积后, 'rpn_conv/3x3’的每个通道 都整合了’conv5_3’所有通道的信息.(这地方说起来比较绕,如果明白卷积的计算过程就容易理解了)
(2.1) 将 ‘rpn_conv/3x3’ 喂给conv(1,1,36,1,1)得到 ‘rpn_box_pred’ ,36个通道表示:每个点有9组proposals的回归值,每组proposals的回归值对应论文中的tx,ty,tw,th.(这里是第一次回归)
这里要重点注意一下,'rpn_conv/3x3’的尺寸是h,w,也就是’rpn_conv/3x3’有h*w个像素(不要考虑通道数,举个例子:平时我们看到的彩色图是3通道的,假设分辨率是1920*1080,这表示有1920*1080个像素点,而不是3*1920*1080个).针对这h*w个像素,以每个像素为中心为每个像素生成9组proposals的回归值,每组回归值包含4个信息.所以每个像素点需要36个维度去存储9*4个信息,这就是输出通道36的来源!
(2.2.1) 将 ‘rpn_conv/3x3’ 喂给conv(1,1,18,1,1)得到 ‘rpn_cls_score’ ,刚才说了,要为 ‘rpn_conv/3x3’ 的每个像素生成9个proposals,而每个proposal是有类别的,要么是foreground proposal(框出物体),要么是backgroud proposal(框出背景).所以每个proposal需要2个维度来存储类别得分,因此 ‘rpn_conv/3x3’ 的每个像素需要9*2=18个维度,这就是输出通道18的来源.
(2.2.2)接着将 ‘rpn_cls_score’ 依次喂入reshape_layer,softmax,reshape_layer,最终得到 ‘rpn_cls_prob_reshape’ ,这一过程将每个类别得分转换为概率.
为什么要经过两个reshape_layer呢? 这里引用白裳大神的解释:
那么为何要在softmax前后都接一个reshape layer?其实只是为了便于softmax分类,至于具体原因这就要从caffe的实现形式说起了。
在caffe基本数据结构blob中以如下形式保存数据:blob=[batch_size, channel,height,width]
对应至上面的保存bg/fg anchors的矩阵,其在caffe blob中的存储形式为[1, 2x9, H, W]。
而在softmax分类时需要进行fg/bg二分类,所以reshape layer会将其变为[1, 2, 9xH, W]大小,
即单独“腾空”出来一个维度以便softmax分类,之后再reshape回复原状。
贴一段caffe softmax_loss_layer.cpp的reshape函数的解释,非常精辟:
"Number of labels must match number of predictions; "
"e.g., if softmax axis == 1 and prediction shape is (N, C, H, W), "
"label count (number of labels) must be N*H*W, "
"with integer values in {0, 1, ..., C-1}.";
综上所述,RPN网络中利用anchors和softmax初步提取出foreground anchors作为候选区域。
(3) 将 ‘rpn_box_pred’ 和 ‘rpn_cls_prob_reshape’ 以及 im_info 喂给proposal_layer 得到 ‘rois’ ,也就是RPN网络最终输出的proposals. 这些proposals都是从foreground anchors里面挑选的, 用到了nms. 接下来还需要对RPN输出的proposals进行第二次回归
三. 通过RoI Pooling层得到综合的proposals特征
(1) 将 ‘rois’ 和 ‘conv5_3’ 喂给roi_pool 得到 ‘pool_5’ , 关于roi_pool的输入,尺寸是任意大小的,但输出的特征都是长度固定的. 具体可参考3分钟理解ROI Pooling层
四.根据poposals特征进行框回归和物体分类
(1) 将 ‘pool_5’ 连续经过两个全连接层得到 'fc_7’
(2.1)将 ‘fc_7’ 经过全连接层得到 ‘bbox_pred’ ,这里是二次回归,表示tx,ty,tw,th.用来和 ‘rois’ 相加,从而得到Faster RCNN最终的proposals!
(2.2.1) 将 ‘fc’ 经过全连接层得到 'cls_score’
(2.2.2) 将 ‘cls_score’ 经过softmax层得到 ‘cls_prob’ ,也就是proposal属于各个物体的概率
以上便是Faster RCNN的4部分,关于模块的实现细节,我过几天再写
训练时迭代了50000次,pascal2007测试结果MAP=0.65,其中,chair的ap最低0.46,horse的ap最高0.81
运行环境:CUDA8,cuDNN7,1070Ti,TensorFlow1.4.0,python2.7
训练集:voc_2007_trainval 训练时间148分钟
测试集:voc_2007_testt 测试时间10分钟(5000图)
参考:
白裳
FasterRCNN之整体框架详解相关推荐
- 支付系统整体架构详解
2019独角兽企业重金招聘Python工程师标准>>> 支付系统整体架构详解 http://www.dataguru.cn/article-11263-1.html http://w ...
- jQuery Validate验证框架详解
2019独角兽企业重金招聘Python工程师标准>>> 一.导入js库 <script type="text/javascript" src="& ...
- shiro放行_Shiro框架详解 tagline
部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...
- [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解
深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...
- WebDriver自动化测试框架详解
webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...
- atitit.jQuery Validate验证框架详解与ati Validate 设计新特性
atitit.jQuery Validate验证框架详解与ati Validate 设计新特性 1. AtiValidate的目标1 2. 默的认校验规则1 2.1. 使用方式 1.metadata用 ...
- Android 动画框架详解,第 1 部分
2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...
- springboot2整合mysql5_SpringBoot2整合SSM框架详解
SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...
- Django REST FRAMEWORK swagger(一)框架详解
Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...
- 框架详解_Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解
若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...
最新文章
- 计算机视觉的“惨胜”:反思大型图像数据集
- nginx转发端口路由器再转发
- 如何读取jar包外的properties和log4j.properties等配置文件
- apache php 调优_记一次apache+php调优
- CentOS 配置防火墙操作实例(启、停、开、闭端口)
- Beyond Compare 3 设置自动换行
- IIS6.0应用程序池回收和工作进程【转:http://www.cnblogs.com/freshman0216/archive/2008/06/02/1212460.html】...
- caffe学习笔记教程
- UNIX网络编程——基本TCP套接字编程 【转贴】
- shell中Connection closed by foreign host问题解决
- Jenkins定时自动构建项目
- QtableWidget的表格加载图片设置
- get 和 post 区别
- Roslyn 静态分析
- FinalShell下载安装教程
- html图像标签、绝对路径和相对路径
- python可以取代excel吗_python能彻底取代excel吗?
- 认识并理顺元宇宙与产业互联网之间的关系,可以打开产业互联网的发展新症结
- 龙蜥操作系统(Anolis OS)安装DDE桌面
- ElasticSearch基础:从倒排索引说起,快速认知ES
热门文章
- Java性能优化的五种方式,让你的Java程序更快、更稳定!
- python获取浏览器cookie_python3实现读取chrome浏览器cookie
- python代码设置环境变量
- aforge java_基于Aforge摄像头调用简单实例
- PCB选料时的小技巧和参考网站+电解电容封装尺寸+稳压管型号
- attr() 设置option默认选中无效
- RSA密钥对生成过程具体实践
- win10计算机ser,win10 ch341ser.inf安装失败如何处理_win10无法安装ch341ser.inf修复方法...
- PR开场片头模板 恐怖惊悚电影侦探节目logo展示PR模板
- jsp入门教程:7个步骤实现JSP的分页显示