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个块,分别对每个块做池化。
注意!以上步骤每一步的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:
当输入是180*180大小的图像时,5层conv后得到10*10:
通过以上步骤,最后可获得1+4+16=21个池化后的特征。
总的来说,在固定spp层数的前提下,就是根据图像的具体大小来设计具体的max pooling。最终保证输入到fc层的结果是相同维度大小的。
网友评论