基于R-CNN和SPP-Net思想,RBG提出了Fast-R-CNN算法。如果选用VGG16网络进行特征提取,在训练阶段,Fast-R-CNN的速度相比RCNN和SPP-Net可以分别提升9倍和3倍;在测试阶段,Fast-R-CNN的速度相比RCNN和SPP-Net可以分别提升213倍和10倍。

R-CNN和SPP-Net缺点:

1.R-CNN和SPP-Net的训练过程类似,分多个阶段进行,实现过程较复杂。这两种方法首先选用Selective Search方法提取proposals,然后用CNN实现特征提取,最后基于SVMs算法训练分类器,在此基础上还可以进一步学习检测目标的boulding box。

2.R-CNN和SPP-Net的时间成本和空间代价较高。SPP-Net在特征提取阶段只需要对整图做一遍前向CNN计算,然后通过空间映射方式计算得到每一个proposal相应的CNN特征;区别于前者,RCNN在特征提取阶段对每一个proposal均需要做一遍前向CNN计算,考虑到proposal数量较多(~2000个),因此RCNN特征提取的时间成本很高。R-CNN和SPP-Net用于训练SVMs分类器的特征需要提前保存在磁盘,考虑到2000个proposal的CNN特征总量还是比较大,因此造成空间代价较高。

3.R-CNN检测速度很慢。RCNN在特征提取阶段对每一个proposal均需要做一遍前向CNN计算,如果用VGG进行特征提取,处理一幅图像的所有proposal需要47s。

4.特征提取CNN的训练和SVMs分类器的训练在时间上是先后顺序,两者的训练方式独立,因此SVMs的训练Loss无法更新SPP-Layer之前的卷积层参数,因此即使采用更深的CNN网络进行特征提取,也无法保证SVMs分类器的准确率一定能够提升。

Fast-R-CNN亮点:

1.Fast-R-CNN检测效果优于R-CNN和SPP-Net

2.训练方式简单,基于多任务Loss,不需要SVM训练分类器。

3.Fast-R-CNN可以更新所有层的网络参数(采用ROI Layer将不再需要使用SVM分类器,从而可以实现整个网络端到端训练)。

4.不需要将特征缓存到磁盘。

Fast-R-CNN架构:

