DW Convolution

  1. 常规卷积,每个输出通道一个过滤器(Filter)

在这里插入图片描述
考虑单输出通道的情况(Filters = 1)
在这里插入图片描述

import torch
import numpy as np

X = torch.randn([16,3,4,4])
conv2 = torch.nn.Conv2d(3,4,kernel_size=3, padding=1, stride=2)
Y = conv2(X)
torch.Size([4, 3, 3, 3])
参数个数:4 × 3 × 3 × 3 = 108
  1. Separable Convolution这类卷积在Transformer的FFN中出现过
    它将卷积分为两步,Depthwise Convolution与Pointwise Convolution。
  • Depthwise Convolution:
    相当于把输入的三通道视为3个单通道进行卷积
    在这里插入图片描述
    参数量:3 × 3 × 3 = 27
但是这种运算对输入层的每个channel独立进行卷积运算后就结束了,
没有有效的利用不同map在相同空间位置上的信息。因此需要增加另外
一步操作来将这些map进行组合生成新的Feature map,即接下来的
Pointwise Convolution
  • Pointwise Convolution
    这个就是普通卷积,只不过卷积核大小一定是1×1×c_in
    在这里插入图片描述参数量:1 × 1 × 3 × 4 = 12
    至此,输出的形状与常规卷积相同,但是总参数量仅为39.
所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成
新的Feature map。有几个Filter就有几个Feature map
class Separable_Convolution(nn.Module):
    def __init__(self,c_in,c_out):
        super(Separable_Convolution, self).__init__()
        # 也相当于分组为1的分组卷积
        self.Depthwise_Convolution = nn.Conv2d(in_channels=c_in,
                                    out_channels=c_in,#这里的输出通道
                                    kernel_size=3,
                                    stride=1,
                                    padding=1,
                                    groups=c_in)#这个是关键,这个值必须能被out_channel整除
        self.Pointwise_Convolution = nn.Conv2d(in_channels=c_in,
                                    out_channels=c_out,
                                    kernel_size=1,
                                    stride=1,
                                    padding=0,
                                    groups=1)
    def forward(self,input):
        out = self.Depthwise_Convolution(input)
        out = self.Pointwise_Convolution(out)
        return out

X = torch.randn([16,2,64,64])
Separa_conv= Separable_Convolution(X.shape[1],4)
Y = Separa_conv(X)
print(Y.shape)
  • 以下参考

  • group参数,默认为1,也就是在通道维上将输入的所有通道视为1组。参数量为k²c1c2, 很好理解,每个输入c1个通道,需要k×k的卷积核映射到输出的一个通道, 输出有c2个通道, 所以需要c1×c2个卷积核
    在这里插入图片描述

  • 当设置为group=2时,相当于把输入按照通道切成两块,每一块进行独立的卷积,参数量为(k²c1c2)/2
    在这里插入图片描述

  • 当设置为group=4时,参数量为(k²c1c2)/4

在这里插入图片描述

  • 当group = out_channel,也就等价于Depthwise Convolution
### 回答1: DWconv是ShuffleNetv2中的深度可分离卷积(Depthwise Separable Convolution),它将标准卷积分解为深度可分离卷积,这种分解技术可以大大减少参数数量和计算量,从而提高网络的效率。 ### 回答2: ShuffleNetv2中的DWconv是指深度可分离卷积(Depthwise Separable Convolution)。深度可分离卷积是一种常用的卷积操作,它由深度卷积和逐点卷积两个步骤组成。 深度卷积先对输入数据的每个输入通道进行独立的卷积操作,输出通道数与输入通道数相同,但每个输出通道只受到对应输入通道的影响。这样的操作在卷积神经网络中减少了计算量,提高了模型的效率,因为卷积操作是计算最昂贵的。 逐点卷积(Pointwise Convolution)是指使用1x1的卷积核对每个通道进行卷积操作。逐点卷积可以用来扩展和压缩特征通道的数量,同时引入非线性变换,使得网络更加具有表达能力。 ShuffleNetv2中的DWconv通过先进行深度可分离卷积和逐点卷积的组合,将网络计算量减至最低,并且保持准确性。通过引入Shuffle操作,实现了在降低模型计算量的同时保持特征的丰富性。 总的来说,ShuffleNetv2中的DWconv是一种结合深度可分离卷积和逐点卷积的卷积操作,用于提高模型的计算效率和准确性。它在卷积神经网络中广泛应用,并且在ShuffleNetv2中发挥了重要的作用。 ### 回答3: ShuffleNetv2中的DWconv表示深度可分离卷积(Depthwise Separable Convolution)。深度可分离卷积是一种卷积操作,可以在减少参数量和计算量的同时保持良好的特征表示能力。 在传统的卷积操作中,输入特征图的每个通道都与卷积核进行卷积操作,生成对应通道的输出特征图。而在深度可分离卷积中,卷积操作被分为两个步骤:深度卷积(Depthwise Convolution)和逐点卷积(Pointwise Convolution)。 深度卷积是指在每个通道上单独进行卷积操作,即使用尺寸为1x1的卷积核对每个通道进行卷积。这样可以减少计算量,因为每个通道操作都只需要一个卷积核。这个步骤将输入的特征图进行分离为一组独立的特征,这也是“深度可分离”这个名称的由来。 逐点卷积是指在进行深度卷积后,使用尺寸为1x1的卷积核对各个通道的输出特征图进行组合。这一步能够帮助网络学习不同通道之间的关联,并生成最终的输出特征图。 深度可分离卷积通过分离卷积操作和逐点卷积操作,大幅减少了参数量和计算量。这对于轻量化的模型如ShuffleNetv2来说尤为重要,因为可以在保持较高准确率和特征表达能力的同时,大幅降低模型的复杂度和运算时间。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值