深度学习视觉项目:转置卷积(Transposed Convolution)


🔸14.10.1 基本操作

在语义分割等像素级任务中,为了让输出的空间维度与输入相同,需要使用“上采样”操作。转置卷积(Transposed Convolution)可以通过“反向卷积”将特征图空间维度扩大。

基本实现如下:

def trans_conv(X, K):
    h, w = K.shape
    Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1))
    for i in range(X.shape[0]):
        for j in range(X.shape[1]):
            Y[i: i + h, j: j + w] += X[i, j] * K
    return Y

示例:

X = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
trans_conv(X, K)

输出:

tensor([[ 0.,  0.,  1.],
        [ 0.,  4.,  6.],
        [ 4., 12.,  9.]])

使用 PyTorch 高级 API 实现:

X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, bias=False)
tconv.weight.data = K
tconv(X)

📘 理论理解:

转置卷积(也称反卷积或 fractionally strided convolution)不是简单的矩阵转置,而是将输入特征图“反向传播”回更大的空间维度。它通过 kernel 对输入进行“扩张式”卷积,最终实现上采样的效果。

图 14.10.1 展示了一个输入特征图每个像素与 kernel 卷积后广播到对应输出区域,并累加成最终输出。

🏢 企业实战理解:

  • 字节跳动语义分割模型:使用转置卷积模块恢复高分辨率 mask 预测,结合 skip connection 保持低层细节,部署在人像抠图和直播虚拟背景模型中。

  • DeepSeek 视频生成模型(类 Diffusion 模型):用于通过 latent 到 image 空间的反向解码,多个转置卷积 block 组成 decoder。

  • OpenAI 的 DALL·E 系列:在 image decoder 中采用转置卷积配合 self-attention,实现分辨率渐进式生成。

  • NVIDIA StyleGAN 系列:在 generator 中大量使用带 PixelNorm 的转置卷积,逐步构建出高清人脸。

 


🔸14.10.2 内边距、步幅和多个通道

可通过设置 padding 和 stride 控制输出大小。

填充示例:

tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)
tconv.weight.data = K
tconv(X)  # 输出仅为中心位置

步幅为 2 示例:

tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
tconv.weight.data = K
tconv(X)

多通道示例:

X = torch.rand(size=(1, 10, 16, 16))
conv = nn.Conv2d(10, 20, kernel_size=5, padding=2, stride=3)
tconv = nn.ConvTranspose2d(20, 10, kernel_size=5, padding=2, stride=3)
tconv(conv(X)).shape == X.shape  # 输出为 True

📘 理论理解:

  • padding:作用于输出空间边缘;

  • stride:决定插值间隔,即扩张后的步幅;

  • 多通道支持:与标准卷积一致,支持多输入多输出通道,具有独立 kernel。

PyTorch 中的 nn.ConvTranspose2d 允许设置这些参数,灵活控制输出分辨率。

🏢 企业实战理解:

  • 百度地图智能驾驶:在转置卷积后结合 bilinear resize + refinement module 保证恢复出的 mask 连贯性,避免 checkerboard artifact。

  • 腾讯优图分割系统:输出段先使用 ConvTranspose2d(stride=2) 上采样,再使用 1×1 卷积调整类别维度,有效提升精度与推理速度。

  • Google DeepLab 系列(v3+):大量采用 Atrous Spatial Pyramid + 转置卷积 作为 decoder,增强对物体边缘的定位能力。

 


🔸14.10.3 与矩阵转置的关系

将卷积操作转换为稀疏矩阵乘法的过程如下:

X = torch.arange(9.0).reshape(3, 3)
K = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
Y = d2l.corr2d(X, K)

构建稀疏权重矩阵:

def kernel2matrix(K):
    k, W = torch.zeros(5), torch.zeros((4, 9))
    k[:2], k[3:5] = K[0, :], K[1, :]
    W[0, :5], W[1, 1:6], W[2, 3:8], W[3, 4:] = k, k, k, k
    return W

W = kernel2matrix(K)

前向传播与矩阵乘法一致:

Y == torch.matmul(W, X.reshape(-1)).reshape(2, 2)

转置卷积 = 权重矩阵转置的乘法:

Z = trans_conv(Y, K)
Z == torch.matmul(W.T, Y.reshape(-1)).reshape(3, 3)

📘 理论理解:

通过稀疏矩阵实现卷积操作,可将卷积转化为一组稀疏矩阵乘法,反之则为转置卷积对应矩阵的转置操作。

换句话说:
卷积 = 矩阵 $W \cdot X$
转置卷积 = 矩阵 $W^\top \cdot Y$

这意味着:反向传播中权重矩阵转置就等价于一层转置卷积的前向传播过程

🏢 企业实战理解:

  • 幻方量化 DeepSeek 系统中 Transformer Vision Decoder 模块:用稀疏转置矩阵加速低维 latent → 高维图像的转换。

  • OpenAI CLIP 模型后处理可视化模块:使用转置卷积还原注意力图对应的空间热力区域,帮助调试与解释。

  • Google Colab 示例 Notebook:通过显示稀疏权重矩阵的热力图,帮助新手理解卷积本质与反向传播对应结构。


🔸14.10.4 小结

  • 转置卷积通过“广播输入元素”,实现特征图上采样。

  • 可以设置 padding、stride、通道数等参数灵活控制输出尺寸。

  • 可与标准卷积互为反操作,支持通过矩阵乘法方式建模。

📘 理论总结:

  • 转置卷积是实现上采样的重要方法,可调节 kernel、padding、stride。

  • 可以通过稀疏矩阵建模,作为标准卷积的“反操作”。

  • 适用于图像生成、语义分割、autoencoder 解码等任务中。

🏢 企业总结:

  • 字节、百度、腾讯 等厂商普遍将转置卷积用于分割模型 decoder 部分,或用于可微上采样;

  • NVIDIA GAN 系列 将其作为高质量生成网络核心模块;

  • DeepSeek 等 AI+金融企业 在构建视觉 AI 模型时,也采用类似机制提升输出的细节可控性;

  • OpenAI、Google 强调其与矩阵乘法在可解释性、逆变换映射中的一致性,是理论与工程统一的代表模块。


🔸14.10.5 练习建议

  1. 在第 14.10.3 节中,卷积输入与转置卷积输出形状相同,它们的值是否相同?为什么?

  2. 使用矩阵乘法实现卷积是否有效?有哪些优缺点?


Logo

欢迎加入DeepSeek 技术社区。在这里,你可以找到志同道合的朋友,共同探索AI技术的奥秘。

更多推荐