前言:
Date: 2020/02/09
Author: CW
本文是CW学习转置卷积的复习笔记,方便周期性进行回顾。文中没有深入剖析细节,仅仅是将关键点和问题提取出来,具体细节可参考文末链接。
概念
转置卷积(Transposed Convolution),通常也称作 小数步长的卷积(Fractionally Strided Convolution)和 反卷积(Deconvolution),属于上采样操作,即将图像从低分辨率转换到高分辨率。
注:其实将转置卷积其称作反卷积并不合适,因为转置卷积并不完全是信号图像处理中所定义的反卷积。从技术上来说,信号处理中的反卷积是卷积的逆向操作,跟这里所说的转置卷积不一样(转置卷积只能恢复出原信号的 shape,并不能恢复 value,只能根据模型的学习过程不断逼近 value)。
与传统上采样方法比较
传统上进行上采样通常用插值的方法,如最近邻插值(Nearest Neighbor Interpolation)、双线性插值(Bi-linear Interpolation)等,这些方法相当于人工特征工程,因为插值的这个过程中是没有参数供网络学习的,相对地,转置卷积的卷积核权重是可通过模型训练不断学习的。
因此,插值和转置卷积相比较的话,前者没有参数,更加节省计算和空间资源,后者可通过学习来逼近目标值,更加“智能”,无需人工预先定义操作(不同插值方法就是人工预先定义的不同的上采样方式)。
卷积 vs 转置卷积
卷积操作中,输入4x4和卷积核3x3转换为矩阵运算:
转置卷积中,输入和卷积核的矩阵运算:
由上可发现,转置卷积核转换的矩阵相当于卷积核转换的矩阵的逆,因此,称作“转置矩阵”也有理可依。
需要注意的是,转置卷积需要维持在卷积中的输入和输出之间的位置连接关系(比如在卷积中,某输出元素是由9个输入元素映射得到的,那么转置卷积时,这个输出元素就要对应地映射会那9个输入元素)。
尺寸计算
假设卷积中,卷积核尺寸(kernel size)为k,步长(stride)为s,填充(padding)为p,输入尺寸为x,输出尺寸为y,那么有以下关系:
y =
而转置卷积的输入即卷积的输出,因此,在转置卷积中,有以下关系:
y' = (x' - 1)s - 2p + k,其中 x' = y,y' = x
棋盘效应
使用转置卷积通常会造成棋盘效应,即图像中某部位的颜色比其他相邻部位深,整体图像呈现不规则深深浅浅的现象。造成这一现象的原因是转置卷积映射后的不均匀重叠,这种重叠会使得图像中某个部位的颜色比其他部位更深。
(a)中,过滤器大小为 2,输出图像上的所有像素从输入图像中接收到同样多的信息,它们都从输入图像中接收到一个像素的信息,这里不存在转置卷积带来的重叠区域;
来看(b),当我们将过滤器大小增至 4 时,均匀的重叠区域缩小了,但是依旧可以将输出图像的中间部分用作有效的输出,其中每个像素从输入图像中接收到的信息是同样多的;
然而在(c)和(d)中,这时滤器大小分别变成 3 或 5 ,输出图像上的每个像素与其毗邻的像素所接收到的信息量都不相同,无法找到一个连续并均匀的重叠区域。
由上可以看出,当过滤器大小无法被步长整除时,转置卷积就会出现“不均匀重叠”,从而带来棋盘效应,这种情况在二维上会更加严重,因为二维上的两个模式会相乘,因而最终的不均匀性会是原来的平方。
缓解棋盘效应通常有2种方式:
i). 使过滤器的大小能够被卷积步长整除(二者的整除关系使得卷积核每次滑动能用到的非零像素的个数是一样的,或者中间区域向两边逐渐减少,而不是随着滑动反复变化从而产生棋盘格形状);
ii). 先使用插值调整图像大小然后使用普通卷积,将图像卷积到目标尺寸。
参考:
https://blog.csdn.net/laizi_laizi/article/details/103122771
https://blog.csdn.net/u012370185/article/details/93883516
https://www.leiphone.com/news/201902/D2Mkv61w9IPq9qGh.html?uniqueCode=biIqSBpehsaXFwpN