RCNN很好地解决了目标检测分类和定位的问题。但是缺点是速度太慢。

原因1:2k个候选区域都要经过变形成统一的正方形才能依次输入CNN进行特征提取。候选区域可能是互相包含的,这就导致原图同一个特征的重复提取。

原因2:RCNN的分类和回归是分开的,耗费时间和空间。每个候选区域都要经过相同的CNN和分类+回归,复杂度与候选区域数量成正比。

如下图所示,R-CNN先得到约2000个候选区域,对每个候选区域进行warp,特征提取,SVM分类与Bbox的位置回归。

Ross Girshick在15年推出Fast RCNN。同样使用最大规模的网络,FastRCNN和RCNN相比,训练时间从84小时减少为9.5小时,测试时间从47秒减少为0.32秒。我们看看Fast RCNN是如何解决最开始提到的两个问题的。

针对问题1

原始做法是先得到原始图像的ROI,再分别送CNN,改进思路是直接将原图送入CNN得到feature map,然后再加入候选框的信息,在feature map上得到候选区域映射的patch。这样就只对图像进行了一次卷积特征的计算,比RCNN提速100倍。

这样做又会引入两个新问题,原始先得到ROI可以通过warp归一化尺寸控制到全连接时的大小,那现在在特征图上怎么进行尺寸的归一化,总不能继续warp吧?还有,既然是在特征图上找ROI,那候选区域与特征图的对应关系如何确定呢?

关于第一点尺寸归一化的问题,何恺明研究员在2014的论文中将空间金字塔池化Spatial Pyramid Pooling(SPP)结构引入了CNN,使CNN可以处理任意size和scale的图像。

如上图所示,在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整bin大小,从右到左三级bin的个数分别是1,4,16,这样SPP的输出尺度始终是固定的,是1+4+16维。提取候选区特征和构建金字塔的过程都在ROI Pooling中完成。

为什么bin的个数之和就是输出的维度呢?因为这一层使用最大池化(max pooling)来将RoI区域转化成固定大小为HW的特征图。如下图,我们可以设定每个候选区域的分块数,但依然不能保证每一个bin内的大小是一样的,最大池化就可以简单理解成求块内最大值的过程,这样不管每一个bin是多大,最后都只输出1个值:最大值。

Fast-RCNN就使用了SPPlayer的变种——RoI pooling层。SPP是金字塔结构,每层的最大池化结果拼接做输出,但其实金字塔的每层都可以起到归一化尺寸的目的。RoI pooling层就只使用了金字塔的一层,因为实验表明多尺度学习只增加了一点点mAP,但是计算量成倍增加。

关于第二点特征图位置与候选框位置对应关系的问题。这里要引入感受野Receptive Field的概念,表示特征图中每个像素点源自哪部分原始像素点的加权和。由特征图是可以倒推出特征图中每个像素点的感受野的,计算过程受到卷积核填充因子和步长的影响,为了方便计算,设定卷积核尺寸为F时填充大小为F/2,那么映射关系就只与步长S有关:特征图(0,0)位置对应的感受野中心坐标是(0,0);特征图(x,y)位置对应的感受野中心坐标是(Sx,Sy)。但现在我们已知的是空域的候选框位置,怎么得到该候选框在特征图中的位置呢,其实和感受野的颜色关系是差不多的,都是S倍的关系,只不过要根据取整的关系进行正负1的调整:

Given a window in the image domain, we project the left (top) boundary by: x 0 = bx/Sc + 1 and the right (bottom) boundary x 0 = dx/Se − 1.

针对问题2

另外,之前RCNN的处理流程是先提proposal,然后CNN提取特征,之后用SVM分类器,最后再做bbox regression,而在Fast-RCNN中,作者巧妙的把bbox regression放进了神经网络内部,与region分类和并成为了一个multi-task模型,损失函数使用了多任务损失函数(multi-task loss),将边框回归直接加入到CNN网络中训练。实际实验也证明,这两个任务能够共享卷积特征,并相互促进。

既然是多任务,那么损失函数就由两项构成:一个是分类损失,一个是回归损失。因为是多分类,理所当然地使用softmax得到该RoI属于各个标签的概率,。但是这里没有使用交叉熵,对于真实标签

对于使用回归来修正Bbox的定位,我们首先要以四元组的形式来表示方框的位置和大小:,回归损失就是四个维度的损失和:

其中smooth函数:

函数曲线如下:

最终的损失函数:

其中用于平滑分类与回归的权重,在实验中取1。[]是艾弗森括号,满足括号内内容时取1,否则取0(此时RoI类别是背景,没有定位框,忽略回归任务)。

Reference:

1.http://shartoo.github.io/RCNN-series/

2.https://blog.csdn.net/shenxiaolu1984/article/details/51036677

3.https://www.cnblogs.com/skyfsm/p/6806246.html

