理解分组卷积

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:卷积核的大小,类型为int 或者元组,当卷积是方形的时候,只需要一个整数边长即可,卷积不是方形,要输入一个元组表示 高和宽。【必选】

  • stride:卷积每次滑动的步长为多少,默认是 1 【可选】

  • padding:设置在所有边界增加 值为 0 的边距的大小(也就是在feature map 外围增加几圈 0 ),例如当 padding =1 的时候,如果原来大小为 3 × 3 ,那么之后的大小为 5 × 5 。即在外围加了一圈 0 。【可选】

  • dilation:控制卷积核之间的间距【可选】

  • groups:控制输入和输出之间的连接【可选】

  • bias:是否将一个 学习到的 bias 增加输出中,默认是 True 。【可选】

  • padding_mode :字符串类型,接收的字符串只有 “zeros” 和 “circular”。【可选】

groups:分组卷积

比如 groups 为1,那么所有的输入都会连接到所有输出

当 groups 为 2的时候,相当于将输入分为两组,并排放置两层,每层看到一半的输入通道并产生一半的输出通道,并且两者都是串联在一起的。这也是参数字面的意思:“组” 的含义。

需要注意的是,in_channels 和 out_channels 必须都可以整除 groups,否则会报错

Convolution 层的参数中有一个group参数,其意思是将对应的输入通道与输出通道数进行分组, 默认值为1, 默认输出输入的所有通道各为一组。比如输入数据大小为90x100x100x32,通道数32,要经过一个3x3x48的卷积,group默认是1,就是全连接的卷积层。

如果group是2,那么对应要将输入的32个通道分成2个16的通道,将输出的48个通道分成2个24的通道。对输出的2个24的通道,第一个24通道与输入的第一个16通道进行全卷积,第二个24通道与输入的第二个16通道进行全卷积。

极端情况下,输入输出通道数相同,比如为24,group大小也为24,那么每个输出卷积核,只与输入的对应的通道进行卷积。

图片

分组卷积对输入通道数的影响

1.当设置group=1时:

conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=1)conv.weight.data.size()

返回:

torch.Size([6, 6, 1, 1])

另一个例子:​​​​​​​

conv = nn.Conv2d(in_channels=6, out_channels=3, kernel_size=1, groups=1)conv.weight.data.size()

返回:

torch.Size([3, 6, 1, 1])

可见第一个值为out_channels的大小,第二个值为in_channels的大小,后面两个值为kernel_size

2.当设置为group=2时​​​​​​​

conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=2)conv.weight.data.size()

返回:

torch.Size([6, 3, 1, 1])

3.当设置group=3时​​​​​​​

conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=3)conv.weight.data.size()

返回:

torch.Size([6, 2, 1, 1])

4.当设置group=4时

conv = nn.Conv2d(in_channels=6, out_channels=6, kernel_size=1, groups=4)
conv.weight.data.size()

报错:

ValueError: in_channels must be divisible by groups

groups的值必须能整除in_channels,同样也要求groups的值必须能整除out_channels

总结:其实就是将输入通道数变为 输入通道数/groups,输出通道数不变,总共计算groups次

示意图

不分组:

图片

分两组:

图片

分四组:

图片

最后:

如果你想要进一步了解更多的相关知识,可以关注下面公众号联系~会不定期发布相关设计内容包括但不限于如下内容:信号处理、通信仿真、算法设计、matlab appdesigner,gui设计、simulink仿真......希望能帮到你!

5a8015ddde1e41418a38e958eb12ecbd.png

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MatpyMaster

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值