转置卷积(反卷积)、微步卷积、空洞卷积

本文详细介绍了深度学习中三种重要的卷积操作:转置卷积用于图像上采样,微步卷积是特殊情况,适用于快速增大输出尺寸;空洞卷积则通过增加感受野来提升特征提取能力,避免参数过多和信息丢失。理解这些概念对于优化卷积神经网络模型至关重要。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.转置卷积:

转置卷积为卷积的逆操作,即通过转置卷积后实现图像的上采样

Z = W·X

X = W.T·Z

4*4的图片经过kernal_size=3,stride=1,padding=0的卷积操作得到2*2的特征

2*2的特征想要经过kernal_size=3的反卷积得到4*4的图片需要(kernal_size-1)的padding后进行卷积操作

2.微步卷积

微步卷积是转置卷积的特殊情况,即stride>1的卷积操作后,其转置卷积的trans_stride=1/stride

如图5*5的图片经过kernal_size=3,stride=2,padding=0的卷积操作后得到的1特征为2*2

反卷积时,特征值间插值(stride-1),做(kernal_size-1)padding,得到7*7图像,然后通过kernal_size=3,stride=1进行卷积得到5*5特征

3. 空洞卷积

3.1 意义:增加输出特征的感受野

3.2 感受野:卷积神经网络每一层输出的特征图(feature map)上的像素点在输入图片上映射的区域大小。再通俗点的解释是,特征图上的一个点对应输入图上的区域

3.3 可以增加感受野的方式:

 3.3.1增加卷积核大小:对于每个特征像素输出卷的像素多

3.3.2增加层数:卷的次数多,对应最后特征像素映射的图片像素也多

3.3.3增加pooling层:压缩像素,相当于感受野增大

方法1和方法2会增加参数信息,即需要学习的参数增多,方法三会丢失信息

3.4 空洞卷积 

如果卷积核每两个元素之间插入d-1个空洞,那么卷积核的有效大小为:M = m + (m-1)*(d-1)

微步卷积是一种新型卷积算法,采用了微观核心对卷积算法进行优化,能够提高图像识别等任务的准确性。在PyTorch中,可以通过使用nn.Conv2d函数来实现微步卷积。以下是一个简单的例子: ``` import torch import torch.nn as nn class MicroConv2d(nn.Module): def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0, groups=1, bias=True): super().__init__() self.kernel_size = kernel_size self.stride = stride self.padding = padding self.groups = groups self.conv = nn.Conv2d(in_channels, out_channels, kernel_size=self.kernel_size, stride=self.stride, padding=self.padding, groups=self.groups, bias=bias) def forward(self, x): x = nn.functional.unfold(x, kernel_size=self.kernel_size, stride=self.stride, padding=self.padding) batch_size, _, L = x.shape w = torch.randn(self.groups, L, self.conv.out_channels // self.groups, device=x.device) w = torch.softmax(w, dim=1) x = x.permute(0, 2, 1) x = x.view(batch_size * L, self.groups, 1) w = w.view(self.groups, 1, self.conv.out_channels // self.groups) out = torch.matmul(x, w) out = out.view(batch_size, L, self.conv.out_channels).contiguous() return out ``` 在这个例子中,MicroConv2d继承了nn.Module,并实现了__init__和forward两个函数。在__init__函数中,我们定义了卷积核大小(kernel_size)、步长(stride)、填充(padding)、卷积组数(groups)和是否使用偏置(bias)等参数,同时使用nn.Conv2d函数来定义实际的卷积层。在forward函数中,我们首先使用functional.unfold函数将输入张量变成一个二维矩阵,然后使用随机权重w对输入进行卷积操作,最后将结果reshape成卷积层的输出形状。在卷积操作中,我们使用了softmax函数对随机生成的权重进行了归一化处理,以提高模型的稳定性。 使用该类进行微步卷积操作的示例代码如下: ``` import torch import torch.nn as nn x = torch.randn(1, 3, 32, 32) conv = MicroConv2d(3, 64, kernel_size=3, stride=1, padding=1, groups=8) out = conv(x) ``` 在这个例子中,我们随机生成了一张3通道、32x32大小的图片作为输入,然后使用MicroConv2d函数定义了一个微步卷积层,并输入我们生成的图片进行卷积操作。最终,out张量的形状为1x64x32x32,表示输出了64个通道,每个通道的大小为32x32。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值