欢迎访问我的个人主页
刚接触物体检测领域,学习了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之整体框架详解相关推荐

  1. 支付系统整体架构详解

    2019独角兽企业重金招聘Python工程师标准>>> 支付系统整体架构详解 http://www.dataguru.cn/article-11263-1.html http://w ...

  2. jQuery Validate验证框架详解

    2019独角兽企业重金招聘Python工程师标准>>> 一.导入js库 <script type="text/javascript" src="& ...

  3. shiro放行_Shiro框架详解 tagline

    部分面试资料链接:https://pan.baidu.com/s/1qDb2YoCopCHoQXH15jiLhA 密码:jsam 想获得全部面试必看资料,关注公众号,大家可以在公众号后台回复" ...

  4. [Cocoa]深入浅出 Cocoa 之 Core Data(1)- 框架详解

    深入浅出 Cocoa 之 Core Data(1)- 框架详解 罗朝辉(http://blog.csdn.net/kesalin) CC 许可,转载请注明出处 Core data 是 Cocoa 中处 ...

  5. WebDriver自动化测试框架详解

    webDriver自动化测试框架详解 一. 简介 WebDriver API相对于Selenium Remote Control API来说,虽然同样是控制浏览器,但它的编程接口更加简洁 WebDri ...

  6. atitit.jQuery Validate验证框架详解与ati Validate 设计新特性

    atitit.jQuery Validate验证框架详解与ati Validate 设计新特性 1. AtiValidate的目标1 2. 默的认校验规则1 2.1. 使用方式 1.metadata用 ...

  7. Android 动画框架详解,第 1 部分

    2019独角兽企业重金招聘Python工程师标准>>> Android 平台提供了一套完整的动画框架,使得开发者可以用它来开发各种动画效果,本文将向读者阐述 Android 的动画框 ...

  8. springboot2整合mysql5_SpringBoot2整合SSM框架详解

    SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...

  9. Django REST FRAMEWORK swagger(一)框架详解

    Django REST FRAMEWORK swagger(一.框架详解) 一.Django REST  SWAGGER框架图 具体见下图 二.说明 RESTFul说明 每一个URI代表一种资源: 客 ...

  10. 框架详解_Qt开发技术:QtCharts(一)QtCharts基本介绍以及图表框架详解

    若该文为原创文章,未经允许不得转载 原博主博客地址:https://blog.csdn.net/qq21497936 原博主博客导航:https://blog.csdn.net/qq21497936/ ...

最新文章

  1. 计算机视觉的“惨胜”:反思大型图像数据集
  2. nginx转发端口路由器再转发
  3. 如何读取jar包外的properties和log4j.properties等配置文件
  4. apache php 调优_记一次apache+php调优
  5. CentOS 配置防火墙操作实例(启、停、开、闭端口)
  6. Beyond Compare 3 设置自动换行
  7. IIS6.0应用程序池回收和工作进程【转:http://www.cnblogs.com/freshman0216/archive/2008/06/02/1212460.html】...
  8. caffe学习笔记教程
  9. UNIX网络编程——基本TCP套接字编程 【转贴】
  10. shell中Connection closed by foreign host问题解决
  11. Jenkins定时自动构建项目
  12. QtableWidget的表格加载图片设置
  13. get 和 post 区别
  14. Roslyn 静态分析
  15. FinalShell下载安装教程
  16. html图像标签、绝对路径和相对路径
  17. python可以取代excel吗_python能彻底取代excel吗?
  18. 认识并理顺元宇宙与产业互联网之间的关系,可以打开产业互联网的发展新症结
  19. 龙蜥操作系统(Anolis OS)安装DDE桌面
  20. ElasticSearch基础:从倒排索引说起,快速认知ES

热门文章

  1. Java性能优化的五种方式,让你的Java程序更快、更稳定!
  2. python获取浏览器cookie_python3实现读取chrome浏览器cookie
  3. python代码设置环境变量
  4. aforge java_基于Aforge摄像头调用简单实例
  5. PCB选料时的小技巧和参考网站+电解电容封装尺寸+稳压管型号
  6. attr() 设置option默认选中无效
  7. RSA密钥对生成过程具体实践
  8. win10计算机ser,win10 ch341ser.inf安装失败如何处理_win10无法安装ch341ser.inf修复方法...
  9. PR开场片头模板 恐怖惊悚电影侦探节目logo展示PR模板
  10. jsp入门教程:7个步骤实现JSP的分页显示