Fast R-CNN整体把握相关推荐

  1. Faster R CNN

    Faster R CNN 3 FASTER R-CNN 我们的Faster R CNN 由两个模块组成,第一个模块是 proposes regions 的全卷积网络,第二个是使用 proposed r ...

  2. 负数比较大小_【教研活动】整体把握负数脉络 深度解读教材意图——鲤城区实验小学数学组单元整体教学系列研讨活动...

    目前,单元整体教学已逐渐成为教师提升教学效率和教学质量的新手段.以模块化数学教材的主题单元为依托,对其教学准备.教学手段.教学内容.课后习题等教学资源进行整体把握,有机整合,并实施统一教学对提升教学质 ...

  3. 小学数学教材整体把握的策略研究

    小学数学教材整体把握的策略研究 (2012-11-01 13:13:03) 正在上传-重新上传取消​转载▼ 标签: 杂谈 分类: 文献研究 小学数学教材整体把握的策略研究 作者:内详 摘  要:数学知 ...

  4. Fater R-CNN 整体把握

    在R-CNN中提到过,候选区域的提取和之后的目标检测其实是独立的,所以我们可以使用任意的算法如SS.Fast-RCNN改进的是目标检测部分,但是其实候选区域的提取也挺费时的,Faster R-CNN就 ...

  5. 一、(1):开题后的内容整体把握--多目标检测综述

    学习目标: 1.多目标检测算法模型 2.主流的用于多目标检测的卷积神经网络框架 3.目标检测算法(one-stage.two-stage) 学习内容: 1. 目标检测算法模型有哪些 目标检测算法模型有 ...

  6. Tomcat源码分析 | 一文带你整体把握架构及组件

    前言 Tomcat的前身为Catalina,而Catalina又是一个轻量级的Servlet容器.在美国,catalina是一个很美的小岛.所以Tomcat作者的寓意可能是想把Tomcat设计成一个优 ...

  7. 快麦erp系统设计开发经验——整体把握

    介绍产品时面试官会考察应聘者的沟通能力和思考能力,我们大部分情况都是做产品的一个功能或一个模块,但是即使是这样,自己有没有把整个系统框架或产品搞清楚,并能介绍清楚. 为什么做这个系统?这个系统的价值是 ...

  8. SEO,搜索引擎优化原理方法等整体把握

    SEO 搜索算法: 全文文字 title 标签,title里面的文字 link 链接 link 链接里的文字 站点信任度 最佳实践: 一.设置title 准确的描述当前网页的内容 提高站点内title ...

  9. 目标检测(R-CNN、Fast R-CNN、Fater R-CNN)

    目标检测(R-CNN.Fast R-CNN.Faster R-CNN) 1.目标检测(object detection) 图像识别是输入一张图像,输出该图像对应的类别.目标检测的输入同样是一张国像,但 ...

最新文章

  1. swift支持多线程操作数据库类库-CoreDataManager
  2. 响应式网页之媒体查询
  3. 数据库-ADONET-向数据库提交更新
  4. ITK:使用二进制阈值对图像阈值
  5. 【渝粤教育】广东开放大学 财政学 形成性考核 (43)
  6. QT 连接 sql server数据库 完整演示
  7. MFC架构之CWinThread类
  8. 2020-04-04 接收队列--配置所有的TCP数据流定向到接收队列2中
  9. 【Pytorch】谈谈我在PyTorch踩过的12坑
  10. 图像分割:直方图区域划分及信息统计介绍
  11. 金牛判势 精品起涨预警 主升浪起爆点指标 通达信绝对精准买点指标选股公式
  12. 解决 invalid DSN: missing the slash separating the database name
  13. ulp(unit in the last place)是什么意思
  14. 如何理解实时频谱分析仪的几个“带宽”参数(1)——实时带宽(RTBW)
  15. Java中的接口详解
  16. 爬取某视频网站电影,仅参考学习
  17. preg_match_all 和 preg_replace 区别
  18. 黑帽黑客历史盘点:这群人到底厉害到什么程度?
  19. Unresolved reference(未解析的引用)——解决Pycharm无法导入包问题
  20. 智牛股_第4章_Nacos+Ceph分布式存储+Netty通讯

热门文章

  1. 95后CV工程师晒出工资单:狠补了这个,真香…
  2. 可以闭眼入的O'REILLY机器学习神书出新版了!
  3. 为什么搜索与推荐场景用AUC评价模型好坏?
  4. ACL20 best paper荣誉提名 | DO NOT STOP Pre-training!
  5. 最全Java架构师130面试题:微服务、高并发、大数据、缓存等中间件
  6. CCKS 2018 | 工业界论坛报告简介
  7. pip加速+百度镜像|清华镜像
  8. 中文词语概念上下位图谱项目
  9. PLECS软件学习使用(一)简单的RLC电路搭建
  10. MFC编程入门之十五(对话框:一般属性页对话框的创建及显示)