SPPNet(Spatial Pyramid Pooling)
1、网络架构
R-CNN:
- Image → crop/warp → conv → fc → output
SPPNet:
- Image → conv → SPP → fc → output
如上图,crop/warp把图像变换成固定大小,会导致图像不必要的失真,造成精度损失。
CNN主要由conv和fc层组成,卷积层以滑动窗口方式运行,输出表征激活的空间排列的feature map。
conv层不需要固定大小,fc层需要采用固定输入大小(固定神经元个数),致使CNN前需要先调整区域大小。
而SPP层可以生成固定大小,放在fc层前,满足fc层固定输入的要求。
换句话说,就是在网络层次结构的更深层(卷积层和完全连接层之间)执行一些信息“聚合”,以避免在开始时进行crop/warp。
SPP对深度CNNs特性:
- SPP能够生成固定长度的输出,而不受输入大小的影响,而之前深度网络使用的滑动窗口池则不能;
- SPP使用多级空间bin,滑动窗口池使用单一窗口大小。多层次池已被证明是可靠的对象变形;
- 由于输入尺度的灵活性,SPP可以对不同尺度提取的特征进行聚类。
在R-CNN中,需要重复的将CNN应用到warp之前的原始图像,会造成计算冗余。而在SPPNet中,只需要运行一次,然后通过SPP层在feature map上提取特征。速度快了100倍。
2、SPP
上图(a)是原始图像(b)是经过conv后的特征映射,箭头是该图最强响应和对应位置(c)是最强响应所对应的原图中的目标区域。
上图256就是经过conv5后的特征映射数目,跟前面filter=175, 55, 66, 118类似。该网络将CNN中的pooling5改为SPP层方便输出固定大小给fc6
。
conv5的输出(假设大小13x13)作为SPP层的输入,SPP第一阶段相当于分别将输入并行执行3个pooling,
pool1x1的size=13x13,stride=13,
pool2x2的size=7x7,stride=6,
pool3x3的size=5x5,stride=4 。
最后再以串联的形式将结果赋给fc6作为输入,向量大小为(1x1 + 2x2 + 3x3)x 13^2 。
fc层再以固定1x4096向量输出。
感受野(receptive field)是指某一层输出结果中一个元素所对应的上一层的区域大小。