《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》阅读笔记

CNN:输入大小固定

CNN的局限性之一是求固定输入的大小。

操作过程

当CNN应用于任意大小的图片时,有两种方法将输入图片转化为固定大小:
1. 剪裁(crop):由于剪裁的图片不可能包括整个物体,难免会造成信息的丢失《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》阅读笔记_第1张图片
2. 扭曲(warp):可能会造成几何失真
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》阅读笔记_第2张图片
因此,CNN的操作流程如下图所示:
CNN

原因

CNN主要由两部分构成:卷积层以及全连接层。卷积层并不需要固定输入大小,因为卷积核的移动可以集成不同大小图片的特征。但是,全连接层对于输入有固定的要求,

SPP-Net

论文提出了对上述问题的解决方法:引入Spatial Pyramid Pooling层(SPP层)。SPP层位于最后一层卷积层和全连接层之间,如下图所示:
SPP
SPP层具有以下两个属性:
1. 即使输入大小不同,SPP也能生成固定长度的输出
2. 使用多层空间桶(multi-level spatial bins),即有多层且每一层桶的大小不同。多级Pooling能够改善鲁棒性。
3. 由于输入比例的灵活性,SPP可提取可变比例下的特征。

算法实现

SPP层其实就是多层Pooling层。分别固定每层bin的个数,调整bin的尺寸来实现每级Pooling层的固定输出。
以3级的SPP层为例:
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》阅读笔记_第3张图片
假设:最后一层卷积层滤波器的个数为 k,bin的个数为 M,那么每一级Pooling层的输出大小为 kM
在上图中,M = 256.
第一级:bin的个数1,输出大小为 1 * 256
第二级:bin的个数4,输出大小为 4 * 256
第三级:bin的个数16,输出大小为 16 * 256
最终得到了1 + 4 + 16维的输出特种,传入全连接层。
这样子,融合各级Pooling的输出,得到固定大小的输出,传入全连接层。

网络训练

单个size训练

对于一个给定大小的图片,我们可以预先计算SPP层中bin窗口的大小。
假设特征向量的大小为 a * a, bin的数量为 n * n,那么bin窗口的大小为 win, 步长为str
以下图为例,对应一个 a = 13 的3级SPP层。计算得到每一级对应的窗口大小以及步长长度。
《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》阅读笔记_第4张图片

多个size训练

利用不同大小的输入图片训练网络。假设有两种大小: 224 * 224 和 180 * 180. 对于 224 * 224 大小的图片,仍然采用 a = 13的3级SPP层。而对于 180 * 180 大小的图片,设置 a = 10 的 3级SPP层,bin窗口大小和步长的计算仍采用上述方法。这样子,两种SPP层具有相同长度的输出,可以共享参数。通过共享参数的两个固定大小的网络,我们实现了不同输入大小的SPP-Net。
在训练中为了避免频繁切换网络带来的麻烦,可以先训练一次 224 * 224 的网络,再复制参数用到 180 * 180的网络训练。

总结

SPP-Net是一种提升CNN分类效果的实用方法,提升CNN的鲁棒性。SPP层由多级Pooling层组合,每级Pooling的bin窗口大小不同,可以对应不同尺度的物体。本论文采用multi-size的方式来训练网络,使得网络本身具有较好的不变性。

你可能感兴趣的:(SPP,Deep,Learing)