dl转置卷积

转置卷积

转置卷积,顾名思义,通过名字我们应该就能看出来,其作用和卷积相反,它可以使得图像的像素增多

上图的意思是,输入是22的图像,卷积核为2 2的矩阵,然后变换成3*3的矩阵

代码如下

python 复制代码
import torch
from torch import nn
from d2l import torch as d2l

def trans_conv(X, K):  #X是原始矩阵,K是转置卷积核
    h, w = K.shape
    Y = torch.zeros((X.shape[0] + h - 1, X.shape[1] + w - 1))  # 转置卷积后的大小为x.shape[0] + k.shape[0] - 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)

传统输入可能都是四维,使用API一样的

python 复制代码
# 四维的话,调用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)

与常规卷积不同,在转置卷积中,填充被应用于的输出(常规卷积将填充应用于输入)。

例如,当将高和宽两侧的填充数指定为1时,转置卷积的输出中将删除第一和最后的行与列。

换句话说,转置卷积的padding是删除输出的一圈

python 复制代码
X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, padding=1, bias=False)
tconv.weight.data = K
tconv(X)

如果步幅为2的话,那么就会是一个4*4的矩阵

python 复制代码
# 步幅为2的话那就是4*4了
X, K = X.reshape(1, 1, 2, 2), K.reshape(1, 1, 2, 2)
tconv = nn.ConvTranspose2d(1, 1, kernel_size=2, stride=2, bias=False)
tconv.weight.data = K
tconv(X)

对于多个输入和输出通道,转置卷积与常规卷积以相同方式运作。 假设输入有ci个通道,且转置卷积为每个输入通道分配了一个kwkh的卷积核张量。
当指定多个输出通道时,每个输出通道的卷积核shape为ci
kw*kh

接下来我们可能会想,转置卷积为何以矩阵变换命名呢?我们先来看看矩阵乘法如何实现卷积

这是传统卷积

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

接下来通过矩阵乘法计算

python 复制代码
# 先将K 写成稀疏权重矩阵
def kernel2matrix(K):
    k, W = torch.zeros(5), torch.zeros((4, 9))  # W是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)
W
python 复制代码
# 然后就是矩阵乘法
Y == torch.matmul(W, X.reshape(-1)).reshape(2, 2)

而如果我们用W的转置*Y,那就是原来的Y的转置卷积了

python 复制代码
# 同样的,我们可以使用矩阵乘法来实现转置矩阵  Y 是卷积后的值
Z = trans_conv(Y, K)
Z == torch.matmul(W.T, Y.reshape(-1)).reshape(3, 3)
相关推荐
CODER03041 分钟前
Anaconda和Mamba创建环境管理包常用命令合集
python·深度学习·conda·虚拟环境·mamba·常用命令大全
智购科技自动售货机厂家4 小时前
2026自动售货机AI视觉识别优化:从YOLOv11n模型量化到RKNN部署的端侧推理工程实践~YH
javascript·人工智能·yolo·机器学习·计算机视觉·目标跟踪·perl
clorinda4 小时前
OpenCV图像增强基础——图像金字塔、直方图与特征提取
人工智能·opencv·计算机视觉
普密斯科技6 小时前
在线图像测量仪HM-1120如何实现电机轴承从抽检到全检的跨越
计算机视觉·3d·集成测试·测量
zx_741484817 小时前
【计算机视觉入门】基于 OpenCV 的银行卡号识别综合案例
人工智能·opencv·计算机视觉
高洁018 小时前
智能体的“记忆”难题
python·深度学习·机器学习·transformer
YOLO数据集集合8 小时前
UAVDT 无人机车辆检测数据集 - 无人机航拍 | 车辆检测 | 目标检测 | YOLO格式 | 智能交通 | 城市管理 | 多类别数据集 | 计算机视觉
人工智能·yolo·目标检测·机器学习·计算机视觉·目标跟踪·无人机
派大_星8 小时前
OpenCV发票图像处理:轮廓检测、透视变换与图像预处理
人工智能·opencv·计算机视觉
十三画者19 小时前
【文献分享】ConfRetro:融合3D构象信息的逆合成预测Transformer框架
人工智能·深度学习·数据挖掘·数据分析·transformer·数据可视化
雷帝木木21 小时前
数据湖与数据仓库:从理论到实践
人工智能·python·深度学习·机器学习