SPP Net

SPPnet

R-CNNvsSPP net:

SPP net的优势:

1.SPP可以生成固定大小的向量,以此适应fc层所要求的固定输入

2.多个pooling窗口,可以取出不同层次的特征

3.可以不再限制输入图片的尺寸

4.对于每张图片只需要跑一遍CNN

SPP net的大体步骤:

1.假设原图输入是224*224,5个conv layers(以5层卷积为例)卷积出来的输出是13*13*256(因为最后一层共256个filter),即13*13大小的共256张feature maps;

2.spp一共分3层:

第一层是对整张feature map做池化(最大、均值等);

第二层是将整张feature map划分为2*2=4个块,分别对每个块做池化;

第三层是将整张feature map划分为4*4=16个块,分别对每个块做池化。

SPP Net_第1张图片

注意!以上步骤每一步的max pooling的window size和stride都不同,具体的计算公式是:win= a/n(上舍入), str = a/n(下舍入),其中a是原图经过5层卷积后得到的feature map的大小,如果是第三层那么n = 3,以此类推。

举个栗子:当a = 13时,win = 13/3 = 4.333 ~=5(因为上舍入),str = 13/3 = 4.3333 ~=4(因为下舍入)。所以了第三层的max pooling的sliding window大小就是5*5,stride就是4*4。以此类推。

当然了,每一张图的max pooling也不一样。

举个栗子:当输入图像大小= 180*180时,经过5层卷积后得到的feature map的大小就是10*10。那么第三层的max pooling的sliding window大小就是a/n = 10/3 = 3.333~=4,stide就是3。以此类推。

具体内容请参考原文:

当输入是224*224大小的图像时,5层conv后得到13*13:

SPP Net_第2张图片
SPP Net_第3张图片

当输入是180*180大小的图像时,5层conv后得到10*10:

SPP Net_第4张图片

通过以上步骤,最后可获得1+4+16=21个池化后的特征。

总的来说,在固定spp层数的前提下,就是根据图像的具体大小来设计具体的max pooling。最终保证输入到fc层的结果是相同维度大小的。

你可能感兴趣的:(SPP Net)