神经网络spp-net

Spp-net

     在网上找了好多有关spp-net的博客介绍,零零散散,不是很全面,自己连蒙带猜,写下自己的理解(对错未知)

     Spp-net是从R-cnn进化而来,解决了r-cnn的一些问题,训练速度提升了,效果也好。本以为了解了解就可以跳过,但是当读到后面几种网络时发现吃力,还是要学习一下这个网络,首先看一下网络的结构:

 

 

这里有几点不同:

1、       输入的图片(矩阵形式),rcnn输入的是图片的各个(2k个)建议选框区域 vs sppnet输入的整幅图片;

2、       在连接到全连接层的时候spp-net进行了一个处理(spatial pyramid pooling),其前面还有一个每个ROI(2k个),求取映射关系(在全图的feature map找到对应选框的部位)。

 

 

 

spp-net中使用到的几种技术:

1、       spp(空间金字塔池化):这个技术是spp-net实现的关键。

 

 

对于对应(有个对应提取算法)提取到的(256张中的一张)每个建议框的特征图,使用分别是4*4,2*2,1*1大小的块,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的切割方式,分别在每一个区域取最大池化,那么就可以得到21组特征。这种以不同的大小组合方式来池化的过程就是空间金字塔池化(SPP)。

 

Conv5计算出的feature map是有一定的大小的,而建议框的大小又是任意的,现在经过SPP之后,就可以变成固定大小的输出了,以上图为例,一共可以输出(16+4+1)*256-D的特征。

应该是spp层可以根据roi的feature map的大小与设定的bin的幸好,自动确定怎样池化!

conv5的特征分别为224x224->13x13,180x180->10x10

windows_size=[a/n] 向上取整  stride_size=[a/n]向下取整

 

2、       从整幅图的feature  map对应提取到建议框feature map的方法:

Mapping a Window to Feature Maps。这个作者直接给出了一个很方便我们计算的公式:假设(x’,y’)表示特征图上的坐标点,坐标点(x,y)表示原输入图片上的点,那么它们之间有如下转换关系:

(x,y)=(S*x’,S*y’)

其中S的就是CNN中所有的strides的乘积。比如 ZF-5:S=2*2*2*2=16

(这里只是大概讲一下有这么一个算法,不展开!)

3、       输入图片尺寸的问题:

在许多博客上见到训练是输入图片的尺寸不同是为了体现网络可以接受不同尺寸的图片输入,但网络对于相同尺寸的图片输入,在2中这一步ROI的feature map的大小不同,也可以体现不同尺寸的处理能力,所以不同尺寸的输入应该有以下两方面的原因:

1、       由于实际操作中cuda和caffe等工具是在一个固定尺度图片集上运行的。

2、       在尺度224上过一次训练集,再到180上过一次训练集,再到224,再到180如此迭代(反正设置的参数没什么不同)。实验证明这样多尺度的训练会比单尺度的训练更快收敛。但效果似乎至提升一点点,差不多!

 

4、检测--多尺度?

原文第九页4.1 detection algorithm中提到作者的一种检测方法:先将图片resize到五个尺度:480,576,688,864,1200,加自己6个。

然后在map window to feature map一步中,选择ROI框尺度在{6个尺度}中大小最接近224x224的那个尺度下的featuremapz中提取对应的roifeature。

并称这么做提高系统准确率。

但是笔者认为,这么做应该是参考了原来R-CNN中选择了proposal之后将其warp到227x227这么一步。

考虑到越大的图片应该对应越大的feature map从而可以学习到越抽象的特征,故理论上原图片越大越好;

而如果是将原图resize到更大尺寸来学习,好比将一个像素点resize到100x100,这没有意义,因为都只能学习到一种特征,该像素点本来的颜色,故使用resize将图片放大应该不会学习到更抽象的特征。

综上所述,笔者认为应该直接使用原图来进行map window to feature map这一步就可以。至于为什么作者的实验说这么做可以提高准确率,需要进一步查证。

几张完整的网络图:

这个图可以理解为测试时的架构,训练好的网络参数与svms(多个svm),其中fc那里理解为提取到的特征向量! 

 

 

这个图是从红线处开始看起,由roi选框对应出的一个区域,使用ssp生成256*30的向量,之后的也可以按照上篇rcnn中理解使用w(向量形式30与“卡片”大小相同)在fc连接下微调的特征向量!

下面是自己画的一个理解:

 

 

 

参考:http://blog.sina.com.cn/s/blog_82dacb800102w88p.html(主要参考)

http://blog.csdn.net/u010333076/article/details/52229466?locationNum=12

http://blog.csdn.net/u013010889/article/details/53928363

 

posted @ 2017-04-26 13:56  kanuore  阅读(1461)  评论(0)    收藏  举报