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学习总结的更多相关文章

  1. R基础学习

    R基础学习 The Art of R Programming 1.seq 产生等差数列:seq(from,to,by) seq(from,to,length) for(i in 1:length(x) ...

  2. 卷积神经网络(CNN)学习笔记1:基础入门

    卷积神经网络(CNN)学习笔记1:基础入门 Posted on 2016-03-01   |   In Machine Learning  |   9 Comments  |   14935  Vie ...

  3. R语言学习 第四篇:函数和流程控制

    变量用于临时存储数据,而函数用于操作数据,实现代码的重复使用.在R中,函数只是另一种数据类型的变量,可以被分配,操作,甚至把函数作为参数传递给其他函数.分支控制和循环控制,和通用编程语言的风格很相似, ...

  4. CNN学习笔记:批标准化

    CNN学习笔记:批标准化 Batch Normalization Batch Normalization, 批标准化, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法. 在神经网络的训练过 ...

  5. CNN学习笔记:目标函数

    CNN学习笔记:目标函数 分类任务中的目标函数 目标函数,亦称损失函数或代价函数,是整个网络模型的指挥棒,通过样本的预测结果与真实标记产生的误差来反向传播指导网络参数学习和表示学习. 假设某分类任务共 ...

  6. CNN学习笔记:卷积神经网络

    CNN学习笔记:卷积神经网络 卷积神经网络 基本结构 卷积神经网络是一种层次模型,其输入是原始数据,如RGB图像.音频等.卷积神经网络通过卷积(convolution)操作.汇合(pooling)操作 ...

  7. CNN学习笔记:全连接层

    CNN学习笔记:全连接层 全连接层 全连接层在整个网络卷积神经网络中起到“分类器”的作用.如果说卷积层.池化层和激活函数等操作是将原始数据映射到隐层特征空间的话,全连接层则起到将学到的特征表示映射到样 ...

  8. CNN学习笔记:池化层

    CNN学习笔记:池化层 池化 池化(Pooling)是卷积神经网络中另一个重要的概念,它实际上是一种形式的降采样.有多种不同形式的非线性池化函数,而其中“最大池化(Max pooling)”是最为常见 ...

  9. CNN学习笔记:卷积运算

    CNN学习笔记:卷积运算 边缘检测 卷积 卷积是一种有效提取图片特征的方法.一般用一个正方形卷积核,遍历图片上的每一个像素点.图片与卷积核重合区域内相对应的每一个像素值乘卷积核 .内相对应点的权重,然 ...

  10. CNN学习笔记:激活函数

    CNN学习笔记:激活函数 激活函数 激活函数又称非线性映射,顾名思义,激活函数的引入是为了增加整个网络的表达能力(即非线性).若干线性操作层的堆叠仍然只能起到线性映射的作用,无法形成复杂的函数.常用的 ...

随机推荐

  1. 我的QT5学习之路(二)——第一个程序

    一.前言 “工欲善其事,必先利其器”,上一节,我介绍了Qt的安装和配置方法,搭建了基本的开发平台.这一节,来通过一个简单的例子来了解Qt的编程样式和规范,开始喽~~~ 二.第一个程序——Hello W ...

  2. 怎样卸载wineQQ?

    好久没实用ubuntu系统的wineqq了.今天用的时候,提示无法使用,要求官网又一次下载新版本号,  感觉挺麻烦的,准备卸载,半天卸载不了. 经过努力,终于还是卸载了. 卸载命令: sudo dpk ...

  3. 使用java代码将时间戳和时间互相转换

    时间戳转时间: SimpleDateFormat simpleDateFormat = null; simpleDateFormat = new SimpleDateFormat("yyyy ...

  4. Python中级 —— 03进程与线程

    多任务的实现有3种方式: 多进程模式: 多线程模式: 多进程+多线程模式. ** 进程: ** 不同任务,例如打开一个写字本,就是开启一个新进程. 多进程 Unix/Linux操作系统提供了一个for ...

  5. git pull 发生冲突解决办法

    冲突原因:远程仓库的同一个文件的代码,和本地的文件代码不一样 解决办法 : 1.git stash (把本地冲突的代码隐藏) 2.git pull 3.git stash pop (将隐藏的和pull ...

  6. 服务器远程连接mysql问题解决

    一. centos下解决远程连接不上的问题. 1.查看centos 下防火墙是否关闭: 通过进程: ps -aux |grep firewalld ps -ef |grep firewalld 通过服 ...

  7. 解决在 win10 下 vs2017 中创建 MFC 程序拖放文件接收不到 WM_DROPFILES 消息问题

    解决方案 这个问题是由于 win10 的安全机制搞的鬼,即使以管理员权限运行也不行,因为它会把 WM_DROPFILES 消息过滤掉,那怎么办呢?只需在窗口初始化 OnInitDialog() 里添加 ...

  8. Linuxg环境搭建

    1.使用VMWARE软件安装虚拟机,创建打开将进入桌面. 2.配置静态IP.IP环境关系到能否使用网络进行软件的下载,即apt的使用. 1).找到文件并作如下修改:sudo vim /etc/netw ...

  9. Docker 运行时的用户与组管理的方法

    docker 以进程为核心, 对系统资源进行隔离使用的管理工具. 隔离是通过 cgroups (control groups 进程控制组) 这个操作系统内核特性来实现的. 包括用户的参数限制. 帐户管 ...

  10. 用gogs搭建git服务器

    Gogs 是一款极易搭建的自助 Git 服务. Gogs 的目标是打造一个最简单.最快速和最轻松的方式搭建自助 Git 服务.使用 Go 语言开发使得 Gogs 能够通过独立的二进制分发,并且支持 G ...