Group Convolution分组卷积,以及Depthwise Convolution和Global Depthwise Convolution

博客:blog.shinelee.me | 博客园 | CSDN网络

写在前面

Group Convolution分组卷积,最先见于AlexNet——2012年Imagenet的冠军方法,Group Convolution被用来切分网络,使其在2个GPU上并行运行,AlexNet网络结构以下:学习

AlexNet

Convolution VS Group Convolution

在介绍Group Convolution前,先回顾下常规卷积是怎么作的,具体能够参见博文《卷积神经网络之卷积计算、做用与思想》。若是输入feature map尺寸为\(C*H*W\),卷积核有\(N\)个,输出feature map与卷积核的数量相同也是\(N\),每一个卷积核的尺寸为\(C*K*K\)\(N\)个卷积核的总参数量为\(N*C*K*K\),输入map与输出map的链接方式以下图左所示,图片来自连接spa

Convolution VS Group Convolution

Group Convolution顾名思义,则是对输入feature map进行分组,而后每组分别卷积。假设输入feature map的尺寸仍为\(C*H*W\),输出feature map的数量为\(N\)个,若是设定要分红\(G\)个groups,则每组的输入feature map数量为\(\frac{C}{G}\),每组的输出feature map数量为\(\frac{N}{G}\),每一个卷积核的尺寸为\(\frac{C}{G} * K * K\),卷积核的总数仍为\(N\)个,每组的卷积核数量为\(\frac{N}{G}\),卷积核只与其同组的输入map进行卷积,卷积核的总参数量为\(N * \frac{C}{G} *K*K\),可见,总参数量减小为原来的 \(\frac{1}{G}\),其链接方式如上图右所示,group1输出map数为2,有2个卷积核,每一个卷积核的channel数为4,与group1的输入map的channel数相同,卷积核只与同组的输入map卷积,而不与其余组的输入map卷积。.net

Group Convolution的用途

  1. 减小参数量,分红\(G\)组,则该层的参数量减小为原来的\(\frac{1}{G}\)
  2. Group Convolution能够当作是structured sparse,每一个卷积核的尺寸由\(C*K*K\)变为\(\frac{C}{G}*K*K\),能够将其他\((C- \frac{C}{G})*K*K\)的参数视为0,有时甚至能够在减小参数量的同时得到更好的效果(至关于正则)。
  3. 当分组数量等于输入map数量,输出map数量也等于输入map数量,即\(G=N=C\)\(N\)个卷积核每一个尺寸为\(1*K*K\)时,Group Convolution就成了Depthwise Convolution,参见MobileNetXception等,参数量进一步缩减,以下图所示
    Depthwise Separable Convolution
  4. 更进一步,若是分组数\(G=N=C\),同时卷积核的尺寸与输入map的尺寸相同,即\(K=H=W\),则输出map为\(C*1*1\)即长度为\(C\)的向量,此时称之为Global Depthwise Convolution(GDC),见MobileFaceNet,能够当作是全局加权池化,与 Global Average Pooling(GAP) 的不一样之处在于,GDC 给每一个位置赋予了可学习的权重(对于已对齐的图像这颇有效,好比人脸,中心位置和边界位置的权重天然应该不一样),而GAP每一个位置的权重相同,全局取个平均,以下图所示:

global average pooling

以上。3d

参考

相关文章
相关标签/搜索