对于人体姿态估计、语义分割等高分辨率的任务,许多网络设计中采用了encoder-decoder模式。在decoding部分,需要对特征图进行上采样,本文归纳了几种不同的上采样方法。



文章目录

  • 双线性插值
  • 转置卷积
  • Dense Upsampling Convolution (DUC)
  • 空洞卷积


双线性插值

插值问题实际上是一种拟合问题。

所谓插值就是用 x’ 某个领域内的函数值按照一定规则拟合出一个函数,再在其中查找 f(x’) 的值。

CNN 频谱采样 cnn 上采样_CNN 频谱采样


双线性插值(bilinear upsampling)是其中一种非常简单的拟合方式。

CNN 频谱采样 cnn 上采样_卷积神经网络_02


对 srcImage 中某个邻域内进行插值,从而得到 dstImage 中某个像素值。

CNN 频谱采样 cnn 上采样_计算机视觉_03

虽然插值计算速度快,但这种插值的“感受野”是local的,只能看见相邻的四个像素点,在上采样过程中不可避免地产生细节信息损失。且双线性插值没有参数可以学习


转置卷积

deconvolution / transposed convolution / fractionally strided convolution(反卷积/转置卷积)。

卷积操作可以展开看作一个矩阵乘法,下面介绍一个简单的例子。

CNN 频谱采样 cnn 上采样_深度学习_04


输入图片可以从左到右、由上至下展开为一个CNN 频谱采样 cnn 上采样_计算机视觉_05 的向量CNN 频谱采样 cnn 上采样_卷积_06,则kernel对应的卷积可以表达为一个CNN 频谱采样 cnn 上采样_卷积_07稀疏矩阵CNN 频谱采样 cnn 上采样_深度学习_08:

CNN 频谱采样 cnn 上采样_深度学习_09

则输出特征图 CNN 频谱采样 cnn 上采样_计算机视觉_10,是一个CNN 频谱采样 cnn 上采样_卷积_11的向量。

以Y为输入,X为输出的逆过程,就是我们所说的转置卷积。CNN 频谱采样 cnn 上采样_计算机视觉_12,保持了卷积时的连接模式connectivity pattern。

CNN 频谱采样 cnn 上采样_计算机视觉_13


我们总是可以用一个直接的卷积(direct conv)来模拟转置卷积的过程。其缺点是需要在输入图中加上多行/列的零,实现效率低。

对于上述例子,我们可以对2*2输入图片进行zero-padding,再卷积,注意观察下图,仍然保持了连接模式。

CNN 频谱采样 cnn 上采样_卷积_14


对不同的卷积参数,有不同的转换方式。具体情况可以看参考文献 A guide to convolution arithmetic for deep learning

Pytorch中的转置卷积就是根据这种direct conv的方式来定义的。文档

在语义分割任务中,结合Unpooling层,可以更好地恢复空间位置信息。

CNN 频谱采样 cnn 上采样_深度学习_15


CNN 频谱采样 cnn 上采样_卷积_16


Dense Upsampling Convolution (DUC)

CNN 频谱采样 cnn 上采样_CNN 频谱采样_17


CNN 频谱采样 cnn 上采样_深度学习_18 --> CNN 频谱采样 cnn 上采样_计算机视觉_19 --> CNN 频谱采样 cnn 上采样_深度学习_20

先增加channel,再reshape到需要的上采样大小。方法来自《Understanding Convolution for Semantic Segmentation》


空洞卷积

Dilated/Atrous Convolution (膨胀卷积/空洞卷积),就是在标准卷积核中注入空洞(0),使感受野增大。


CNN 频谱采样 cnn 上采样_卷积神经网络_21

标准卷积


CNN 频谱采样 cnn 上采样_卷积神经网络_22

空洞卷积 dilation rate=2

空洞卷积常在语义分割等需要保持空间信息的高分辨率网络中被用到,取代传统的pooling和strided convolution。保持特征图分辨率,同时获得更大的FOV(field-of-view),以获取全局信息。避免了encoder-decoder架构中信息的损失。

CNN 频谱采样 cnn 上采样_卷积神经网络_23


gridding problem:避免在连续的空洞卷积中选择相同的dilation rate,否则会导致感受野不连续,丢失local信息。


参考资料