标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN
最近两周忙着上网课、投简历,博客没什么时间写,姑且把之前做的笔记放上来把。。。
下面是我之前看论文时记的笔记,直接copy上来了,内容是Fast R-CNN的,以后如果抽不出时间写博客,就放笔记上来(实则偷懒。。。。)
1、改进
- 端到端的学习
- 将图片用选择搜索算法(select search)得到2000个候选区域(RegionProposal)的坐标信息
- 将图片归一化为指定格式,输入 CNN(AlextNet/VGG/ResNet)对图片进行进行特征提取,生成一张特征图
- 将开始得到的坐标信息通过一定的映射关系转换为对应特征图的坐标,截取对应的 RegionProposal
- 对提取出的 RegionProposal 进行 ROIPooling(SPPNet 简化版),将不同尺寸的图像映射为相同尺寸的特征图
- 将上述特征图输入全连接层进行分类
- 定义多任务损失函数,将分类和边框回归融合到一个模块当中
- 使用 Sfotmax 取代 SVM 作为分类器(为了实现端到端的训练)
- 增加了一个与 Softmax 层平行的 LinearRegression 层,用于回归优化边框

2、解决了 R-CNN/SPP-Net 的缺陷
- 训练 & 测试速度慢
- R-CNN 中用 CNN 对每一个候选区域反复提取特征,而一张图片的2000个候选区域之间有大量重叠部分,这一设定造成特征提取操作浪费大量计算
- Fast R-CNN 将整个图像归一化后直接送入 CNN 网络,卷积层不进行候选区的特征提取,而是在最后一个池化层加入候选区域坐标信息,进行特征提取的计算。
- 训练所需空间大
- R-CNN 中目标分类与候选框的回归是独立的两个操作,并且需要大量特征作为训练样本。
- Fast R-CNN 将目标分类与候选框回归统一到 CNN 网络中来,不需要额外存储特征。
- 无法对空间金字塔池之前的卷积层进行更新
- FastR-CNN 可以对所有网络层参数进行更新
3、预训练注意事项
- 预训练时
- 分类器是一个单独的全连接层+Softmax,没有边框回归
- 没有ROI层,取而代之的是一个池化层
- 预训练结束后,进行调优训练时
- 需将分类器替换为并行的【新全连接层1+原softmax层1000个分类输出修改为21个分类输出(20种类+背景)】+【新全连接层2+候选区域窗口回归层】
- 将VGG-16网络最后一层池化层替换为 ROI 层
4、缺点
- 在 CNN 提取后的特征图像上使用 select search 生成 RegionProposal,效率太低,计算量太大
5、ROIPoolling
- 名词解释
- ROI 指的是所提取出的关注区域(Feature map/RegionProposal)
- 原始图片经过多层卷积与池化后(CNN 前向提取特征图),得到整图的 feature map
- 由 selective search 产生的大量 proposal,经过映射所得到其在 feature map 上的映射区域,即 ROI
- ROI 指的是所提取出的关注区域(Feature map/RegionProposal)
- 上述提取出的 ROI 即作为 ROI Pooling 层的输入
- ROIPolling 流程(如下图 )
- 将输入的(h,w)的 ROI 分割成 H*W 个子窗口
- 每个子窗口的大小约为(h/H,w/W),其中 H、W 为超参数,如设定为7 x 7
- 对每个子窗口进行 max-pooling 操作,得到固定输出大小的 feature map
- 之后进行后续的全连接层操作

