Fast R-CNN学习总结
Fast R-CNN是R-CNN的改良版,同时也吸取了SPP-net中的方法。在此做一下总结。
论文中讲到在训练阶段,训练一个深度目标检测网络(VGG16),训练速度要比R-CNN快9倍左右,比SPP-net快3倍左右。在测试阶段,处理一张图片需要0.3s。在PASCAL VOC 2012数据库上的mAP也达到了66%,比R-CNN高两个百分点。
提出背景
这个方法提出的背景是,R-CNN和SPP-net在目标检测方面还有一些不足。不足表现在一下几点:
1、训练分为多个阶段,首先要微调ConvNet,用来提取特征,然后处理proposal,计算得到的ConvNet特征,使用线性SVM进行分类,最后用bounding box进行回归;
2、训练时间和空间开销大。每一张图像上有大量proposal,还要对每个proposal提取特征,并存到磁盘中;
3、测试阶段速度太慢。要对每张图片上的大量proposal提取特征,然后根据提取的特征进行检测。
创新点
Fast R-CNN的创新点在于:
1、相较于R-CNN和SPP-net,检测结果精确度更高;
2、训练只有一个阶段,将多任务的loss结合在一起;
3、在训练时,可更新所有的层;
4、不需要在硬盘中存储特征。
Fast R-CNN的框架

1、我们还是需要使用selective search算法在图像中提取2k个左右的候选框;
2、然后将图像和候选框(即RoIs)信息输入网络中,并在最后的卷积层上对每个RoI求映射关系,并使用RoI pooling layer来将对应的特征统一到相同的大小;
3、最终网络有两个输出,也对应两个loss,一个使用softmax进行分类,另一个进行bounding box回归。
其中的RoI pooling layer是借鉴了SPP-net的方法,只是只有一级“金字塔”,将特征划分为H×W的网格,对每个网格进行max-pooling,提取特征。论文中H=W=7。
Fast R-CNN的训练
我们要对网络进行修改,使用RoI pooling layer替换最后的pooling层(即全连接层之前的pooling层),使用 两个姊妹层替代最后的全连接层和softmax层。两个姊妹层,其中一个是全连接+softmax,用作分类任务;另一个是用于bounding box回归的任务。
在训练阶段,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。实际选择N=2, R=128。N张完整的图像以50%的概率进行水平翻转,R个候选框的构成如下:
| 类别 | 比例 | 方式 |
|---|---|---|
| 前景 | 25% | 与某个真值重叠在[0.5,1]的候选框 |
| 背景 | 75% | 与真值重叠的最大值在[0.1,0.5)的候选框 |
多任务loss
每个RoI都对应着一个ground-truth class
和一个ground-truth bounding box regression target
。
表示K+1个类别各自对应的概率,p由softmax层计算得到。我们将分类任务的loss定义为:

ground-truth bounding box regression target
,bounding box任务的预测结果
,
对应正确的类别。因为我们进行bounding box回归时,不考虑背景,所以
时,bounding box回归没有对应的loss,而当
时,对应的loss为:

其中
所以,最终的loss为:

RoI pooling层的反向传播
是RoI pooling层输入中的一个节点(可以理解为一个像素),
是对应第r个RoI的第j个输出(也可以理解为一个像素),那么RoI pooling层所做的操作为
,其中
,
是池化得到
的小网格区域,由于不同的RoI会可能会包含同样的像素,所以一个
可能对应多个
,最终loss关于
的偏导数为:

Fast R-CNN学习总结的更多相关文章
- R基础学习
R基础学习 The Art of R Programming 1.seq 产生等差数列:seq(from,to,by) seq(from,to,length) for(i in 1:length(x) ...
- 卷积神经网络(CNN)学习笔记1:基础入门
卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01 | In Machine Learning | 9 Comments | 14935 Vie ...
- R语言学习 第四篇:函数和流程控制
变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...
- CNN学习笔记:批标准化
CNN学习笔记:批标准化 Batch Normalization Batch Normalization, 批标准化, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法. 在神经网络的训练过 ...
- CNN学习笔记:目标函数
CNN学习笔记:目标函数 分类任务中的目标函数 目标函数,亦称损失函数或代价函数,是整个网络模型的指挥棒,通过样本的预测结果与真实标记产生的误差来反向传播指导网络参数学习和表示学习. 假设某分类任务共 ...
- CNN学习笔记:卷积神经网络
CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...
- CNN学习笔记:全连接层
CNN学习笔记:全连接层 全连接层 全连接层在整个网络卷积神经网络中起到“分类器”的作用.如果说卷积层.池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的特征表示映射到样 ...
- CNN学习笔记:池化层
CNN学习笔记:池化层 池化 池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样.有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见 ...
- CNN学习笔记:卷积运算
CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...
- CNN学习笔记:激活函数
CNN学习笔记:激活函数 激活函数 激活函数又称非线性映射,顾名思义,激活函数的引入是为了增加整个网络的表达能力(即非线性).若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数.常用的 ...
随机推荐
- 使用XWAF框架(3)——下载文件
XWAF提供了HttpFileDownloader类用于简化用户下载文件的编码.该类提供了重载方法“downloadFile(String filePath, String fName)”实现下载.程 ...
- java 企业门户网站 源码 自适应响应式 freemarker 静态引擎 html5 SSM
官网 http://www.fhadmin.org/ 系统介绍: 1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的ht ...
- 简单的 Android 菜单
Android 创建简单的菜单 一:上下文菜单: 1.在 res 下创建菜单项资源文夹 menu app->右击res->new->android resourse director ...
- Unity各平台内置宏定义
属性 方法 UNITY_EDITOR #define directive for calling Unity Editor scripts from your game code. UNITY_EDI ...
- ionic ios 打包发布流程
1.ionic cordova resources ios 在windows下 生成ios资源包 2.拷贝ionic 项目到mac电脑 不用拷贝platforms 并解压 3.正常情况下wido ...
- Angular 弹窗 控件
这个控件个人很喜欢,比起primgNG等弹窗组建,这款弹窗可以很轻松的定义自己的样式和布局. 可控参数有:宽度,高度,是否带有关闭图标,基本满足基础弹窗需求. 并且 Title/Content/Foo ...
- hexo博客更换主题
前边我们已经学会了博客的搭建了,这次我们来看看怎么样让我们的博客更漂亮,更个性化.那就是来更换博客的主题,让我们的博客与众不同起来.我们可以去hexo的主题官网去挑选你自己喜欢的主题风格.里边收录了很 ...
- python学习笔记:第10天 函数进阶和作用域
目录 1. 函数进阶 2. 命名空间 3. 关键字global和nonlocal 1. 函数进阶 动态接收位置参数 之前写的函数都是固定参数的,假设有个函数需要的参数由几十个,一个个写在形参的位置会非 ...
- Office 365部分安装及同时安装Visio的方法
From MWeb Win版本的Office 365安装包默认安装所有组件,没有选择的页面,在安装Office 365后再安装下载的Visio 2016专业版时,会显示计算机上已经安装了即插即用Off ...
- C-编译器的实现
写这个编译器的目的,是为了完成编译原理课上老师布置的大作业,实际上该大作业并不是真的实现一个编译器,而我选择硬刚,是为了完成我的小愿望--手写内核,编译器和CPU.我花了整个上半学期,写完了WeiOS ...