1.2.1 空间金字塔池化
1.算法动机
SPP-Net通过可视化CNN的最后一个卷积层,发现卷积操作其实保存了输入图像的空间特征,且不同的卷积核可能响应不同的图像语义特征。如图1.5所示,通过对图1.5(a)中左侧输入图像的特征图的可视化,第175个卷积核倾向于响应多边形特征,第55个卷积核倾向于响应圆形特征;通过对图1.5(b)中左侧输入图像的特征图的可视化,第66个卷积核倾向于响应^形状,而第118个卷积核则倾向于响应 形状。上面这些响应与输入图像的尺寸没有关系,只取决于图像的内容。
在传统的计算机视觉方法中,我们首先可以通过SIFT或者HOG等方法提取图像特征,然后通过词袋或者空间金字塔池化的方法聚集这些特征。同样我们也可以用类似的方法聚集CNN得到的特征[12][13],这便是SPP-Net的算法思想。
[12] 参见Kristen Grauman、Trevor Darrell等人的论文“The Pyramid Match Kernel: Discriminative Classification with Sets of Image Features”。
[13] 参见Svetlana Lazebnik、Cordelia Schmid、Jean Ponce的论文“Beyond Bags of Features: Spatial Pyramid Matching for Recognizing Natural Scene Categories”。
图1.5 特征图响应图像特征示意
2.SPP-Net的结构
SPP的思想与多尺度输入图像的思想类似,不同的是SPP基于特征图的金字塔的特征提取。它首先通过CNN提取输入图像(尺寸无要求)的特征,然后通过SPP的方法将不同的特征图聚集成相同尺寸的特征向量,这些尺寸相同的特征向量便可以用于训练全连接层或者SVM。与传统的词袋方法相比,SPP保存了图像的空间特征。得到尺寸相同的特征向量后,便可以将其输入全连接层了。图1.6所示是SPP-Net的结构。
在图1.6中,骨干网络的最后一个卷积层(Conv5层)共有256个卷积核,SPP-Net的论文中使用了4×4、2×2、1×1这3个尺度的金字塔,在每个尺度的栅格(grid,其大小和输入图像的尺寸有关)上使用最大池化得到特征向量。最后将所有尺度的特征向量拼接在一起,就得到长度为5376的特征向量。该特征向量便是全连接层的输入。通过分析可以看出,虽然输入图像的尺寸不一样,但经过SPP-Net后都会得到相同长度的特征向量。
SPP是可以通过标准的反向传播进行训练的,然而在实际训练过程中,GPU更倾向于尺寸固定的输入图像(例如小批次训练)。为了能够使用当时的框架(Caffe)并同时考虑多尺度的因素,SPP-Net使用了多个不同输入尺寸的网络,这些网络是共享参数的。对于任意不同输入尺寸的卷积网络,经过卷积层得到特征向量的大小是a×a,如果我们要使用金字塔的某层取一个n×n的特征向量,则池化层的窗口大小是,步长是。可见,参数和输入图像的尺寸是没有关系的,因此不同的输入图像尺寸对应的网络之间权值是可以共享的。
图1.6 SPP-Net的结构
在实验中,SPP-Net使用了输入图像尺寸分别是224×224和180×180的两个不同的网络。在将图像缩放到其中一个尺寸后训练该网络,并将学到的参数共享到另一个网络中。也就是说,SPP-Net会每隔一个epoch更换一种图像尺寸,训练结束后共享参数。SPP-Net的多尺度输入的训练策略是提升检测效果的十分常见的技巧,尤其是在小目标检测的场景。
在测试时,由于不存在小批次,因此输入图像的尺寸是任意的,在推理时并不存在图像扭曲的问题。但是这里的“任意”也不是完全任意的输入,因为过小的图像输入模型会无法进行多次降采样。