Fast R-CNN学习笔记
来源:互联网 发布:淘宝app购买记录怎么查 编辑:程序博客网 时间:2024/05/16 10:10
Fast R-CNN学习笔记
文章来源:Girshick R. Fast r-cnn[C]//Proceedings of the IEEE InternationalConference on Computer Vision. 2015: 1440-1448.
1.算法提出的背景
目前deep ConvNets显著提高了图像分类和目标识别的精度,和图像分类相比,目标检测需要更多复杂的方法去解决,是更有挑战性的问题。由于检测需要目标精确的位置,这就带来了两个重要的困难:首先,大量的候选目标区域(被称为“proposals”)要处理;其次,这些候选只是简单地提供了大致的位置,还需要进一步精确。解决这些问题的方法常常会导致速度、精度和简易性的下降。
Fast R-CNN在训练一个深检测网络(VGG16)上,比R-CNN快9倍,比SPPnet快3倍。
R-CNN的缺点:
(1)训练是多阶段进行的。R-CNN首先使用log损失在目标提议方面对ConvNet进行了微调;然后调整SVMs适合于ConvNet特性,这些SVMs作为目标检测器,替换了通过惩罚协调学习的softmax分类器;第三个训练阶段,学得一个bounding-box回归。
(2)训练在时间和空间上花费较大。对于SVM和bounding-box回归训练,要从每张图片的每个中object proposal中提取特征,这既费时又费力。
(3)目标检测很慢。在测试时间,要从每张测试图片的每个object proposal中提取特征,很耗时。
R-CNN很慢的原因在于它对于每个object proposal都进行了ConvNet的前向传播,而没有共享计算。
Spatial pyramidpooling networks (SPPnets)是通过共享计算来加速R-CNN。SPPnets方法对整个输入图像都计算一个卷积特征映射,然后使用从共享特征映射中提取的特征向量来对object proposal进行分类。通过最大池化proposal内的部分特征映射到一个固定大小的输出,来为proposal提取特征。池化得到多种输出大小,然后串联作为空间扩展池。在测试时间上,SPPnet将R-CNN加速了10到100倍,在训练时间上也因更快的提案特征提取减少了3倍。SPPnet也有很多不足:首先,和R-CNN一样是多阶段传递过程,包括特征提取、使用log损失对网络进行惩罚协调、训练SVMs和适应bounding-box回归。特征也被写入内存。但与R-CNN不同的是,惩罚协调算法不能更新卷积层。
2.算法的介绍
FastR-CNN虽然也有R-CNN与SPPnet的缺点但在速度和精度上有所提升。Fast R-CNN有以下优点:(1)更高的检测质量(mAP);(2)通过使用多任务损失,使得训练是单阶段的;(3)训练可以更新所有网络层;(4)对于特征缓存不需要磁盘存储。
Fast R-CNN的结构
输入图像和多个RoI(region of interest)输入到完全卷积网络中,每个RoI被池化到固定大小的feature map,然后被FCs(fully connected,fc)映射为一个feature vector,每个RoI在网络中有两个输出向量:softmaxprobabilitie和per-classbounding-box regression offsets。这个结构带有多任务损失下,收尾相连地进行训练使用。
(bounding-box regression是用来对窗口进行微调,从而提高最终检测精度的回归器,它的详解可参考以下链接:
http://weibo.com/5847253963/DpPCJ9J6b?type=repost&sudaref=www.baidu.com#_rnd1461372285277)
(1)RoI池化层
RoI池化层使用最大池将任何一个有效的RoI的特性转变为一个H × W的固定空间范围的小的featuremap,其中H与W是与任何一个RoI相独立的层超参数。本文中的每个RoI是一个矩形窗口,用一个四元组(r,c, h, w)来表示,其中(r, c)定义了矩形的左上角,(h, w)定义了高度和宽度。
RoI最大池将h × w的RoI窗口分成H × W的网格,每个子窗口的大小近似为h/H × w/W,然后最大池化每个子窗口的值到相应的输出网格单元。池化是独立地应用到每个feature map通道的,RoI池化层就是SPPnets中spatial pyramid pooling layer的特例,只不过SPPnets的只有一个增长级别。
(2)从前期训练网络中初始化
文中对三个前期训练的ImageNet网络进行了实验,每个都有五个最大池化层和5-13个卷积层,当一个前期训练的网络初始化一个Fast R-CNN网络,它会经历三次转换。
首先,最后一个最大池化层会被一个RoI层代替,要将它配置为H和W,从而与网络中第一个fc相匹配。
其次,网络的最后一个fc和softmax要用之前描述的两个并列的层替代。(文章有点没看懂)
最后,这个网络通过两个输入进行更新:一个图像列表和这些图像中的RoI列表。
(3)检测的惩罚调整
使用后向传播训练网络权重是Fast R-CNN一个重要特性。文章利用训练中的特征共享提出了一个更高效的训练方法。在Fast R-CNN训练中,随机梯度的最小批是分层采样的,首先采样N个图像,然后从每个图像中采样R/N个RoIs。并且,从相同图片中得到的RoIs共享前向和后向传播中的计算和内存。当减小N时可以减少最小批的计算。
这种方法可能带来的问题是使得训练收敛得变慢,因为从相同图片中得到的RoIs是相关联的,然而这在实践的过程中并没有出现问题。
对于分层采样,Fast R-CNN使用了一个流水线型的训练过程,其中有个惩罚调整的阶段能同时优化softmax分类器和bounding-box regressors,而不是把softmax分类器、SVMs和bounding-box regressors的训练分为三个不同的阶段。整个过程涉及到的元素有the loss,mini-batch sampling strategy, back-propagation through RoI pooling layers和SGD hyper-parameters。
任务损失:
Fast R-CNN有两个并行输出层,一个输出K+1个类的概率分布p,p是通过一个softmax计算的,第二个输出是bounding-box regression offset,它定义了一种测量不变的转换和log空间中高度和宽度的调整量。
在同时训练分类器和bounding-box regression时的损失定义为:
第二项是针对类u的bounding-boxregression目标的元祖
相比与L2损失,L1对边缘会更加不敏感。当使用L2损失进行训练时要注意设置好学习的速率,从而防止过大的变化。
(4)规模不变形
这里采用两种方法来实现规模不变的目标检测:1)通过“bruteforce” learning;2)通过使用影像金字塔。在“brute force” learning中,每个图像在训练和测试的处理过程之前就定义好了像素大小。相反,多范围的方法通过影像金字塔使网络近似实现了范围不变。测试时间中,影像金字塔对每个object proposal进行近似的范围标准化。
- Fast R-CNN学习笔记
- 【转】R-CNN学习笔记4:Fast R-CNN
- R-CNN学习笔记4:Fast R-CNN
- RCNN学习笔记(2):Fast R-CNN
- 深度学习论文笔记:Fast R-CNN
- Fast R-CNN笔记
- Fast R-CNN笔记
- Fast R-CNN笔记
- fast r-cnn笔记
- 论文笔记 《Fast R-CNN》
- 论文笔记 《Fast R-CNN》
- 论文笔记 《Fast R-CNN》
- 论文笔记 《Fast R-CNN》
- 论文笔记 《Fast R-CNN》
- 论文笔记|Fast R-CNN
- Fast R-CNN 论文笔记
- 论文笔记 《Fast R-CNN》
- 论文笔记 《Fast R-CNN》
- SQLServer 基线跟踪指标
- CodeForces 626C 二分
- 进程(应用程序)之二
- 1002 Strange fuction
- How to Build Executable with ndk-build VS arm-linux-androideabi-gcc
- Fast R-CNN学习笔记
- 数据库优化
- java中字符串在 utf-8 gbk unicode 编码下占内存位数
- js关于setTimeout实现延时执行函数并进行传参
- 练习3-pie
- Oracle 11G Rman备份ASM数据恢复到本地磁盘
- 如何让多份word文档分开显示
- [剑指offer]链表中倒数第k个结点
- MyEclipse+Tomcat+MAVEN+SVN项目完整环境搭建