1、算法针对问题
在SPPNet出现之前,目标检测网络流程如上图所示,输入图像、裁剪/形变、卷积层、全连接层、输出,这些网络存在两种局限:
1、网络输入图像大小需固定:全连接层需要输入固定大小的输入,由于这个限制,输入图像的大小需固定。
2、由于需要输入固定大小的图像,因此在检测时往往需要对输入目标图像进行裁剪(crop)或形变(warp),但是裁剪可能会导致目标信息的丢失,形变可能会导致目标特征发生扭曲。如下图所示:
2、网络结构
针对上述的问题,作者提出了上述的网络,与之前网络对比可以看出,作者取消了crop/warp环节,在卷积层和前连接层之间增加了一个空间金字塔池化(spatial pyramid pooling)。作者将这种新的网络结构命名为SPP-Net。
新的网络结构不需要对目标进行crop/warp,最重要的是对输入图像的大小不在进行限制,可以输入任意大小的图像,这主要得益于增加的空间金字塔池化(spatial pyramid pooling)。
3、空间金字塔池化(spatial pyramid pooling)
空间金字塔原理图:
输入:卷积层输出的feature map
处理流程:简单来说就是不管feature map的大小是多少,设置多个不同大小的池化核,分别对feature map进行池化,池化核的大小根据特征图的大小和设定好的池化后特征图的大小去计算。如图中分别生成4x4、2x2、1x1池化后的特征图,然后将特征如拉伸为一个一维向量,并进行拼接,如图中16+4+1=21。
输出:最终生成kM维的向量(k为卷积层最后一层的filter的数量,如上图中21256),传输到全连接层。
无论卷积层输出的feature map大小是多少,空间金字塔池化总能输出一个固定大小的向量到全连接层,因此消除了之前网络对输出固定大小图像的要求。
4、目标检测中的应用
作者将其与RCNN结合,其流程如下:
1)利用selective search生成2000个候选区域;
2)对输入图像进行卷积,生成feature map;
3)根据候选区域的位置,在feature map获得对应的候选窗口;
4)利用空间金字塔池化处理候选窗口,生成固定长度的特征向量;
5)将获得的特征向量输入全连接层中,最终进行目标识别和目标定位。