torch里的分组卷积

普通卷积

如果输入特征的通道是 32,希望输出特征的通道是 64,对于 3*3 的普通卷积来说,卷积层设置为:

conv = torch.nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3)

我们查看卷积核的参数量

print(conv.weight.shape) # torch.size([64,32,3,3])

所以普通卷积的参数量是 64 × \times × 32 × \times × 3 × \times × 3 = 18432 个参数

分组卷积

同样输入特征的通道是 32,希望输出特征的通道是 64,如果使用分组卷积,卷积层设置为:

conv = torch.nn.Conv2d(in_channels=32, out_channels=64, kernel_size=3, groups=8)

我们查看卷积核的参数量

print(conv.weight.shape) # torch.size([64,4,3,3]) 这里 4 表示 in_channels/groups = 4

所以分组卷积的参数量是 64 × \times × 4 × \times × 3 × \times × 3 = 2304 个参数, 同样的输出通道,参数减小了8倍

为了达到同样的输出效果,分组卷积的做法是:

  • 把32个输入通道分为8组,每组4个通道
  • 把64 × \times × 4 × \times × 3 × \times × 3卷积核分为8组,每组参数量是 8 × \times × 4 × \times × 3 × \times × 3
  • 这样8组输入和8组卷积核一一对应做普通卷积,就可以得到8组输出通道为8的输出特征,将8组输出结果拼接在一起,就可以得到64个通道的输出结果

猜你喜欢

转载自blog.csdn.net/baoxin1100/article/details/114662157
今日推荐