总体结构:
目标检测之SPP-Net
在R-CNN中,候选区域需要进过变形缩放,以此适应CNN输入,那么能不能修改网络结构,使得任意大小的图片都能输入到CNN中呢?作者提出了spatial pyramid pooling(SPP)空间金字塔结构来适应任何大小的图片输入
 
R-CNN和SPP-Net的处理过程
目标检测之SPP-Net
spatial pyramid pooling(SPP)层 加在最后一个卷积层与全连接层之间,目的就是为了输出固定长度的特征传给要求固定输入的全连接层
 
网络结构图
目标检测之SPP-Net
具体做法是,在conv5层得到的特征图是256层,每层都做一次spatial pyramid pooling。先把每个特征图分割成多个不同尺寸的网格,比如网格分别为4*4、2*2、1*1,然后每个网格做max pooling,这样256层特征图就形成了16*256,4*256,1*256维特征,他们连起来就形成了一个固定长度的特征向量,将这个向量输入到后面的全连接层
 
对卷积层可视化发现:输入图片的某个位置的特征反应在特征图上也是在相同位置。基于这一事实,对某个ROI区域的特征提取只需要在特征图上的相应位置提取就可以了。
 
R-CNN的问题:
R-CNN对于一张图片,先使用segment seletive方法提取出约2000个候选区域,然后将这两千个候选区域分别送入网络中,即一张图片要经历2000次前向传播,这样会造成大量冗余。
SPP-net则提出了一种从候选区域到全图的特征(feature map)之间的对应映射关系,通过此种映射关系可以直接获取到候选区域的特征向量,不需要重复使用CNN提取特征,从而大幅度缩短训练时间。每张图片只需进行一次前向传播即可.
 
SPP层的输入:
如下图灰色框所示
最后一层卷积输出的特征(我们称为feature map),feature map为下图的黑色部分表示,SPP层的输入为与候选区域对应的在feature map上的一块区域(一张图有约2000个候选区域,而对一张图做完卷积后得到feature map,在这个feature map上也有约2000个与候选区域对应的区域
 
SPP层的输出:
SPP layer分成1x1,2x2,4x4三个pooling结构(这部分结构如下图所示),对每个输入(这里每个输入大小是不一样的)都作max pooling(论文使用的),出来的特征再连接到一起,就是(16+4+1)x256的特征向量。
目标检测之SPP-Net
 
 
无论输入图像大小如何,出来的特征固定是(16+4+1)x256维度。这样就实现了不管图像中候选区域尺寸如何,SPP层的输出永远是(16+4+1)x256特征向量。
 
候选区域在原图与feature map之间的映射关系
在CNN中感受野(receptive fields)是指某一层输出结果中一个元素所对应的上一层的区域大小,如下图所示。
目标检测之SPP-Net
目标检测之SPP-Net
输入的尺寸大小与输出的尺寸大小有如下关系:
 
目标检测之SPP-Net
 
上面是区域尺寸大小的对应关系,下面看一下坐标点之间的对应关系:
 
目标检测之SPP-Net
目标检测之SPP-Net
 
SPP-net对上面的坐标对应关系作了一定的简化,简化过程如下:
目标检测之SPP-Net
目标检测之SPP-Net是坐标值,不可能取小数 所以基本上可以认为目标检测之SPP-Net。公式得到了化简:感受野中心点目标检测之SPP-Net的坐标只跟前一层目标检测之SPP-Net有关。
 
那么对于下图的做法,就是SPP-net的映射方法,SPP-net 是把原始ROI的左上角和右下角 映射到 feature map上的两个对应点。 有了feature map上的两队角点就确定了 对应的 feature map 区域(下图中橙色)。
目标检测之SPP-Net
 
 
目标检测之SPP-Net
后面的处理过程与R-CNN一致
目标检测之SPP-Net