CNN卷积和通道

CNN卷积和通道?

1. CNN基本结构

  • 全连接, 局部连接

  • 权值共享

2. 卷积和通道的区别是什么

参考资料:

https://www.cnblogs.com/shine-lee/p/10243114.html

https://blog.yani.ai/filter-group-tutorial/

https://blog.csdn.net/zhangjunhit/article/details/90762578

2.1 分组卷积(Group Convolution)

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

动机:用分组卷积的操作,来缓解对单个处理器的压力。例如,当前一些轻量级的SOTA(State Of The Art)网络。

2.2 Convolution VS Group Convolution

如果输入feature map尺寸为CHW,卷积核有N个,输出feature map与卷积核的数量相同也是N,每个卷积核的尺寸为CKKN个卷积核的总参数量为NCKK,输入map与输出map的连接方式如下图左所示:

对输入feature map进行分组,然后每组分别卷积。假设输入feature map的尺寸仍为CHW,输出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卷积。

2.3 Group Convolution的用途

  1. 减少参数量,分成G组,则该层的参数量减少为原来的 \(\frac{1}{G}\)

  2. Group Convolution可以看成是structured sparse,每个卷积核的尺寸由CKK变为\(\frac{C}{G}∗K∗K\),可以将其余\((C-\frac{C}{G})∗K∗K\)的参数视为0,有时甚至可以在减少参数量的同时获得更好的效果(相当于正则)。

  3. 当分组数量等于输入map数量,输出map数量也等于输入map数量,即G=N=CN个卷积核每个尺寸为1∗KK时,Group Convolution就成了Depthwise Convolution,参见MobileNetXception等,参数量进一步缩减,如下图所示:

  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(全局平均池化,GAP):当G=C=N且K=H=W.

    NIN(Network In Network)论文中提出的全局平均池化,主要是为了区别全连接层。CNN分类的全连接层的作用:将最后一层卷积得到的feature map stretch成向量,对这个向量做乘法,最终降低其维度,然后输入到softmax层中得到对应的每个类别的得分。

    全连接存在的问题:参数量过大,降低了训练的速度,且很容易过拟合。全连接层将卷积层展开成向量之后不还是要针对每个feature map进行分类,而GAP的思路就是将上述两个过程合二为一,一起做了。如图所示:

    论文:Network In Network

    论文下载:https://arxiv.org/abs/1312.4400

    论文解读:https://www.cnblogs.com/makefile/p/nin.html

2.4 Depthwise Convolution && Pointwise Convolution && Depthwise Separable Convolution

  • 普通卷积:假设输入层为一个大小为64×64像素、三通道彩色图片。经过一个包含4个Filter的卷积层,最终输出4个Feature Map,且尺寸与输入层相同。整个过程可以用下图来概括。

    此时,卷积层共4个Filter,每个Filter包含了3个Kernel,每个Kernel的大小为3×3。因此卷积层的参数数量可以用如下公式来计算:N_std = 4 × 3 × 3 × 3 = 108

  • Depthwise Convolution:同样是上述例子,一个大小为64×64像素、三通道彩色图片首先经过第一次卷积运算,不同之处在于此次的卷积完全是在二维平面内进行,且Filter的数量与上一层的Depth相同。所以一个三通道的图像经过运算后生成了3个Feature map,如下图所示。

    其中一个Filter只包含一个大小为3×3的Kernel,卷积部分的参数个数计算如下:

    N_depthwise = 3 × 3 × 3 = 27

    Depthwise Convolution完成后的Feature map数量与输入层的depth相同,但是这种运算对输入层的每个channel独立进行卷积运算后就结束了,没有有效的利用不同map在相同空间位置上的信息。因此需要增加另外一步操作来将这些map进行组合生成新的Feature map,即接下来的Pointwise Convolution。

  • Pointwise Convolution:Pointwise Convolution的运算与常规卷积运算非常相似,不同之处在于卷积核的尺寸为 1×1×M,M为上一层的depth。所以这里的卷积运算会将上一步的map在深度方向上进行加权组合,生成新的Feature map。有几个Filter就有几个Feature map。如下图所示。

    由于采用的是1×1卷积的方式,此步中卷积涉及到的参数个数可以计算为:

    N_pointwise = 1 × 1 × 3 × 4 = 12

    经过Pointwise Convolution之后,同样输出了4张Feature map,与常规卷积的输出维度相同。

  • Depthwise Separable Convolution:核心思想是将一个完整的卷积运算分解为两步进行,分别为Depthwise Convolution与Pointwise Convolution。参数个数可以计算为:

    N_separable = N_depthwise + N_pointwise = 39

    相同的输入,同样是得到4张Feature map,Separable Convolution的参数个数是常规卷积的约1/3。因此,在参数量相同的前提下,采用Separable Convolution的神经网络层数可以做的更深。

2.5 Group Convolution 和 Depthwise + Pointwise区别

Group conv是一种channel分组的方式,Depthwise +Pointwise是卷积的方式,只是ShuffleNet里面把两者应用起来了。因此Group conv和Depthwise +Pointwise并不能划等号。

Depthwise +Pointwise卷积是提供一种把feature map的空间信息(height&width)和通道信息(channel)拆分分别处理的方法,而group卷积只是单纯的通道分组处理,降低复杂度。

3. CNN总结

  1. CNN模型的发展趋势:从巨型网络到轻量化网络。现在工业界追求的重点已经不是准确率的提升(因为都已经很高了),都聚焦于速度与准确率的trade off,都希望模型又快又准。因此从原来AlexNet、VGGnet,到体积小一点的Inception、Resnet系列,到目前能移植到移动端的MobileNet、ShuffleNet(体积能降低到0.5mb!)。

  2. 卷积核:

    1. 大卷积核用多个小卷积核代替;
    2. 单一尺寸卷积核用多尺寸卷积核代替;
    3. 固定形状卷积核趋于使用可变形卷积核;
    4. 使用1×1卷积核(bottleneck结构)。
  3. 卷积层连接:

    1. 使用skip connection,让模型更深;
    2. densely connection,使每一层都融合上其它层的特征输出(DenseNet)
  4. 卷积层通道:

    1. 标准卷积用depthwise卷积代替;
    2. 使用分组卷积;
    3. 分组卷积前使用channel shuffle;
    4. 通道加权计算。
  5. 启发

    类比到通道加权操作,卷积层跨层连接能否也进行加权处理?bottleneck + Group conv + channel shuffle + depthwise的结合会不会成为以后降低参数量的标准配置?

posted @ 2021-04-22 19:06  MissHsu  阅读(574)  评论(0编辑  收藏  举报