0、简介
问题:计算机视觉中的反卷积(deconvolution)是使用了独立的可训练参数还是把前面的卷积核转置?关于计算机视觉中的反卷积(deconvolution)还是没太弄懂,我原以为反卷积的卷积核中的参数也是训练出来的,只是因为放大了输出所以叫反卷积,可今天看到讲关于卷积神经网络可视化的文章,卷积神经网络的对特征图卷积核的可视化可以采用deconvolution的方法,而且是把前面的卷积核转置一下就直接用,而不是独立的训练其中参数,如下图:
答:
框架里实现的是独立的可训练参数,自己看一下pytorch代码,或者Keras代码就清楚了。但是CNN可视化这篇论文里的反卷积是前面卷积核的转置,仅仅是为了可视化而已
1、什么是反卷积?
上采样(Upsample)
在应用在计算机视觉的深度学习领域,由于输入图像通过卷积神经网络(CNN)提取特征后,输出的尺寸往往会变小,而有时我们需要将图像恢复到原来的尺寸以便进行进一步的计算(e.g.:图像的语义分割),这个采用扩大图像尺寸,实现图像由小分辨率到大分辨率的映射的操作,叫做上采样(Upsample)。
反卷积(Transposed Convolution)
上采样有3种常见的方法:双线性插值(bilinear),反卷积(Transposed Convolution),反池化(Unpooling),我们这里只讨论反卷积。这里指的反卷积,也叫转置卷积,它并不是正向卷积的完全逆过程,用一句话来解释:
反卷积是一种特殊的正向卷积,先按照一定的比例通过补 [公式] 来扩大输入图像的尺寸,接着旋转卷积核,再进行正向卷积。
2、反卷积的数学推导
正向卷积的实现过程
假设输入图像input
尺寸为4x4
,元素矩阵为:
卷积核kernel
尺寸为3x3
,元素矩阵为:
步长strides=1
,填充padding=0
,即i=4,k=3,s=1,p=0
,则按照卷积计算公式
输出的图像output
的尺寸为2x2
用矩阵乘法描述卷积
把input
的元素矩阵展开成一个列向量X
把输出图像output
的元素矩阵展开成一个列向量Y
:
对于输入的元素矩阵X
和 输出的元素矩阵 Y
,用矩阵运算描述这个过程:
通过推导,我们可以得到稀疏矩阵 C
:
反卷积的操作就是要对这个矩阵运算过程进行逆运算,即通过 C
和 Y
得到 X
,根据各个矩阵的尺寸大小,我们能很轻易的得到计算的过程,即为反卷积的操作:
但是,如果你代入数字计算会发现,反卷积的操作只是恢复了矩阵 X
的尺寸大小,并不能恢复 X
的每个元素值,本文最后会在 tensorflow
平台进行这个实验
在此之前,我们先给出反卷积图像尺寸变化的公式。
反卷积的输入输出尺寸关系
在进行反卷积时,简单来说,大体上可分为以下两种情况:
Relationship 1:
此时反卷积的输入输出尺寸关系为:
如上图所示,我们选择一个输入 input
尺寸为 3x3
,卷积核 kernel
尺寸为 3x3
,步长 strides=2
,填充 padding=1
,即 i=3,k=3,s=2,p=1
,则输出 output
的尺寸为 o=2x(3-1)-2+3=5
。
Relationship 2:
此时反卷积的输入输出尺寸关系为:
如上图所示,我们选择一个输入 input
的尺寸为 3x3
,卷积核 kernel
的尺寸为 3x3
,步长 strides=2
,填充 padding=1
,即 i=3,k=3,s=2,p=1 ,
则输出 output
的尺寸为o=2x(3-1)-2+3+1=6
。
反卷积在 FCN 中的应用
在图像语义分割网络 FCN-32s 中,上采样反卷积操作的输入每张 {\E heatmap} 的尺寸是 7x7
,我们希望进行一次上采样后能恢复成原始图像的尺寸 224x224
,代入公式:
根据上式,我们可以得到一个关于 s,k,p
三者之间关系的等式:
通过实验,最终找出了最合适的一组数据: