上采样与转置卷积直觉
上采样
最近邻插值
最简单的上采样。没有可学习参数,不训练。做法是:新位置的值直接复制离它最近的旧位置。
缺点是结果容易块状,不平滑。
双线性插值
固定上采样方法,也没有可学习参数。它不是直接复制,而是根据周围 4 个点做加权平均。
低分辨率图像不是只有孤立的几个点,而是可以想象成一张连续的平面,只不过我们只知道旧网格点上的值。上采样就是要在这张平面上采更多点。新采样点如果落在旧网格的格子里,就用周围四个已知点估计它的值。
边界处不一定刚好有四个点包围。比如新位置落在最外侧附近,可能需要用边界处理方式,比如 clamp、复制边缘、padding 或特殊坐标对齐规则。PyTorch 里的 align_corners=True/False 也会影响新旧坐标怎么对应
双线性插值的本质是“平滑过渡”。它比最近邻插值更平滑,不容易出现明显块状边界。
转置卷积
转置卷积是可学习的上采样层。它有自己的 kernel 参数,训练时会通过 loss 反向传播更新。
双线性初始化
不是一种新的上采样层,而是给转置卷积 kernel 赋初值的方法。
转置卷积本来是可学习的,但如果一开始随机初始化,输出可能很乱。于是可以先把它的 kernel 设置成“双线性插值”的形状,让它初始时就像一个双线性上采样器。
Transposed Convolution 转置卷积直觉
回顾非方阵矩阵乘法
向量 1 * d 表示一个有 d 维度特征的向量,如果经过一个 d * n 的矩阵进行变换/乘 d * n 的矩阵,可以理解为这个矩阵把向量的原始维度特征进行翻译,翻译为在新维度(n) 的向量 1 * n。具体表现为向量的原始 d 维特征被矩阵的每一列(共n列)独立编译,(其中每一列的行数必须和向量特征数对齐以符合编译规则,即要求矩阵行数和向量列数相等),编译也就是线性相乘再相加,得到这一列的一个值(共n个值),也就是原始维度在变换后在新维度之一的一个映射值。矩阵中的每一列可解释为新维的编译规则(通过与输入维度对齐的参数数量计算),最终得到一个 n 维特征的新向量(即通过非方阵矩阵进行升维或降维)
普通卷积操作

在卷积计算中,为了提高效率(空间换时间),数学上等效为在卷积核周围填充使其对齐输入 feature map 进行矩阵的线性映射操作。等效矩阵的数目由卷积操作的 padding 和 stride 控制,也就是输出 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 训练。
- 实际直觉视角理解:遍历低分辨率输入 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 之间会重叠,表达能力更强。
- 等价数学矩阵理解:矩阵每一列依然是编译规则,其与输入维度特征数对齐,与输入维度计算得到向量在输出维度之一的映射值,最终得到了新的 16 维向量(还原 feature map 大小,无法还原信息)。


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

训练与学习
转置卷积的 kernel 是可学习参数;它通过分割 loss 的反向传播学习,目标是让上采样后的像素级预测更接近真实 mask。
引用
- 截图伴读来自 【转置卷积(transposed convolution)】 https://www.bilibili.com/video/BV1mh411J7U4/?share_source=copy_web&vd_source=691b4b17de00467efcf4d4d7f918244c
- 卷积动图展示 https://github.com/vdumoulin/conv_arithmetic
- 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.

浙公网安备 33010602011771号