在深度学习的网络模型中,不但有通过卷积获得图像特征,而且也有一些放大操作,例如FCN、U-Net等等。这些操作有上采样(Upsampling)、上池化(Unpooling)、双线性插值、反卷积。下面对这四个进行梳理。
一、上采样(Upsampling)
上采样概念:上采样指的是任何可以让图像变成更高分辨率的技术。最简单的方式是重采样和插值:将输入图片进行缩放到一个想要的尺寸,而且计算每个点的像素点,使用如双线性插值等插值方法对其余点进行插值来完成上采样过程。【没有学习过程】
上采样阶段没有使用MaxPooling时的位置信息,而是直接将内容复制来扩充Feature Map。上图中右边4*4矩阵,用了四种颜色的正方形框分割为四个区域,每一个区域内的内容是直接复制上采样前的对应信息。
二、上池化(Unpooling)
上池化是在CNN中常用的来表示MaxPooling的逆操作。这是论文《Visualizing and Understanding Convolutional Networks》中产生的思想。结构如下图所示。【没有学习过程】
上池化的过程,特点是在MaxPooling的时候保留最大值的位置信息,之后在Unpooling阶段使用该信息扩充Feature Map,除最大值位置以外,其余补0。可以看出上池化和上采样的不同结果。
三、双线性插值
双线性插值是插值算法中的一种,是线性插值的扩展。利用原图像中目标点四周的四个真实存在的像素值来共同决定目标图中的一个像素值,其核心思想是在两个方向分别进行一次线性插值。
已知的红色数据点和待插值的绿色数据点。我们已知函数f在四个点值,我们想得到未知函数f在点P= (x,y) 的值。
第一步:X方向的线性插值,在Q12,Q22中插入蓝色点R2,Q11,Q21中插入蓝色点R1。
第二步 :Y方向的线性插值 ,通过第一步计算出的R1与R2在y方向上插值计算出P点。
在x与y方向上,z值成单调性特性的应用中,此种方法可以做外插运算,即可以求解Q11~Q22所构成的正方形以外的点的值。
四、反卷积(Deconvolution / convolution with fractional strides / transpose convolution)
首先,考虑如下一个简单的卷积层运算,其参数为,输出为
。
对于上述卷积运算,我们把上图所示的3×3卷积核展成一个如下所示的[4,16]的稀疏矩阵, 其中非0元素
表示卷积核的第
行和第
列。
我们再把4×4的输入特征展成[16,1]的矩阵,那么
则是一个[4,1]的输出特征矩阵,把它重新排列2×2的输出特征就得到最终的结果,从上述分析可以看出卷积层的计算其实是可以转化成矩阵相乘的。通过上述的分析,我们已经知道卷积层的前向操作可以表示为和矩阵
相乘,那么我们很容易得到卷积层的反向传播就是和
的转置相乘。
反卷积又被称为Transposed(转置) Convolution,我们可以看出其实卷积层的前向传播过程就是反卷积层的反向传播过程,卷积层的反向传播过程就是反卷积层的前向传播过程。因为卷积层的前向反向计算分别为乘和
,而反卷积层的前向反向计算分别为乘
和
,所以它们的前向传播和反向传播刚好交换过来。
下图表示反卷积过程。
【参考资料】
1、https://blog.csdn.net/shawroad88/article/details/91815669
2、https://blog.csdn.net/u011771047/article/details/72872742
3、https://buptldy.github.io/2016/10/29/2016-10-29-deconv/
4、https://blog.csdn.net/nianzu_ethan_zheng/article/details/79017711