标题 发布状态 评论数 阅读数 操作 操作 CNN目标检测系列算法发展脉络简析——学习笔记(三):Fast R-CNN的更多相关文章
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- openresty 学习笔记三:连接redis和进行相关操作
openresty 学习笔记三:连接redis和进行相关操作 openresty 因其非阻塞的调用,令服务器拥有高性能高并发,当涉及到数据库操作时,更应该选择有高速读写速度的redis进行数据处理.避 ...
- Javascript学习笔记三——操作DOM(二)
Javascript学习笔记 在我的上一个博客讲了对于DOM的基本操作内容,这篇继续巩固一下对于DOM的更新,插入和删除的操作. 对于HTML解析的DOM树来说,我们肯定会时不时对其进行一些更改,在原 ...
- ThinkPHP 学习笔记 ( 三 ) 数据库操作之数据表模型和基础模型 ( Model )
//TP 恶补ing... 一.定义数据表模型 1.模型映射 要测试数据库是否正常连接,最直接的办法就是在当前控制器中实例化数据表,然后使用 dump 函数输出,查看数据库的链接状态.代码: publ ...
- python学习笔记三 文件操作(基础篇)
文件操作 打开文件 open(name[,mode[,buffering]]) open函数使用一个文件名作为强制参数,然后返回一个文件对象.[python 3.5 把file()删除掉] w ...
- 数据库学习笔记 (三) python操作数据库
python 操作MYSQL数据库主要有两种方式: 使用原生模块:pymysql ORM框架:SQLAchemy 一.pymysql 1.1下载安装模块 第一种:cmd下:执行命令下载安装:pip3 ...
- C# LINQ学习笔记三:LINQ to OBJECT之操作字符串
本笔记摘抄自:https://www.cnblogs.com/liqingwen/p/5814204.html,记录一下学习过程以备后续查用. 一.统计单词在字符串中出现的次数 请注意,若要执行计数, ...
- MongoDB学习笔记(三) 在MVC模式下通过Jqgrid表格操作MongoDB数据
看到下图,是通过Jqgrid实现表格数据的基本增删查改的操作.表格数据增删改是一般企业应用系统开发的常见功能,不过不同的是这个表格数据来源是非关系型的数据库MongoDB.nosql虽然概念新颖,但是 ...
- Tornado学习笔记(三) 请求方式/状态码
本章我们来学习 Tornado 支持的请求方式 请求方式 Tornado支持任何合法的HTTP请求(GET.POST.PUT.DELETE.HEAD.OPTIONS).你可以非常容易地定义上述任一种方 ...
随机推荐
- C语言学习笔记之获取文件长度
本文为原创文章,转载请标明出处 #include <stdio.h> #include <stdlib.h> int main() { FILE *inputFile; inp ...
- 一个类似ThinkPHP的Node.js框架——QuickNode
QuickNode Node.js从QuickNode开始,让restful接口开发更简单! PHP的MVC 作为一名曾经的PHP开发者,我也有过三年多的thinkphp使用经验,那是我学习PHP接触 ...
- MariaDB 外键
drop database literatureDB; create database literatureDB; use literatureDB; # 类型表 create table `type ...
- C++笔试常见问题
C++提供的编译预处理功能主要有以下三种: 宏定义 文件包含 条件编译 预编译又称为预处理 , 是做些代码文本的替换工作.处理#开头的指令 , 比如拷贝 #include包含的文件代码, #defin ...
- 2018年宜賓美酒文化節浮空投影舞美特效 / 2018 Yibing Wine Festival Visual Effect Projection
客户 Client:五粮液集团 硬件 Hardware:PC,巴可投影机30,000流明*2 Barco projector 30,000 lumen*2 软件 Software:Resolume, ...
- Socket.io 入门 - Renyi的博客
Socket.io Vue 中使用 NPM 安装 npm install vue-socket.io --save npm install --save socket.io-client 引用 详情 ...
- Redis 原理
线程IO模型 Redis 是个单线程程序!(对外网络请求服务) 对于那些时间复杂度为 O(n) 级别的指令,一定要谨慎使用,一不小心就可能会导致 Redis 卡顿. 使用缓冲区,事件轮询 API(Li ...
- IDEA 详细使用教程
第一步:安装 略 安装首先需要Java语言的运行环境,这里不做概述. 第二步:破解 这里使用的是2016版的,所以直接在网上搜索秘钥即可 https://blog.csdn.net/ksksjipen ...
- Webpack 常用 modules
@(Javascript)[webpack] babel babel-core: babel 核心程式,知道如何載入程式碼.解析和輸出檔案(但不包含編譯). babel-loader: 用來告訴 ba ...
- 关于scanf与gets的区别
以下内容主要来源: scanf与gets读取字符串 scanf与gets函数读取字符串的区别 前两天有个同学问我scanf与gets的区别说了半天也没说出来个所以然,就搜了一下,scanf()和get ...