R-CNN、SPPnet、Fast R-CNN、Faster R-CNN的对比
1、 每个模型的发展及思考
R-CNN:
(1)将location的问题作为一个回归问题在实践中效果不佳;
(2)使用滑动窗口检测,此前的CNNs大多用于受限的目标类别(faces、pedestrians etc),为了保留high spatial resolution,仅使用两层conv和pooling层;
(3)在只有少量标注的数据集时,如何训练一个high capacity模型。
1)SS(Selective Search)选出候选区域
Q:怎么从中选出2000个区域
在操作过程中,SS算法的第一步操作通过过分割将整张图片划分成1k-2k个图像块,最后通过合并等操作。此处的2k个区域仅是一个大致的说法,主要是划定初始的图像块的数量。
2)对候选区域进行图像调整至适合CNN输入的大小
3)CNN
4)特定区域微调
Q:微调为什么会对结果优化那么高?
现象:因为训练的速度太慢,故在训练时仅使用30个epoch,batch_size:64,最终结果ACC=27.4%,但使用过微调后(3个epoch,batch_size:64),整体ACC=93.45%。
解释:之前的理解错误,将预训练(pre_train)的信息给忽略了,此处使用的操作相当于迁移学习,之前的预训练是对更大的数据集或者类似的数据集进行操作,此时的微调使用的是真实给与的数据集,是真正对当前数据集的训练过程。
5)Bounding box regression & SVMs
每个RP(region proposal)输入到每个SVM后,会给出score即属于该类的概率,Bounding box回归过程中回对score进行NMS,去除一些RPs。
SPPnet(Spatial Pyramid Pooling):
考虑到R-CNN中所有的RPs都会先从原始图片中截取出来然后输入到CNN中得到对应的conv feature,需要对卷积特征进行重复计算,且花费了大量的时间。空间金字塔池化网络的提出是为了针对解决这一问题。
在SPPnet中,直接将原始图片输入到卷积神经网络中提取出所有的conv features,结合SS提取出的RPs,在conv feature中选择对应区域的特征,输入到空间金字塔中。在空间金字塔中会对RPs的特征进行不同size的池化,然后将所有的结果拼接起来,输出一个固定长度的特征向量。
最后的分类与Bounding box的回归过程仍与R-CNN相同。
Fast R-CNN:
在SPPnet网络中,虽然对R-CNN的RPs的特征提取过程进行了优化,但是由于深层网络的使用,导致微调操作在卷积层中无效,同时整个结构仍是分离的:卷积特征、分类、Bounding box回归还是分成了三步。
训练与测试的速度都慢。
1)选出候选区域(SS)
2)计算整张图像的卷积特征图
3)从特征图中选出候选区域的RoI,通过池化层得到固定长度的特征向量
Q:RoI池化层怎么使用的?
只有一层SPP。使用较浅的网络便于后向传播,同时使得conv layers能够被fine_tune。
4)一系列的全连接层(fcs)
5)(K+1)类的softmax可能性评估 & bbox regressor
Q:softmax替换SVMs?
SVMs是二分类器,输出的是属于当前类的概率,所以使用softmax分类器输出(K+1)个类的概率也能体现SVMs的作用。最终SVMs对整体的提升率较低,故直接使用softmax分类。
Faster R-CNN
Fast R-CNN对后面的网络结构进行合并训练,使整个系统呈现出端到端的趋势。但是整体花费在RoIs提取上的时间太多,直接使用网络学习如何提取出适合的RoIs。提出RPN,从entire image的conv feature maps中学习提取RoIs,然后将feature maps以及RoIs作为RoI pooling层的输入,进行分类以及Bbox回归。
Q:如何生成RoIs?
使用一个small network在conv feature maps上滑动,输入大小为n*n(3*3),然后map到一个低维的feature vector。
Q:什么是anchor?如何选取?
对每个滑动窗口所在区域假定最多能提取出k个RoIs,将这k个RoIs(可能是不同的尺度以及不同的纵横比)参数化就是anchor。同时上两幅图展示了,使用Anchor与传统的方式(Spatial Pyramid of images & Spatial Pyramid of filters)的区别:使用Anchor可以减少花费的时间。
Q:对于Anchor的使用,获取每个区域的k个Anchors,但是最终怎么得到完整的Bounding boxes呢?
2、从整个迭代过程中有什么收获?从眼界、思考方式等方面叙述
(1)一个新方法的提出/使用,需要对整体流程中的局限性进行思考,针对其中的某些地方进行改进;
(2)而对于改进现有的方法,只需要分析在哪些地方造成性能无法提高,就这些问题进行更新即可。
参考文献:
[1] Ross Girshick Jeff Donahue Trevor Darrell Jitendra Malik. “Rich feature hierarchies for accurate object detection and semantic segmentation”. arXIv:1311.2524v3 [cs.CV] 7 May 2014.
[2] Ross Girshick Microsoft Research. “Fast R-CNN” in IEEE International Conference on Computer Vision (ICCV), 2015.
[3] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In NIPS, 2015.
[4] S. Ren, K. He, R. Girshick, and J. Sun. Faster R-CNN: Towards real-time object detection with region proposal networks. In TPAMI, 2017.
原文地址:https://www.cnblogs.com/fanzhongjie/p/11436856.html
- 任意文件下载引发的思考
- LSTM入门详解
- 如何将CDH集群JAVA升级至JDK8
- 如何将Kerberos环境下CDH集群JAVA升级至JDK8
- 干货|如何做准确率达98%的交通标志识别系统?
- 用57行代码搞定花8000万美元采购车牌识别项目
- Cloudera Manager Server服务在RedHat7状态显示异常分析
- 开源 | 基于Python的人脸识别:识别准确率高达99.38%!
- 转录组数据的基因表达变化情况探索
- 如何配置Kerberos服务的高可用
- 利用深度学习生成梵高风格画像
- 使用Python-Requests实现ODL对OVS的流表下发
- Keras入门必看教程
- bedtools 用法大全(一文就够吧)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- (四十一)golang--goroutine
- (四十二)golang--协程之间通信的方式
- (四十三)golang--管道
- 绕过磊科路由器登录密码
- JeeSite | 数据权限应用
- 数据防泄漏 | 禁止PrintScreen键
- LeetCode | 实现strStr()
- LeetCode | 机器人能否返回原点
- LeetCode | 2 的幂
- JeeSite | Excel 导入导出
- 贪心法--哈夫曼编码
- 基于maven+ssm的增删改查之使用mybatis逆向工程生成相关文件
- Arrays 的二分查找
- (四十四)golang--协程(goroutine)和管道(channel)相结合实例
- 基于maven+ssm的增删改查之测试相关ssm环境是否成功