
动手学深度学习 - 机器视觉 - 14.10 转置卷积(Transposed Convolution)
转置卷积是实现上采样的重要方法,可调节 kernel、padding、stride。可以通过稀疏矩阵建模,作为标准卷积的“反操作”。适用于图像生成、语义分割、autoencoder 解码等任务中。字节、百度、腾讯等厂商普遍将转置卷积用于分割模型 decoder 部分,或用于可微上采样;NVIDIA GAN 系列将其作为高质量生成网络核心模块;DeepSeek 等 AI+金融企业在构建视觉 AI 模
深度学习视觉项目:转置卷积(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 练习建议
-
在第 14.10.3 节中,卷积输入与转置卷积输出形状相同,它们的值是否相同?为什么?
-
使用矩阵乘法实现卷积是否有效?有哪些优缺点?
更多推荐
所有评论(0)