0. 引言
之前介绍的R-CNN算是基于CNN的目标检测算法始祖。R-CNN存在一个严重问题:由selective search算法产生的所有proposals(候选区域)都需要经过CNN网络进行特征提取。考虑到R-CNN建议的proposals数量为2000,可知算法的效率实在非常低下。
本文将要介绍的SPPnet能够解决R-CNN的上述问题。需要注意的是,SPPnet在设计动机上并不是为了解决R-CNN存在的问题,它的核心思想是通过设计Spatial Pyramid Pooling方法来允许网络输入任意尺寸的图片。而对R-CNN的改进似乎仅仅是附带产物。
1. 研究动机
卷积神经网络(CNN)的主体结构通常为:卷积层(数个)+ 全连层 。大多数的CNN都要求输入图像的尺寸是固定不变的,如AlexNet的输入为227*227. 然而不难发现,在上述“卷积层(数个)+ 全连层 ”这样的标准CNN结构中,真正需要输入固定不变的部分其实是全连层。例如,假设紧接最后一个卷积层的全连层的大小为 N,那么该全连层的输入大小也就必须为 N。而对于卷积层,理论上讲它是可以处理任意尺寸的图片(即使图片小于卷积核大小,也可以通过padding来解决)。例如,对于同一卷积层,在卷积核数量和大小确定的情况下,不同尺寸的输入只会导致输出的feature map大小不一样(当然值也会不一样),但并不会使卷积层像全连层那样在遇到不同大小输入时完全无法工作。因此,在设计CNN时“没必要让CNN的输入大小一致,只需让进入全连层的输入大小一致即可”。同时,我们也可以通过下面的例子来说明强制要求CNN输入大小一致时容易产生的问题。
通常将任意尺寸图像转为网络固定输入尺寸(如227*227)的方法是crop(裁剪)和warp(形变)。上图以特定例子说明了这两种方法的问题。左图使用crop的方法容易丢失图像原本的重要信息;而右图使用warp的方法容易导致图像比例失真ÿ