网络学习系列(十)shufflenet

shufflenet v1

要解决的问题:

论文追求的也是轻量化的网络,作者发现,无论是xception网络还是resnext网络,虽然性能较高,但耗费了大量的运算资源,作者认为,这主要是由于密集的pointwise convolution造成了运算的瓶颈,即密集的1*1卷积,所以论文要解决的就是如何减少这些密集的1*1的卷积。

亮点:

提出了group pointwise convolution与channel shuffle

网络设计:

1、首先要解决的就是pointwise convolution运算量过大的问题,这里受到分组卷积的启发,使用了一种group pointwise convolution,其实就是将通道进行分组,分别进行卷积,再最终组合起来。假设输入的维度为m*m*n1,要求输出的维度为m*m*n2,则需要的pointwise convolution的参数量为m*m*n1*n2,现在将输入的通道分为两组,则需要的参数量为m*m*(n1)/2*(n2)/2*2,参数量下降一倍,能达到期望的效果。

2、之后要解决的就是通道之间没有信息的交流,即使用了group pointwise convolution之后,每组之间没有信息的交流,这样显然是不可取的,所以这里做了一种channel shuffle,示意图如下:

网络学习系列(十)shufflenet_第1张图片

这里可以从矩阵方面来理解,将矩阵按列向量进行分组,那么如何使得每组之间有交集呢?首先将矩阵转置,再按照列向量进行分组,这样,每一组中都有不同组通道的信息。

3、shufflenet用的是残差网络结构,修改后的示意图如下:

网络学习系列(十)shufflenet_第2张图片

由于DW的步长为2,为了保证特征图尺寸一致,这里使用了步长为2的平均池化,而且最终组合的时候也不是相加,而是通道直接组合。而且需要注意的一点是在DW之后并没有跟非线性激活。

shufflenet v2

 研究问题:

进一步对模型进行精简,使其在移动端也具有良好的运行速度

 亮点

从目的出发找到设计原则,在设计原则的指导下来设计网络

相关信息

1. 网络想要在移动端运行,则需要较低的运算复杂性,其衡量标准为浮点运算操作的数量,即FLOPs,目前大多数的网络都是通过组卷积与深度可分离卷积来降低FLOPs。

2. 经过实验发现,降低了FLOPs,并不意味着网络的速度增加,FLOPs只是衡量速度的间接标准,我们需要找到衡量速度的直接标准。论文中经过实验发现,速度与内存访问成本(MAC)与网络的并行化程度有关。

实验与结论

1. 卷积层的输入输出通道相等时,MAC最小。

使用h与w代表输出特征图的尺寸, 与代表输入与输出的通道数,则卷积层的FLOPs计算如下:,而对于MAC,对于1*1卷积,由于输入与输出特征图尺寸相同,所以有:,由均值不等式,这里可以得到,将B代入可得:

,显然,等通道数相等时才能取得最小值。

2. 过多的组卷积操作会增加MAC,使得速度变慢。

对于1*1卷积来说,g代表组数,当使用了组卷积之后,B变为,MAC变为,此时有:

显然,当B不变时,增大g会增大MAC

3. 模型中的分支数量越少,模型的速度越快

4. element-wise操作对速度影响非常大。

 网络设计


网络学习系列(十)shufflenet_第3张图片

论文做了一个简单的操作,即通道分割,简单起见,假设分为两组,这里满足第三条原则;其中一组不做任何操作,满足第三条原则;一组进行深度可分离卷积,注意,这里保证输入输出通道不变,以满足第一条原则;组合的时候使用通道的组合,而不是相加,满足第四条原则。

与shufflenetv1相比,下采样的操作多了一个1*1的卷积来混合特征。

你可能感兴趣的:(网络学习系列(十)shufflenet)