上采样和反卷积 Up-sampling and Transposed Convolution (Deconvolution)

2023-05-16

文章目录

  • 1. 卷积操作
  • 2. 卷积矩阵
  • 3. 反卷积
  • 4. 反卷积矩阵
  • 5. 使用卷积计算反卷积
  • 6. 总结
  • 参考文献

使用反卷积(Transposed Convolution)来进行上采样操作,不需要借助插值方法,并且可以提供能够学习的参数。

反卷积在DCGAN和图像的语义分割网络中,有很重要的应用。

1. 卷积操作

我们用一个简单的例子来介绍卷积的计算过程。如下图所示,用一个3x3的卷积核对一个4x4的矩阵进行卷积操作,步长为1,不施加padding,则可以得到一个2x2的结果矩阵。
在这里插入图片描述

计算输入矩阵和卷积核相对应的各个元素的乘积,最后相加得到卷积结果,如下图所示:
在这里插入图片描述

从上图的结果可以看到,卷积之后,输入矩阵与输出矩阵存在位置上的联系(positional connectivity)。输入矩阵的左上角元素会影响输出矩阵的左上角结果。3x3卷积核将输入矩阵中的9个元素与输出矩阵中的一个元素连接起来。卷积形成了多对一的关系。

2. 卷积矩阵

我们可以把卷积过程用矩阵乘法来表示。

3x3的卷积核:

在这里插入图片描述

可以排布成一个4x16的矩阵,如下图所示:
在这里插入图片描述
上图结果被称为卷积矩阵,矩阵的每一行决定了一次卷积操作。

在计算卷积的时候,需要把输入矩阵展平成一个16x1的列向量:
在这里插入图片描述
然后使用矩阵乘法得到卷积结果:
在这里插入图片描述
把乘法结果的4x1列向量reshape成2x2的矩阵,就得到了与图1一样的卷积结果:
在这里插入图片描述

3. 反卷积

反卷积可以看作是卷积操作的逆过程,也就是形成一对多的关系。如下图所示,我们要从一个2x2的矩阵,反推出一个4x4的矩阵:
在这里插入图片描述

接下来,我们介绍如何进行这样的反卷积操作。

4. 反卷积矩阵

借助于第2节介绍的卷积矩阵,可以很容易进行反卷积操作。

我们把卷积矩阵转置成一个16x4的矩阵,再与结果的4x1列向量相乘,就可以得到一个16x1的列向量,reshape之后就是一个4x4的矩阵。
在这里插入图片描述
把结果的16x1列向量reshape成一个4x4的矩阵,结果如下:
在这里插入图片描述
到此为止,我们把一个2x2的小矩阵,上采样变成了一个4x4的大矩阵。反卷积的过程形成了1对9的关系。

5. 使用卷积计算反卷积

如下图所示,使用相同的卷积核,通过卷积来计算反卷积。
在这里插入图片描述
这种方法非常低效,因为需要对输入矩阵大量补零,卷积过程中有大量的乘0操作。

6. 总结

  1. 使用反卷积可以进行上采样
  2. 反卷积具有可供学习的参数,不需要利用插值方法

参考文献

https://towardsdatascience.com/up-sampling-with-transposed-convolution-9ae4f2df52d0

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

