SPPNet及fast RCNN 2015.04

学习笔记,错误很多,不要被误导。

引用:时间久远,不知道哪位大佬的。


一、SPPNet

①灵感

因为全连接层需要固定尺寸的输出,但是把所有图片都resize成同样尺寸的图片会造成失真。所以逆向思维一下,在卷积层后加入池化层,这样不管输入图片的尺寸怎么变化,只需要池化层跟着改变,输出到全连接层里的尺寸大小就都是一样的。

②特点

特点一:多尺度输入

1.结合空间金字塔方法实现CNNs的对尺度输入。

一般CNN后接全连接层或者分类器,他们都需要固定的输入尺寸,因此不得不对输入数据进行crop或者warp,这些预处理会造成数据的丢失或几何的失真。SPP Net的第一个贡献就是将金字塔思想加入到CNN,实现了数据的多尺度输入。

如下图所示,在卷积层和全连接层之间加入了SPP layer。此时网络的输入可以是任意尺度的,在SPP layer中每一个pooling的filter会根据输入调整大小,而SPP的输出尺度始终是固定的。

其实就是将任意尺寸的feature map用三个尺度的金字塔层分别池化,将池化后的结果拼接得到固定长度的特征向量(图中的256为filter的个数),送入全连接层进行后续操作。

后来的Fast RCNN网络即借鉴了spp的思想。其中的ROI Pooling可理解为简单的同一种池化的SPP层。

特点二:只对原图提取一次卷积特征

在R-CNN中,每个候选框先resize到统一大小,然后分别作为CNN的输入,这样是很低效的。

所以SPP Net根据这个缺点做了优化:只对原图进行一次卷积得到整张图的feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层(相当于卷积后,找到特征图上的候选框,输出候选框在特征图上已经训练好的特征)。节省了大量的计算时间,比R-CNN有一百倍左右的提速。

二、fast RCNN

①目的

其实就是为了加快RCNN网络。

②变化

与R-CNN框架图对比,可以发现主要有两处不同:一是最后一个卷积层后加了一个ROI pooling layer,二是损失函数使用了多任务损失函数(multi-task loss),将边框回归Bounding Box Regression直接加入到CNN网络中训练。前五阶段是基础的conv+relu+pooling形式,在第五阶段结尾,输入P个候选区域(图像序号×1+几何位置×4,序号用于训练)。 

注:文中给出了大中小三种网络,此处示出最大的一种。三种网络基本结构相似,仅conv+relu层数有差别,或者增删了norm层。

上文已经提到过ROI pooling layer实际上是SPP-NET的一个精简版,SPP-NET对每个proposal使用了不同大小的金字塔映射,而ROI pooling layer只需要下采样到一个6x6的特征图。对于网络conv5_3有256个特征图,这样所有region proposal对应了一个6*6*256维度的特征向量作为全连接层的输入。

换言之,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量,而我们知道,conv、pooling、relu等操作都不需要固定size的输入,因此,在原始图片上执行这些操作后,虽然输入图片size不同导致得到的feature map尺寸也不同,不能直接接到一个全连接层进行分类,但是可以加入这个神奇的ROI Pooling层,对每个region都提取一个固定维度的特征表示,再通过正常的softmax进行类型识别。

③训练

参数初始化:网络除去末尾部分如下图,在ImageNet上训练1000类分类器。结果参数作为相应层的初始化参数。 其余随机初始化。

分层数据:在调优训练时,每一个mini-batch中首先加入N张完整图片,而后加入从N张图片中选取的R个候选框。这R个候选框可以复用N张图片前5个阶段的网络特征。实际选择N=2, R=128。

训练数据构成:N张完整图片以50%概率水平翻转。 前景和背景的判别标准分别是IOU大于0.5和小于0.5时,按1:3抽取。

④分类与位置调整

数据结构:第五阶段的特征输入到两个并行的全连层中(称为multi-task)。

cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。

bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

代价函数

截个大佬的图吧,定位检测的代价函数还是预测偏差和真实偏差之间的差值。其实还是相当于边框回归吧,编码训练,输出的时候再解码。

⑤实验结论

-网络末端同步训练的分类和位置调整,提升准确度

-使用多尺度的图像金字塔,性能几乎没有提高

-倍增训练数据,能够有2%-3%的准确度提升

-网络直接输出各类概率(softmax),比SVM分类器性能略好

-更多候选窗不能提升性能

三、总结

1、其实感觉就是RCNN加了SPPnet

2、选择候选框的方法没改变还是select,在这一块速度慢

3、边框回归算是弄懂了,以前一直以为是输出一个新的框框,现在明白了只是输出一个修正的偏差,然后让先验框和真值靠近。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容