R-CNN实现了卷积神经网络的提取特征,并将每个建议框分别送入深度网络来提取特征。但是这样存在一个问题,即输入尺寸必须是固定的(这是因为卷积神经网络输出的特征图的尺寸是固定的)。卷积神经网络通常由卷积部分和全连接部分构成。在卷积部分,对任意的图像的大小和卷积尺寸都能进行卷积操作,得到特征图;而在全连接部分,需要固定尺寸的输入。因此,固定尺寸的问题来自全连接层。
然后对对于裁剪的方法会导致图像的失真。此外由于数千个建议框会有大量的重叠部分,将每个建议框分别送入深度网络进行特征提取的方法会造成大量的重复计算。
SPPNet提出两点改进:网络结构和金字塔池化
1.网络结构
网络只对原图像进行一次全图特征提取,得到整幅图像的特征图,这样避免了资源浪费。该网络在特征图的对应区域找到,每个建议框的应摄区,将此区域作为每个建议框的卷积特征输入输入SPP层和之后的层。
2. 金字塔池化
SPP-Net的作者使用空间金字塔池化层来消除网络固定尺寸的限制。SPP层放在最后一个卷积层之后,用于对特征图池化产生固定的输出长度,并将这个输出作为全连接层的输入。
空间金字塔的池化过程如图:
特征图被划分为多个数量固定,尺寸不同的局本空间块,这些空间块的尺寸和特征图的尺寸成比例的,对每个空间块采用最大池化的方法进行处理。这样SPP层的输出就是一个
k
×
M
k\times M
k×M的向量,k代表卷积层的深度,M代表空间块的数量。这样无论输入图片的大小的尺寸是多大,我们都可以输出一个固定维度向量。