上采样与转置卷积直觉

上采样

最近邻插值

最简单的上采样。没有可学习参数,不训练。做法是:新位置的值直接复制离它最近的旧位置。

缺点是结果容易块状,不平滑。

双线性插值

固定上采样方法,也没有可学习参数。它不是直接复制,而是根据周围 4 个点做加权平均。

低分辨率图像不是只有孤立的几个点,而是可以想象成一张连续的平面,只不过我们只知道旧网格点上的值。上采样就是要在这张平面上采更多点。新采样点如果落在旧网格的格子里,就用周围四个已知点估计它的值。

边界处不一定刚好有四个点包围。比如新位置落在最外侧附近,可能需要用边界处理方式,比如 clamp、复制边缘、padding 或特殊坐标对齐规则。PyTorch 里的 align_corners=True/False 也会影响新旧坐标怎么对应

\[(1−u)(1−v)a+u(1−v)b+(1−u)vc+uvd \]

双线性插值的本质是“平滑过渡”。它比最近邻插值更平滑,不容易出现明显块状边界。

转置卷积

转置卷积是可学习的上采样层。它有自己的 kernel 参数,训练时会通过 loss 反向传播更新。

双线性初始化

不是一种新的上采样层,而是给转置卷积 kernel 赋初值的方法。

转置卷积本来是可学习的,但如果一开始随机初始化,输出可能很乱。于是可以先把它的 kernel 设置成“双线性插值”的形状,让它初始时就像一个双线性上采样器。

Transposed Convolution 转置卷积直觉

回顾非方阵矩阵乘法

向量 1 * d 表示一个有 d 维度特征的向量,如果经过一个 d * n 的矩阵进行变换/乘 d * n 的矩阵,可以理解为这个矩阵把向量的原始维度特征进行翻译,翻译为在新维度(n) 的向量 1 * n。具体表现为向量的原始 d 维特征被矩阵的每一列(共n列)独立编译,(其中每一列的行数必须和向量特征数对齐以符合编译规则,即要求矩阵行数和向量列数相等),编译也就是线性相乘再相加,得到这一列的一个值(共n个值),也就是原始维度在变换后在新维度之一的一个映射值。矩阵中的每一列可解释为新维的编译规则(通过与输入维度对齐的参数数量计算),最终得到一个 n 维特征的新向量(即通过非方阵矩阵进行升维或降维)

普通卷积操作

卷积等效矩阵

在卷积计算中,为了提高效率(空间换时间),数学上等效为在卷积核周围填充使其对齐输入 feature map 进行矩阵的线性映射操作。等效矩阵的数目由卷积操作的 paddingstride 控制,也就是输出 feature map 大小(展平后的维数)。实际计算中先将 feature map 展平成向量(维数16),同时将卷积kernel 的等效矩阵展平并合并成一个非方阵矩阵(16 * 4 稀疏),再通过矩阵乘法也就是将原本的16维特征信息的向量翻译成 4 维特征信息的新向量。这个过程也称为下采样。其中输出 feature map 的每维的值都是 输入特征经过由卷积核参数定义的规则映射的,即具有原始输入的信息,也叫感受野。

等效矩阵相乘

秩(rank):一个矩阵里真正有多少个“独立信息方向“。有些列可能只是其他列的倍数或组合,这种就不算新的独立信息。对于一个 \(m \times n\) 矩阵:\(A \in \mathbb{R}^{m \times n}\) ,其最大秩只能是:\(rank(A) < min(m,n)\)

如果输出维度< 输入维度,那么 \(rank(A)≤m<n\),必然不可能保留输入的所有n个独立方向(n维特征)一定会有某些非零方向被压成 0,或者多个输入被映射成同一个输出。因此一般不可逆。无法通过“逆矩阵”还原经下采样的原始 feature map。

转置矩阵

语义分割并不需要恢复原图像,它需要恢复的是像素级类别预测图。上采样的目的是恢复原始分辨率,即还原 feature map 大小。下采样后的信息本来就不唯一,伪逆太贵,伪逆也不能恢复原输入,只能给出某个约束下的解,比如最小范数解。转置卷积是可学习的,它的参数可以通过 loss 训练。

  1. 实际直觉视角理解:遍历低分辨率输入 feature map 里的每一个真实点,把这个点乘上一个卷积核,然后撒到高分辨率输出图的一块区域上,间隔stride - 1。pytorch实现:
nn.ConvTranspose2d(C, C, kernel_size=2, stride=2, padding=0)
  • stride:相邻两个输入点,对应到输出图上时,它们生成的 patch 起点之间相隔距离
  • kernel_size :每个输入点会扩散成的区域(区域会发生重叠则重叠部分相加。)
  • padding :控制输出端的裁剪和对齐,使上采样结果达到指定尺寸。

平滑上采样:kernel_size=4, stride=2, padding=1 即每个输入点扩散为4 *4 区域,patch 之间会重叠,表达能力更强。

  1. 等价数学矩阵理解:矩阵每一列依然是编译规则,其与输入维度特征数对齐,与输入维度计算得到向量在输出维度之一的映射值,最终得到了新的 16 维向量(还原 feature map 大小,无法还原信息)。

转置卷积矩阵

等效理解
3. 另一种转置卷积理解(插零 + 普通卷积视角):先预设输出 feature map ,用之前的卷积核的转置扫过(这里的运动视为 s = 1,p = 2,k=3 不是 PyTorch 参数本身,而是等价解释后的普通卷积参数。),最终得到输出 feature map。

转置卷积的一种理解

训练与学习

转置卷积的 kernel 是可学习参数;它通过分割 loss 的反向传播学习,目标是让上采样后的像素级预测更接近真实 mask。

引用

  1. 截图伴读来自 【转置卷积(transposed convolution)】 https://www.bilibili.com/video/BV1mh411J7U4/?share_source=copy_web&vd_source=691b4b17de00467efcf4d4d7f918244c
  2. 卷积动图展示 https://github.com/vdumoulin/conv_arithmetic
  3. Long, J., Shelhamer, E. and Darrell, T. (2015) ‘Fully convolutional networks for semantic segmentation’, Proceedings of the IEEE Conference on Computer Vision and Pattern Recognition (CVPR), pp. 3431–3440.
posted @ 2026-07-15 03:16  离心律  阅读(6)  评论(0)    收藏  举报