首页 > 编程知识 正文

反卷积公式,稀疏矩阵卷积

时间:2023-05-04 23:23:14 阅读:131289 作者:3308

转载卷积的介绍。 详细易懂。 https://blog.csdn.net/zju _ huster/article/details/98616153

谈倒排卷积的理解

为什么是倒排卷积

卷积运算

反过来操作

卷积矩阵

替换卷积矩阵

总结

最近看了反卷积的概念,变得不太明白了。 然后,我查了资料,终于明白了。 顺便在这里结合自己的理解进行记录。 当我们使用神经网络生成网络图像时,常常需要将一些低分辨率图像转换为高分辨率图像。 除了几种传统的插值方法外,神经网络通常还用**反卷积(反卷积) *来实现这种上采样操作。 为什么是倒排卷积

“反卷积”在一些文献中常常被称为“反卷积”和“部分交叉卷积”。

如果我们的网络能学习地面采样的方法,就可以采用倒排卷积。 此方法不使用预定义的插值方法,而是具有可学习的参数。 理解倒排卷积这个概念很重要。 因为它被应用于一些重要的文献。 例如:

DCGAN生成器将以随机值转换为完整大小的图像,但在这种情况下必须使用反卷积。

在语义分割中,通过使用卷积层在编码器中进行特征提取,然后在解码层中恢复到原始大小,能够对原始图像的各个像素进行分类。 这个过程也被用于倒排卷积。

卷积运算

首先,回顾下卷积操作是如何工作的,用一个小例子来直观一下。 假设有4*4的矩阵。 将3 * 3卷积内核应用于该矩阵,将“分步参数”设定为1,而不添加“填充”。 如下图所示,输出为2 * 2的矩阵。

该卷积操作将输入矩阵和卷积内核中的各个元素的乘积相加。 我们得到2 * 2的矩阵,因为任何填充和使用步骤都不是1。 此卷积操作在输入和输出之间存在位置关联,例如,输入矩阵的左上方值影响输出矩阵的左上方值。 更具体地,3 * 3卷积内核是用于级联输入矩阵的9个值,并将它们转换为输出矩阵中的一个值。 卷积运算是多对一的映射关系。 反过来操作

现在,假设反过来操作。 也就是说,输入矩阵的一个值对应于输出矩阵的九个值,这是一对多的映射关系。 这就像卷积操作的逆操作,其核心是使用倒排卷积。 例如,将2 * 2矩阵上采样为4 * 4矩阵。 此操作保持一对一到九的映射关系。

因此,如下图所示,卷积操作是多对一的,转置卷积操作是一对多的。 但是具体怎么操作? 为了便于以下讨论,必须定义“卷积矩阵”(convolution matrix )和相应的反卷积矩阵。 卷积矩阵

通过重新排列卷积内核,可以将卷积操作表示为矩阵乘法。 下图是原始的卷积核。

对3 * 3卷积内核进行排序,得到以下4 * 16卷积矩阵: 这就是卷积矩阵。 此矩阵的每一行都定义了卷积操作。 下图更直观地说明了这种排序是如何进行的。 通过对卷积内核的元素进行排序并添加“零填充”(zero padding )来填充卷积矩阵中的每一行。 将输入矩阵4 * 4平均化为16 * 1形式的列向量,以将卷积运算表示为卷积矩阵和输入矩阵的向量乘法。 如下图所示,将4 * 16的卷积矩阵与1 * 16的输入列向量进行矩阵乘法运算,得到输出列向量。 这个输出的4 * 1矩阵可以重构为2 * 2矩阵,但这个矩阵和我们最初通过传统的卷积操作得到的一模一样。 综上所述,重要的是这个卷积矩阵。 16(4*4到4 )2)之所以可以流动,是因为该卷积矩阵的大小为4 * 16。 所以,如果有16 * 4的矩阵,不是可以从4 )2)到16 )4)进行采样操作吗? 替换卷积矩阵

我们想要从4到16,所以用了16 * 4的矩阵,但还有一点需要注意。 我们想维持从1到9的映射关系。

假设将此卷积矩阵c(4*16 )替换为C T C^TC

t

(16 * 4)。 我们对C T C^TC

t

与列向量(4 * 1)进行矩阵乘法运算,生成16 * 1的输出矩阵。 此倒排矩阵将一个元素映射到九个元素。

此输出的reshape为(4 * 4)的矩阵。

我们只是将小矩阵(2 * 2)上采样为更大尺寸的矩阵(4)。 这是因为该反卷积矩阵保持了从一个元素到九个元素的映射关系,但该关系出现在该反卷积元素中。 值得注意的是,这里的反卷积矩阵的参数不一定是从原始卷积矩阵简单反卷积得到的,反卷积操作只是描述了反卷积矩阵的形状,并且其内部参数可以随机初始化。

总结

卷积操作与常规卷积操作建立相同的连接关系,只是方向相反。 你可以用这个进行上采样。 另外,由于该反卷积矩阵的参数可以学习,所以不需要人为预定义的方法。 即使被称为倒排卷积,那也不意味着我们

将一些现存的卷积矩阵简单转置并使用其转之后的值。

从本质上来说,转置卷积并不是一个卷积,但是我们可以将其看成卷积,并且当成卷积去使用。我 们 通 过 在 输 入 矩 阵 中 的 元 素 之 间 插 入 0 进 行 补 充 , 从 而 实 现 尺 寸 上 采 样 , 然 后 通 过 普 通 的 卷 积 操 作 就 可 以 产 生 和 转 置 卷 积 相 同 的 效 果 了 color{red}{我们通过在输入矩阵中的元素之间插入0进行补充,从而实现尺寸上采样,然后通过普通的卷积操作就可以产生和转置卷积相同的效果了}我们通过在输入矩阵中的元素之间插入0进行补充,从而实现尺寸上采样,然后通过普通的卷积操作就可以产生和转置卷积相同的效果了。你在一些文章中将会发现好多都是这样解释转置卷积的,但是这个转置卷积需要通过插入0进行上采样,因此是比较低效的。

注意 : 转置卷积会导致生成图像中出现棋盘效应(checkerboard artifacts),这篇文章《Deconvolution and Checkerboard Artifacts》对应中文推荐了一种上采样的操作(也就是插值操作),这个操作接在一个卷积操作后面可以减少这种现象。如果你的主要目的是生成尽可能少棋盘效应的图像,那么这篇文章就值得你去阅读。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。