论文笔记-Spatial Pyramid Pooling与Sca
2020-12-03 本文已影响0人
升不上三段的大鱼
对于尺寸不同的图片,使用CNN训练时往往会将它们裁剪缩放到统一大小。然而裁剪和变形过的图片可能会损失一些信息,使模型的准确度收到影响。
对此,大佬们提出了解决方法。
一、Spatial Pyramid Pooling
卷积层是可以接受任意尺寸的输入图像,并且随之输出不同尺寸,而需要固定尺寸输入的是全连接层。因此可以在卷积层与全连接层之间加上一层spatial pyramid pooling layer.
上图中的卷积层的卷积核数量为256,SPP层中的三个池化层的核的尺寸分别为, 输出的特征尺寸为,无论卷积层输入的尺寸如何变化,经过SPP层处理之后的输出大小都是固定的。
假设SPP前一层的卷积输出的尺寸是,每一个金字塔池化的窗口的大小和步长分别是,输出的向量直接与全连接层相连。
SPP可以用于分类任务上,也可以用于目标检测。
二、Scale-Invariant Convolutional Neural Network
SiCNN使用多列架构,每列专注于特定规模。 与以前的多列策略不同,这些列通过它们之间的比例转换共享相同的过滤器参数集。 该设计处理比例变化,而不会扩大模型尺寸。
SiCNN使用具有不同大小的卷积核的多列卷积堆栈来捕获输入图像中比例未知的对象。从下至上,输入图像被馈送到所有列中。每列都有几个有max pooling的卷积层。与常规多列CNN的主要区别在于,尽管这些列使用不同的过滤器大小,但它们之间共享一组公共参数。规范列在每一层中保留规范卷积核。其他列(我们称比例列)将这些规范卷积核转换为它们自己的卷积核。
最终将所有列的顶层特征图简单地连接到一个特征向量中。最终分类层(在最简单的情况下为softmax层)将此特征向量作为输入。
当缩放图像时,如果有相应的卷积变换,使得变换之后的卷积核应用在缩放过的图像之后,得到特征图相当于原来特征图被缩放的结果,如下图:
规范列到其他列的转换
如果规范列通过输入得到,相应的其他列通过输入得到了,这里指的是scale操作。
规范列到其他列
SPP与SiCNN的思想有一点类似,都是使用不同尺寸的卷积核来处理不同的尺寸,最终得到一个固定的尺寸的特征。不过对于分类的全连接层其实完全可以使用Global average pooling来代替全连接层,就可以完全摆脱固定尺寸的束缚,对于一般的分类问题不仅提高了效率,还能减少训练参数。
[1] Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
[2] Scale-Invariant Convolutional Neural Networks
[3] Global Average Pooling