上采样、以及反卷积&空洞卷积区别

如题所述

第1个回答  2022-07-05

upsampling(上采样)的三种方式:
Resize ,如双线性插值直接缩放,类似于图像缩放;
反卷积 (deconvolution & transposed convolution);
反池化 (unpooling)。

上采样upsampling的主要目的是放大图像,几乎都是采用内插值法,即在原有图像像素的基础上,在像素点值之间采用合适的插值算法插入新的元素。

传统的网络是subsampling的,对应的输出尺寸会降低;upsampling的意义在于将小尺寸的高维度feature map恢复回去,以便做pixelwise prediction,获得每个点的分类信息。

大名鼎鼎的FCN使用反卷积来完成上采样的过程。

 

2、双线性插值
  双线性插值是插值算法中的一种,是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。

已知的红色数据点和待插值的绿色数据点
  假如我们想得到未知函数f在点P= (x,y) 的值,假设我们已知函数f在Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2)Q11=(x1,y1)、Q12=(x1,y2),Q21=(x2,y1)以及Q22=(x2,y2) 四个点 值。

在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q11~Q22所构成的正方形以外的点的值。
  
总结 线性插值法 利用原图像中 两个点 计算像素值进行插值, 双线性插值法 利用原图像中 四个点 计算目标像素值进行插值。

反卷积(转置卷积)通常用来两个方面:

反卷积(deconvolution) ,由于实现上采用转置卷积核的方法,所以有人说应该叫转置卷积TD(transposed convolution)。

当stride不为1的时候,转置卷积的卷积核就变成了一个带’洞’的卷积

在池化过程中,记录下max-pooling在对应kernel中的坐标,在反池化过程中,将一个元素根据kernel进行放大,根据之前的坐标将元素填写进去,其他位置补0 。在下采样的时候记录max的位置,上采样的时候最大值的位置还原,其它位置填0,如下图所示:

膨胀卷积(空洞卷积,Dilated Convolution)
膨胀卷积在Standard Convolution的基础上多了一个超参数称之为膨胀率(dilation rate),该超参数指的是kernel的间隔数量。

deconv的其中一个用途是做upsampling,即增大图像尺寸。而dilated conv并不是做upsampling,而是增大感受野。

可以形象的做个解释:

对于标准的k*k卷积操作,stride为s,分三种情况:

(1) s>1,即卷积的同时做了downsampling,卷积后图像尺寸减小;

(2) s=1,普通的步长为1的卷积,比如在tensorflow中设置padding=SAME的话,卷积的图像输入和输出有相同的尺寸大小;

(3) 0<s<1,fractionally strided convolution,相当于对图像做upsampling。比如s=0.5时,意味着在图像每个像素之间padding一个空白的像素后,stride改为1做卷积,得到的feature map尺寸增大一倍。

而dilated conv不是在像素之间padding空白的像素,而是在已有的像素上,skip掉一些像素,或者输入不变,对conv的kernel参数中插一些0的weight,达到一次卷积看到的空间范围变大的目的。

当然将普通的卷积stride步长设为大于1,也会达到增加感受野的效果,但是stride大于1就会导致downsampling,图像尺寸变小。大家可以从以上理解到deconv,dilated conv

参考链接:
反卷积 转置卷积的理解
FCN中反卷积、上采样、双线性插值之间的关系
upsampling(上采样)的三种方式
卷积、反卷积 、空洞卷积

相似回答