【轻量型卷积网络】ShuffleNet 网络解析-灵析社区

清晨我上码

1. 介绍

论文地址:ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices


ShuffleNet是Face++(旷视)的一篇关于降低深度网络计算量的论文,号称是可以在移动设备上运行的深度网络。它主要采用channel shuffle、pointwise group convolutions 和 depthwise separable convolution来修改原来的ResNet单元。


ShuffleNet可以和MobileNet、Xception和ResNeXt 结合来看,因为有类似的思想。


卷积的group操作从AlexNet就已经有了,当时主要是解决模型在双GPU上的训练。ResNeXt借鉴了这种group操作改进了原本的ResNet。

MobileNet则是采用了depthwise separable convolution代替传统的卷积操作,在几乎不影响准确率的前提下大大降低计算量。

Xception和MobileNet类似,也是主要采用depthwise separable convolution 来 改进Inception v3的结构。

上述内容解读,可以参考:

ResNeXt:ResNeXt 详细解析

MobileNet:


MobileNet V1

MobileNet V2

MobileNet V3

Xception:Xception 详细解析


2. ShuffleNet 模型

ShuffleNet 主要采用channel shuffle、pointwise group convolutions 和 depthwise separable convolution来修改原来的ResNet单元,接下来依次讲解。


2.1 channel shuffle

其思想如上图 Figure 1。


先从group操作说起,一般卷积操作中比如输入feature map的数量是N,该卷积层的filter数量是M,那么M个filter中的每一个filter都要和N个feature map的某个区域做卷积,然后相加作为一个卷积的结果。


假设你引入group操作,设group为 g,那么N个输入feature map就被分成g个group,M个filter就被分成g个group,然后在做卷积操作的时候,第一个group的M/g个filter中的每一个都和第一个group的N/g个输入feature map做卷积得到结果,第二个group同理,直到最后一个group,如上图(a)。

不同的颜色代表不同的group,图中有三个group。这种操作可以大大减少计算量,因为你每个filter不再是和输入的全部feature map做卷积,而是和一个group的feature map做卷积。但是如果多个group操作叠加在一起,如Figure1(a)的两个卷积层都有 group 操作,显然就会产生边界效应。

什么意思呢?就是某个输出channel仅仅来自输入channel的一小部分。这样肯定是不行的,学出来的特征会非常局限。

于是就有了channel shuffle来解决这个问题,先看Figure1(b),在进行GConv2之前,对其输入feature map做一个分配,也就是每个group分成几个subgroup,然后将不同group的subgroup作为GConv2的一个group的输入,使得GConv2的每一个group都能卷积输入的所有group的feature map,这和Figure1(c)的channel shuffle的思想是一样的。


2.2 pointwise group convolutions


pointwise group convolutions 其实就是带group的卷积核为11的卷积,也就是说 pointwise convolution是卷积核为11的卷积。


在ResNeXt中主要是对33的卷积做group操作,但是在ShuffleNet中,作者是对11的卷积做group的操作,因为作者认为1*1的卷积操作的计算量不可忽视。

可以看Figure2(b)中的第一个11卷积是GConv,表示group convolution。Figure2(a)是ResNet中的bottleneck unit,不过将原来的33 Conv改成3*3 DWConv,作者的ShuffleNet主要也是在这基础上做改动。

首先用带group的11卷积代替原来的11卷积,同时跟一个channel shuffle操作,这个前面也介绍过了。

然后是3*3 DWConv 表示depthwise separable convolution。其实就是将传统的卷积操作分成两步,假设原来是3 * 3的卷积,那么 depthwise separable convolution就是先用M个3 * 3卷积核一对一卷积输入的M个feature map,不求和,生成M个结果,然后用N个1 * 1的卷积核正常卷积前面生成的M个结果,求和,最后得到N个结果。

Figure2(c)添加了一个Average pooling和设置了stride=2,另外原来Resnet最后是一个Add操作,也就是元素值相加,而在(c)中是采用concat的操作,也就是按channel合并,类似googleNet的Inception操作。


2.3 depthwise separable convolution

可以参考:MobileNet v1 中的解析。


2.4 结构 & 实验结果



3. 总结

ShuffleNet的核心就是用 pointwise group convolution,channel shuffle和depthwise separable convolution 来改进 ResNet block的相应层进而构成了ShuffleNet uint,达到了减少计算量和提高准确率的目的。


其中最核心的是 channel shuffle解决了多个group convolution叠加出现的边界效应,

而pointwise group convolution和depthwise separable convolution主要减少了计算量。

————————————————


阅读量:1861

点赞量:0

收藏量:0