深度学习的二维卷积的类型关系的个人理解。

看了好久卷积。总结一下首先我认为所有的卷积都可以认为是分组卷积。

分组卷积的子类有两种:标准卷积(g=1),深度卷积(C=Cout的前提下,g=C=Cout)

逐点卷积又作为一种标准卷积的子类(卷积核大小为1*1且不分组的情况)。

 

设输入特征图深度为C*H*W,其分组数目为g

分局卷积是将原来深度和输入特征的深度一致的卷积核深度变化为C/g,不再是原来的C了。

原来需要得到输出深度Cout,我们便需要Cout个卷积核进行卷积。

为了得到和原来输出特征图同样大小的输出特征图,我们便需要设置每一组卷积核的数量为Cout/g。

计算其参数量,为了得到同样大小的输出特征图中(设每个卷积核的平面大小为(h*w)),则

分组为g的分组卷积的参数量为:h*w*(C/g)*(Cout/g)*g = h*w*C*Cout*(1/g)

而标准卷积的参数量为:h*w*C*Cout

相比较来说,分组卷积减少为原来参数数量的1/g倍。

下面贴出深度卷积核逐点卷积的文章地址:理解分组卷积和深度可分离卷积如何降低参数量 - 知乎 (zhihu.com)

从其中结论可以看出:

1.深度卷积的参数减少为原来的1/C(也可以看做1/Cout)倍。 也就是说输出特征深度等于输入特征深度且分组数目等于输入特征深度时(g=C=Cout)的分组卷积就是深度卷积了。从另一方面想,在输入和输出特征深度一致的情况下,将标准卷积核的深度按单位1深度进行分组,就是深度卷积。深度卷积的每个卷积核只对对应的唯一一层特征进行学习,不会受到其它深度的特征值的影响。

参数数量:h*w*(C/g)*(C/g)*g = h*w*C,  

2.逐点卷积的参数减少为原来的1/(h*w*h*w)倍。逐点卷积的卷积核深度同标准卷积核一样,但是卷积核的平面大小从原来的h*w变换为1*1了,卷积核的平面大小缩小了,但是深度不变。因此,其参数数量是标准卷积的1/(h*w)倍。

参数数量:h*w*C*Cout/(h*w)=C*Cout  

3.文章中还解释了深度可分离卷积就是将深度卷积和逐点卷积结合的卷积。我认为其不能作为单独一类卷积,只是将两种卷积都用到的一种方法。从方法理解上,就是在输入特征深度和输出特征深度相同且将卷积核分为输入特征深度(g=C=Cout)的前提下,将卷积核的平面大小从h*w变换为1*1大小的卷积核。换句话说,就是将逐点卷积分为g=C=Cout组,进行卷积。

其中深度卷积负责滤波,作用在输入的每个通道上;逐点卷积负责转换通道,作用在深度卷积的输出特征映射上。

具体可以参考这篇博客:各种卷积层的理解(深度可分离卷积、分组卷积、扩张卷积、反卷积)_gwpscut的博客-CSDN博客_深度可分离卷积

为了通过深度可分离卷积得到同样大小需求的的输出特征图,可以将深度卷积和逐点卷积的特征图综合考虑,深度卷积的结果用于确定哪些通道可以保留,逐点卷积用于确定哪些点可以保留。

逐点卷积是标准卷积的参数量的1/(h*w)倍,而深度卷积的参数量是标准卷积的1/C倍。

因此若将两种卷积都用到,其参数数量为:h*w*(C/g)*(C/g)*g +h*w*C*Cout/(h*w) = C*Cout + h*w*C 。 

posted @ 2021-10-06 19:56  Anm半夏  阅读(138)  评论(0编辑  收藏  举报