详细解释普通卷积、分组卷积、深度卷积、逐点卷积和深度可分离卷积的概念,包括它们的输入、卷积核和输出的形状。

  • class torch.nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')
     

  • in_channels:输入通道的数量,对应于输入的图像或特征图的深度。
  • out_channels:输出通道的数量,表示卷积核(滤波器)的数量,也即卷积操作后生成的特征图的深度。
  • kernel_size:卷积核的大小,可以是一个整数表示正方形卷积核,也可以是一个元组 (h, w) 表示高度和宽度不同的卷积核。
  • stride:卷积的步长,默认为 1,表示卷积核在输入上滑动的步长。
  • padding:零填充的大小,用于控制输入特征图边界的处理。
  • dilation:卷积核的扩张率,默认为 1。
  • groups:分组卷积的数量。默认为 1,表示标准卷积。当 groups 不等于 1 时,输入通道被分为 groups 份,每份进行卷积操作后再进行拼接。
  • bias:是否包含偏置项,默认为 True。
  • padding_mode:填充模式,默认为 'zeros',表示零填充。

普通卷积(Standard Convolution):

  • 概念: 在普通卷积中,每个卷积核在整个输入上滑动,通过对输入的局部区域进行加权求和来生成输出。

  • 输入层: 三维张量,通常表示为 (输入数据长, 输入数据宽,输入数据的通道数)。

  • 卷积核: 三维张量,通常表示为(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')。

  • 输出层: 三维张量,通常表示为 (输出数据长, 输出数据宽,输出数据的通道数)。

2. 分组卷积(Grouped Convolution):

与普通卷积类似,但 groups 参数用于指定输入通道被分成的组数。

  • 概念: 分组卷积将输入通道划分成若干组,每组进行卷积操作,然后将不同组的输出连接在一起。

  • 输入层: 三维张量,通常表示为 (输入数据长, 输入数据宽,输入数据的通道数)。

  • 卷积核: 三维张量,通常表示为(in_channels, out_channels, kernel_size, stride=1, padding=0, dilation=1, groups=groups, bias=True, padding_mode='zeros')。

  • 输出层: 三维张量,通常表示为 (输出数据长, 输出数据宽,输出数据的通道数)。

3. 深度卷积(Depthwise Convolution):

  • in_channelsout_channels 相等,表示每个输入通道都有一个对应的卷积核。
  • groups 设置为 in_channels,实现深度卷积。
  • 概念: 深度卷积是分组卷积,其中每个输入通道与一个单独的卷积核进行卷积,然后将不同通道的输出连接在一起。

  • 输入层: 三维张量,通常表示为 (输入数据长, 输入数据宽,输入数据的通道数)。

  • 卷积核: 三维张量,通常表示为(in_channels, out_channels=in_channels, kernel_size, stride=1, padding=0, dilation=1, groups=in_channels, bias=True, padding_mode='zeros')。

  • 输出层: 三维张量,通常表示为 (输出数据长, 输出数据宽,输出数据的通道数)。

4. 逐点卷积(Pointwise Convolution):

  • 通常通过设置 kernel_size 为 1 来实现,即 (1, 1)。
  • 可以在深度卷积之后应用逐点卷积。
  • 概念: 逐点卷积使用 1x1 大小的卷积核进行卷积,它可以用来改变通道的数量,进行通道间的线性组合。

  • 输入层: 三维张量,通常表示为 (输入数据长, 输入数据宽,输入数据的通道数)。

  • 卷积核: 三维张量,通常表示为(in_channels, out_channels, kernel_size=(1, 1), stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')。

  • 输出层: 三维张量,通常表示为 (输出数据长, 输出数据宽,输出数据的通道数)。

5. 深度可分离卷积(Depthwise Separable Convolution):

可以先应用深度卷积,然后应用逐点卷积。

  • 概念: 深度可分离卷积首先对每个输入通道进行深度卷积,然后通过逐点卷积将通道间的信息整合起来。

  • import torch.nn as nn

    class DepthwiseSeparableConv2d(nn.Module):
        def __init__(self, in_channels, out_channels, kernel_size, stride=1, padding=0):
            super(DepthwiseSeparableConv2d, self).__init__()

  • 先进行深度卷积操作
            # Depthwise Convolution
            self.depthwise = nn.Conv2d(in_channels, out_channels=in_channels, kernel_size, stride=1, padding=0, dilation=1, groups=in_channels, bias=True, padding_mode='zeros')

  • 再进行逐点卷积操作
            # Pointwise Convolution
            self.pointwise = nn.Conv2d(in_channels, out_channels, kernel_size=(1, 1), stride=1, padding=0, dilation=1, groups=1, bias=True, padding_mode='zeros')

        def forward(self, x):
            x = self.depthwise(x)
            x = self.pointwise(x)
            return x
     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值