目标检测(二十二)--R-FCN
无意中看到这个RFCN,瞬间有点蛋疼,因为当时用原始FasterRCNN的时候,替换了最后的全链接层为卷积层,还花了不少时间验证是否有性能损失,结果现在看到,原来有现成的验证过了。。。。
论文地址:https://arxiv.org/abs/1605.06409
虽然其比yolo,ssd出来的晚,不过看模型结构,更多的是针对faster rcnn的一个改进。
一路走来,不同模型都是为了解决不同的痛点而提出的:
- rcnn证明了cnn提取的特征的有效性;
- 而spp解决了如何应对不同尺度feature map的问题;
- fast rcnn通过roi pooling将需要应用到多个候选框上的基CNN模型进行共享,加快了速度并且提升了准确度;
- 而faster rcnn为了更进一步的共享基CNN,将本来需要由SS算法提取候选框的任务一并放入基CNN中,从而提出了RPN子网络;
那么问题来了,fast rcnn发明的ROI pooling中间是由全连接层(就是ROI pooling后分别在回归和分类之前的那层FC)存在,从而将前面的ROIpooling后的feature map 映射成两个部分(对象分类,坐标回归);而越来越多的基CNN,如googlenet,resnet等全卷积网络证明了不要全链接层,效果不但更好,而且能适应不同尺度的图片无压力。本着解决下一个痛点的原则,rfcn应运而生。
主要的尴尬在于,这种从RCNN发展起来的目标检测思路,都是采用分类+位置回归的思路实现,基于CNN的分类算法,要求平移不变形越大越好,而回归又要求平移不变性越小越好。
R-FCN
rfcn是基于faster rcnn的基础上对roi pooling这部分进行了改进。那么我们为了消灭fast rcnn的roi pooling中的全连接层的最naive的想法自然就是丢弃全连接层(起到了融合特征和特征映射的作用),直接将roi pooling的生成的feature map 连接到最后的分类和回归层即可。不过作者们通过做实验发现,这样的结果导致的对象检测结果很差,并且受到《Deep residual learning for image recognition》的启发,认为这主要是:基CNN本身是对图像分类设计的,具有图像移动不敏感性;而对象检测领域却是图像移动敏感的,所以二者之间产生了矛盾。从而对roi pooling进行了很神奇的设计
图1.1 rfcn结构图
如图1.1所示,网络的第一印象,结构大体和faster rcnn很像,都是有个RPN子网络用来训练并生成一堆基于当前图像的对象候选框,而ROI Pooling 就不一样。
基础conv网络是ResNet101,一个RPN,一个位置敏感预测层,一个改进版ROI Pooling层(含投票决策)
2 - 改进的ROI Pooling
图2.1 rfcn中ROI Pooling结构图
如图2.1所示,假设图像经过了基CNN,到达了最后一层feature maps,接下来就是如fast rcnn中一样,提取当前feature map的ROI区域了,然而rfcn不是直接这么干。这里我们设计一个位置敏感的ROI Pooling:将fast rcnn中的ROI 划分成k∗k大小,即图片中本来获取的ROI区域,将其分成k∗k个区域(这里k=3,即分成9个部分)。假设该数据集一共由C类,那么再加个背景类,一共是C+1类。我们希望对每个类别都有各自的位置感应。
所以我们要设计的位置敏感得分map如图2.1中position-sensitive score maps(即从之前基CNN的feature maps,假设有n个通道,通过一样的卷积连接结构生成当前的相同大小map且有k^2(c+1)通道的位置敏感得分maps)。就是几个大色块并列的部分:每个色块表示对对象的特定位置进行敏感,而且每个色块大小中有C+1个map,所以该区域一共有k^2(C+1)个map,其中每个map的大小和之前那个基CNN的feature map大小一致。
那么接下来就需要介绍具体的怎么从position-sensitive score maps得到图2.1中右边那个k∗k大小,通道为C+1的map了。
这里就不贴论文公式了,我们以图解释
图2.2,从位置敏感得分map到位置敏感ROI pooling
2.1 ROI区域的分类
图2.2是在一个类别下而不是C+1个类别同时进行。假设我们图2.1的位置敏感mapk=3,那么当前一共有:
这么9个不同颜色的feature maps,其中每个feature maps中都有C+1个feature map。
左上 | 中上 | 右上 |
左中 | 中间 | 右中 |
左下 | 中下 | 右下 |
上述为划分成k∗k,且k=3情况下的位置对应关系
- 1 - 首先处理类别为1的部分,即如上面表格所示:
- 2 - 如图2.2中,就是这抽取出来的9个feature map,然后如图2.2所示,对每个feature map按照各自敏感的区域,将其框出来:比如在这9个feature map中第一个特征图表示左上位置,那么提取这个feature map的ROI区域,然后将其分成k∗k的网格,提取其表示的左上位置,即第一个网格;同理第二个表示中上的feature map提取其k∗k的网格中第二个网格,因为当前feature map表示的是中上位置,当前map的第二个网格也表示中上位置;
- 3 - 对抽取出来的部分进行求均值,然后按照位置组成一个k*k(即3*3)大小的矩阵;
- 4 - 对这个k*k大小的矩阵求和,得到一个值。
- 5 - 对类别2~C+1分别进行步骤1-4的操作,从而最终得到一个1*(C+1)这样的向量(如图2.1),将这个向量进行softmax,从而估计当前feature map对应的ROI区域是什么类别
2.2 ROI区域的回归
上面说到了从基CNN的feature map得到ROI pooling直到softmax的分类,这里接着说如何微调ROI本身的区域,这部分与分类其实很相似:
- 1 - 如图2.1的位置敏感maps是有k*k*(c+1)个通道的,我们依然从基CNN的feature map部分连接出一个4*k*k通道的maps(与位置敏感maps并列),用来做候选框坐标微调,如上面表格所示;
- 2 - 如分类部分的步骤1-4一样的操作,最后得到一个1∗4的向量,即x,y,w,h
- 3 - 按照之前的那些模型一样去计算目标函数即可
问题
问:为什么需要做如图2.2这种特定map的特定区域的选取,而不是直接在特定map上将整个ROI区域都选取?
答:将k设为1就行了,就是整个ROI选取,作者做过实验的,效果不好。
目标检测(二十二)--R-FCN相关推荐
- 深度学习论文阅读目标检测篇(二):Fast R-CNN《Fast R-CNN》
深度学习论文阅读目标检测篇(二):Fast R-CNN<Fast R-CNN> Abstract 摘要 1. Introduction 引言 1.1 RCNN and SPPnet 1.2 ...
- sklearn逻辑回归 极大似然 损失_收藏!攻克目标检测难点秘籍二,非极大值抑制与回归损失优化之路...
点击上方"AI算法修炼营",选择加星标或"置顶" 标题以下,全是干货 前面的话 在前面的秘籍一中,我们主要关注了模型加速之轻量化网络,对目标检测模型的实时性难点 ...
- OpenCV学习(二十二) :反向投影:calcBackProject(),mixChannels()
OpenCV学习(二十二) :反向投影:calcHist(),minMaxLoc(),compareHist() 参考博客: 反向投影backproject的直观理解 opencv 反向投影 颜色直方 ...
- 无人驾驶汽车系统入门(二十二)——使用Autoware实践激光雷达与摄像机组合标定
无人驾驶汽车系统入门(二十二)--使用Autoware实践激光雷达与摄像机组合标定 单目相机分辨率高,我们可以使用各种深度学习算法完成对目标检测,但是缺乏深度,坐标等信息.激光雷达能够获得目标相当精确 ...
- 【Visual C++】游戏开发五十五 浅墨DirectX教程二十二 水乳交融的美学:alpha混合技术
本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/15026917 作者:毛星 ...
- 插入DLL和挂接API——Windows核心编程学习手札之二十二
插入DLL和挂接API --Windows核心编程学习手札之二十二 如下情况,可能要打破进程的界限,访问另一个进程的地址空间: 1)为另一个进程创建的窗口建立子类时: 2)需要调试帮助时,如需要确定另 ...
- OpenCV学习笔记(二十一)——绘图函数core OpenCV学习笔记(二十二)——粒子滤波跟踪方法 OpenCV学习笔记(二十三)——OpenCV的GUI之凤凰涅槃Qt OpenCV学习笔记(二十
OpenCV学习笔记(二十一)--绘图函数core 在图像中,我们经常想要在图像中做一些标识记号,这就需要绘图函数.OpenCV虽然没有太优秀的GUI,但在绘图方面还是做得很完整的.这里就介绍一下相关 ...
- 学习笔记:CentOS7学习之二十二: 结构化命令case和for、while循环
目录 学习笔记:CentOS7学习之二十二: 结构化命令case和for.while循环 22.1 流程控制语句:case 22.2 循环语句 22.1.2 for-do-done 22.3 whil ...
- Android开发笔记(一百二十二)循环器视图RecyclerView
RecyclerView RecyclerView是Android在support-v7库中新推出控件,中文别名为循环器视图,它的功能非常强大,可分别实现ListView.GridView,以及瀑布流 ...
- 网络存储技术Windows server 2012 (项目二十二 远程异地灾备中心的部署)
网络云存储技术Windows server 2012 (项目二十二 远程异地灾备中心的部署) 前言 网络存储技术,是以互联网为载体实现数据的传输与存储,它采用面向网络的存储体系结构,使数据处理和数据存 ...
最新文章
- 2021年春季学期-信号与系统-第九次作业参考答案-第三小题
- 模态框在IE下的问题,即position:fixed在IE下不兼容的处理方式
- php $globa作用是l,php 关键字global在定义变量中的作用
- 余额宝升级,限额限时解除,以后再也不用定闹钟抢破头了!
- express html文件接收路由参数,express 获取post 请求参数
- Storm入门教程 Storm安装部署步骤
- 在windows上搭建一个ftp服务器
- 对面象对象概念的理解、解释
- 应用SqlParameter防止注入式攻击,打开主窗体关闭登录窗体
- LaTeX 阿拉伯语
- ps和matlab哪个,Matlab与photoshop在数字图像处理中的比较
- AtCoder Regular Contest 120 解题报告
- Linux在线词典问题,linux中goldendict发声词典播放报错问题解决方案
- iOS第三方验证简单接入Game Center
- php fopen 追加,PHP文件写入或追加
- 农产品进出口成都代办公司注册流程
- oracle之concat()函数
- CryptoJS的hmac-sha1算法使用(转base64)——2022.11.18
- python毕业设计 基于django框架个人博客系统毕业设计设计与实现
- 倒计时工具类:PYContDownManager
热门文章
- PLT hook与Inline hook
- android pm命令用法
- LNMP环境下搭建SVN服务器
- 比较linux的桌面环境的使用和异同?_深度UI + Ubuntu系统,堪称最强最美Linux发行版!你敢升级吗?...
- java request 原理_JavaWeb response和request对象原理及实例解析
- java android 五子棋游戏_基于Android平台五子棋游戏最终版.doc
- python打印tensor_如何在TensorFlow中打印SparseTensor内容?
- python编程语言集合_【python】编程语言入门经典100例--12
- springboot做网站_Github点赞接近100k的SpringBoot学习教程+实战推荐!牛批!
- bootstrap日期控件 只显示 年月