分组卷积(Group Converlution)

0、前言

首先看普通卷积,用pytorch定义为:

nn.Conv2d(in_channels=3,
          out_channels=4,
          kernel_size=3)

分组卷积(Group Converlution)
它可以抽象表示为,堆叠体就是一个卷积核,和上图是对应的:
分组卷积(Group Converlution)

1、组卷积

分组卷积鼎鼎大名,不多介绍了,首先从下图来看下普通卷积和分组卷积的区别(左图是普通卷积,右图是分组卷积)

无论哪一种卷积,输入特征图都是12通道,输入通道图都是6通道,只不过中间运算过程不一样。

图中画的小堆叠块每一个就是一个卷积核,比如普通卷积,输入是12通道,那么一个卷积核的尺寸就是 (12,k_size,k_size),这样一个卷积核和输入做运算得到一个特征图。我们要的是6输出通道,所以总共有6个这样的卷积核,总尺寸就是 (6,12,k_size,k_size)

分组卷积(Group Converlution)
实际上无论普通卷积还是分组卷积,卷积核的数量是没有变的,只不过分组卷积的卷积核的尺寸变小了。

可以认为分组卷积就是把普通卷积的每个卷积核砍掉了,砍成小卷积核了。

比如深度可分离卷积中的depthwise卷积,就是组数=输入通道=输出通道的分组卷积,把本来 (3,3,3)的卷积核砍成 (1,3,3),也即是把每个3通道的卷积核砍成1通道的卷积核,但是卷积核的数量还是3个。

分组卷积(Group Converlution)

; 2、Pytorch的实现

pytorch中conv2的提供了group参数,需要注意的是,从上上图可以看出,分组卷积是将输入特征图和输出特征图都分成了n组,也就是输出通道数和输入通道数都要能被分为n组,否则就要报错。

对于上上图的分组我们使用pytorch实现:

nn.Conv2d(in_channels=12,
          out_channels=6,
          kernel_size=3,
          groups=3)

对于上图(depthwise卷积),我们使用pytorch实现:

nn.Conv2d(in_channels=3,
          out_channels=3,
          kernel_size=3,
          groups=3)

实际上depthwise卷积就是分组数=输入通道数=输出通道数的特殊分组卷积

参考

分组卷积 Group Converlution
Depthwise卷积与Pointwise卷积

Original: https://blog.csdn.net/qq_40243750/article/details/125958963
Author: 我是一个对称矩阵
Title: 分组卷积(Group Converlution)

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/689894/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球