Fast-R-CNN的架构如下图所示(https://github.com/rbgirshick/fast-rcnn/blob/master/models/VGG16/train.prototxt,可以参考此链接理解网络模型):输入一幅图像和Selective Search方法生成的一系列Proposals,通过一系列卷积层和Pooling层生成feature map,然后用RoI(region of ineterst)层处理最后一个卷积层得到的feature map为每一个proposal生成一个定长的特征向量roi_pool5。RoI层的输出roi_pool5接着输入到全连接层产生最终用于多任务学习的特征并用于计算多任务Loss。全连接输出包括两个分支:1.SoftMax Loss:计算K+1类的分类Loss函数,其中K表示K个目标类别,1表示背景;2.Regression Loss:即K+1的分类结果相应的Proposal的Bounding Box四个角点坐标值。最终将所有结果通过非极大抑制处理产生最终的目标检测和识别结果。

3.1 RoI Pooling Layer

事实上,RoI Pooling Layer是SPP-Layer的简化形式。SPP-Layer是空间金字塔Pooling层,包括不同的尺度;RoI Layer只包含一种尺度,如论文中所述7*7。这样对于RoI Layer的输入(r,c,h,w),RoI Layer首先产生7*7个r*c*(h/7)*(w/7)的Block(块),然后用Max-Pool方式求出每一个Block的最大值,这样RoI Layer的输出是r*c*7*7。

3.2 预训练网络初始化

RBG采用前辈们训练ImageNet时得到的网络模型(例如VGG16模型)初始化Fast-R-CNN模型中RoI层之前的所有层,我们可以把网络结构总结如下:13个卷积层+4个Pooling层+RoI层+2个FC层+两个平级层(即SoftmaxLoss层和SmoothL1Loss层)。其中,VGG16的第5个Pool层倍RoI层替换掉。

3.3 Finetuning for detection

3.3.1 Fast-R-CNN在网络训练阶段采用了一些trick,每个minibatch由N个图片(N=2)中的R个Proposal(R=128)组成。这种方式比从128张不同图片中提取1个Proposal的方式块64倍。当然,这种方式在一定程度会造成收敛速度变慢。另外,Fast-R-CNN无需SVM分类器,而是通过Softmax Classifer和Bounding-Box Regressors联合训练的方式更新所有参数。注意:从2张图中选取128个proposals时,需要保证至少25%的proposals与groundtruth的IoU超过0.5,剩下的全部作为背景类。不需要其它任何数据扩增操作。

3.3.2 多任务Loss:Fast R-CNN网络有两个同级别子Layer,分别用于分类和回归。分类选用SoftmaxLoss,回归使用SmoothL1Loss.两者的权重比例为1:1

3.3.3 SGD hyer-parameters:用于softmax分类任务和bounding-box回归的fc层参数用标准差介于0.01~0.001之间的高斯分布初始化。

3.4 Truncated SVD快速检测

在检测段,RBG使用truncated SVD优化较大的FC层,这样RoI数目较大时检测端速度会得到的加速。

Fast-R-CNN实验结论:

1.多任务Loss学习方式可以提高算法准确率

2.多尺度图像训练Fast-R-CNN与单尺度图像训练相比只能提升微小的mAP,但是时间成本却增加了很多。因此,综合考虑训练时间和mAP,作者建议直接用一种尺度的图像训练Fast-R-CNN.

3.基本上没人不会赞成:训练图像越多,模型准确率也会越高。

4.RBG的结果表明SoftmaxLoss的方式比SVMs分类器的结果略好一点点,虽然这不能绝对性说明自己的SoftmaxLoss好到哪儿去,但是至少大家不用再那么麻烦的去分步训练一个检测和识别网络了。

5.不是说Proposal提取的越多效果会越好,提的太多反而会导致mAP下降。

Fast-R-CNN的更多相关文章

  1. RCNN--对象检测的又一伟大跨越 2(包括SPPnet、Fast RCNN)(持续更新)

    继续上次的学习笔记,在RCNN之后是Fast RCNN,但是在Fast RCNN之前,我们先来看一个叫做SPP-net的网络架构. 一,SPP(空间金字塔池化,Spatial Pyramid Pool ...

  2. 行为识别(action recognition)相关资料

    转自:http://blog.csdn.net/kezunhai/article/details/50176209 ================华丽分割线=================这部分来 ...

  3. ASP.NET MVC5+EF6+LayUI实战教程,通用后台管理系统框架(4)- 漂亮的登录界面

    前言 这一讲,给大家添加登录页面 实现 添加Login的Index视图 @{ Layout = null; } <!DOCTYPE html> <html class="l ...

  4. LeetCode(234) Palindrome Linked List

    题目 Given a singly linked list, determine if it is a palindrome. Follow up: Could you do it in O(n) t ...

  5. 【计算机视觉】行为识别(action recognition)相关资料

    ================华丽分割线=================这部分来自知乎==================== 链接:http://www.zhihu.com/question/3 ...

  6. Django项目:CRM(客户关系管理系统)--81--71PerfectCRM实现CRM项目首页

    {#portal.html#} {## ————————46PerfectCRM实现登陆后页面才能访问————————#} {#{% extends 'king_admin/table_index.h ...

  7. CVPR2020:三维实例分割与目标检测

    CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...

  8. ARTS第九周

    1.Algorithm:每周至少做一个 leetcode 的算法题2.Review:阅读并点评至少一篇英文技术文章3.Tip:学习至少一个技术技巧4.Share:分享一篇有观点和思考的技术文章 以下是 ...

  9. 聊聊磁盘 IO

    常见的磁盘类型 按存储原理的不同,可以把磁盘分为这么几种 HDD 盘:没啥说的,就是平时最常见的机械盘. SSD 盘:用电信号来记录存储数据,而不是磁片.显然进行 I/O 时,这要比机械盘的物理寻址方 ...

  10. 通过有序线性结构构造AVL树

    通过有序线性结构构造AVL树 本博客旨在结局利用有序数组和有序链表构造平衡二叉树(下文使用AVL树代指)问题. 直接通过旋转来构造AVL树似乎是一个不错的选择,但是稍加分析就会发现,这样平白无故做了许 ...

随机推荐

  1. 什么是web标准、可用性、可访问性

    前言:大家不难发现,只要是招聘UED相关的岗位,如前端开发工程师.交互设计师.用户研究员甚至视觉设计师,一般都对web标准.可用性和可访问性的理解有要求.那么到底什么是web标准.可用性.可访问性呢? ...

  2. Sequential Minimal Optimization (SMO) 算法

    SVM 最终关于 $a$ 目标函数为凸优化问题,该问题具有全局最优解,许多最优化算法都可以解决该问题,但当样本容量相对很大时,通常采用 SMO 算法(比如 LIBSVM),该算法为启发式算法,考虑在约 ...

  3. JVM优化之 -Xss -Xms -Xmx -Xmn 参数设置

    XmnXmsXmxXss有什么区别Xmn.Xms.Xmx.Xss都是JVM对内存的配置参数,我们可以根据不同需要区修改这些参数,以达到运行程序的最好效果. -Xms 堆内存的最小大小,默认为物理内存的 ...

  4. 170825、SolrCloud 分布式集群部署步骤

    安装软件包准备 apache-tomcat-7.0.54 jdk1.7 solr-4.8.1 zookeeper-3.4.5 注:以上软件都是基于 Linux 环境的 64位 软件,以上软件请到各自的 ...

  5. IDEA中将WEB-INF\lib下的Jar包添加到项目中

    打开Project Structure[可以使用快捷键:Ctrl+Alt+Shift+S]左侧选中Modules,在Dependecies中,点击右侧“+”号,选择JARS or directorie ...

  6. Zabbix监控MySQL免密码设置

    zabbix自带MySQL监控模板,配置文件在/etc/zabbix/zabbix_agentd.d userparameter_mysql.conf 如果MySQL不使用密码可以直接使用这个监控模板 ...

  7. AngularJs $watch监听模型变化

    $watch是一个scope函数,用于监听模型变化,当你的模型部分发生变化时它会通知你. $watch(watchExpression, listener, objectEquality); 举个栗子 ...

  8. Java、mysql、html、css、js 注释&大小写

    java三种注释 原文链接:https://www.cnblogs.com/miys/p/4bf714ce33068dcf9ac6526309c9b5e6.html 单行注释:// 注释内容 多行注释 ...

  9. numpy——.npy和.npz文件

    npy文件--Numpy专用的二进制格式np.load()和np.save()是读写磁盘数组数据的两个重要函数.使用时,数组会以未压缩的原始二进制格式保存在扩展名为.npy的文件中. import n ...

  10. 【python基础】hmac

    [微语]不应当急于求成,应当去熟悉自己的研究对象,锲而不舍,时间会成全一切.凡事开始最难:然而最难的是何以善终 通过哈希算法,我们可以验证一段数据是否有效,方法就是对比该数据的哈希值,例如,判断用户口 ...