上采样和反卷积 Up-sampling and Transposed Convolution (Deconvolution) 的相关文章

  • 从 C++ 中的离散概率分布中采样

    我是 C 新手 对缺乏可用的 通用的概率操作工具 即 Boost 和标准库中缺乏的东西 感到非常惊讶 我已经用其他语言完成了大量科学编程 但标准和 或无处不在的第三方附加组件始终包含全套概率工具 一位朋友宣称 Boost 是 C 的同等无处
  • 分层抽样 - 观察不足

    我想要实现的是从每组中获取 10 的样本 这是 2 个因素的组合 新近度和频率类别 到目前为止我已经考虑过包裹sampling和功能strata 这看起来很有希望 但我收到以下错误 并且很难理解错误消息以及错误所在或如何解决此问题 这是我的
  • 理解 scipy 反卷积

    我试图理解scipy signal deconvolve https docs scipy org doc scipy 0 15 0 reference generated scipy signal deconvolve html 从数学的
  • R 中的调查包:如何设置 fpc 参数(有限总体校正)

    我使用与大小成比例的概率 PPS 计划从采样框架中采样了一些数据 这样我就采样了6两个变量组合的分层 gender and pre与比例 pre gender High Low Medium F 0 155 0 155 0 195 M 0
  • CNN中的滤波器数量是多少?

    我目前看到theano的API theano tensor nnet conv2d input filters input shape None filter shape None border mode valid subsample 1
  • 空间域图像卷积

    我正在尝试复制结果这个链接 https stackoverflow com q 38709810 159072 using linear卷积于空间域 图像首先转换为二维double数组 然后进行卷积 图像和内核大小相同 图像在卷积之前进行填
  • 我的图像分割结果图在白色斑块中包含黑色格子

    I m doing an image segmentation with UNet like CNN architecture by Pytorch 0 4 0 It mark foreground as 1 and background
  • Richardson-Lucy 反卷积可以恢复潜在内核吗?

    我知道理查森 露西反卷积是为了恢复潜在图像 但假设我们有一个噪声图像和原始图像 我们能找到引起转变的内核吗 下面是一个 MATLAB 代码理查森 露西反卷积 http en wikipedia org wiki Richardson E2
  • conv1d 层的输入 0 与该层不兼容::预期 min_ndim=3,发现 ndim=2。收到完整形状:(无,30)

    我一直在研究一个使用时间序列数据与天气数据相结合来估计交通流量的项目 我的时间序列使用了 30 个值的窗口 并且使用了 20 个与天气相关的特征 我已经使用函数式 API 来实现此目的 但我不断收到相同的错误 并且我不知道如何解决它 我看过
  • Python SciPy 卷积与 fftconvolve

    我知道一般来说FFT and multiplication通常比直接更快convolve当数组比较大的时候进行操作 然而 我正在将一个很长的信号 比如 1000 万个点 与一个很短的响应 比如 1000 个点 进行卷积 在这种情况下fftc
  • 使用 python 进行拉丁超立方采样

    我想对由多个维度 2 3 4 的函数定义的分布进行采样 f x y 分布可能很丑陋 不标准 例如数据上的 3D 样条 高斯总和等 为此 我想对 2 4 维空间进行均匀采样 然后使用额外的随机数接受或拒绝空间的给定点进入我的样本 有没有现成的
  • 计算两幅图像之间的模糊内核

    与标准 且更具挑战性 去模糊和超分辨率场景不同 我可以访问原始 清晰 图像G而且是模糊版本B 我只是在寻找模糊内核h 所以因为B使用真实相机拍摄 关系为 B G h N 在哪里 表示卷积和N是一些附加噪声 自然 这是一个过度约束的问题 因为
  • 高斯模糊和卷积核

    我不明白什么是卷积核以及如何将卷积矩阵应用于图像中的像素 我说的是对图像进行高斯模糊操作 我还可以获得有关如何为高斯模糊操作创建内核的解释吗 我在读本文 http en wikipedia org wiki Gaussian blur但我似
  • 分析(可能受 I/O 限制)进程以减少延迟

    我想提高大型应用程序中特定方法的性能 目标是改善延迟 特定功能所花费的挂钟时间 而不是 必然 系统负载 要求 由于我预计大部分延迟是由 I O 造成的 因此请考虑等待 阻塞所花费的时间 换句话说 查看挂钟时间而不是 CPU 时间 由于该程序
  • 计算卷积的最快方法

    有人知道计算卷积最快的方法吗 不幸的是 我处理的矩阵非常大 500x500x200 如果我使用convn在 MATLAB 中 这需要很长时间 我必须在嵌套循环中迭代此计算 所以 我使用了 FFT 卷积 现在速度更快了 但是 我仍在寻找更快的
  • “iddata”类型的输入参数未定义函数“minus”

    这是后续我之前遇到的一个问题 https stackoverflow com questions 45688607 我想给信号一个偏移量 然后在其中添加一些延迟并计算 RMSE 但是在求差时我遇到以下问题 我想请教以下问题 我该如何解决上述
  • OpenCV 中的 Matlab Conv2 等效项

    我一直在尝试使用 OpenCV 对 2D 矩阵进行卷积 我实际上经历过这段代码http blog timmlinder com 2011 07 opencv equivalent to matlabs conv2 function resp
  • 拉普拉斯滤波器是如何计算的?

    我不太明白他们是如何得出导数方程的 有人可以详细解释一下 甚至可以提供一个有足够数学解释的链接吗 拉普拉斯滤波器看起来像 拉普拉斯先生提出了这个方程 这就是拉普拉斯算子的简单定义 二阶导数之和 您也可以将其视为海森矩阵 https en w
  • Numpy 方法从卷积核生成线性运算矩阵

    2D 卷积核 K 形状 k1 k2 n channel n filter 适用于 2D 矢量 A 形状 m1 m2 n channel 并生成另一个 2D 向量 B 形状 m1 k1 1 m2 k2 1 n filter with vali
  • 如何更新反卷积层的权重?

    我正在尝试开发一个反卷积层 或者准确地说是转置卷积层 在前向传递中 我进行了完全卷积 零填充卷积 在向后传递中 我进行有效的卷积 没有填充的卷积 以将错误传递到前一层 偏差的梯度很容易计算 只需对多余维度进行平均即可 问题是我不知道如何更新

随机推荐