轻量化网络:ShuffleNet

《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 》来自face++,发表于CVPR-2017, 其主要采用两个“新”操作对卷积神经网络结构进行修改,达到提高计算效率的目的。

github: https://github.com/farmingyard/ShuffleNet

创新点:
1. 利用pointwise group convolution 和 channel shuffle 这两个操作来设计卷积神经网络模型, 以达到不怎么损失性能的前提下,减少模型使用的参数数量。

(其中,Pointwise group convolution 和channel shuffle是有一定关系的,channel shuffle 因pointwise group convolution 而起,正如3.1标题: . Channel Shuffle for Group Convolutions;
作者说 Xception和ResNeXt采用了大量的1*1卷积核,从而使得网络参数更少,因此这里采用 pointwise group convolution,但采用了pointwise group convolution 会导致信息流通不当,因此提出了channel shuffle,所以channel shuffle是有前提的,使用的话要注意!)

Group convolution
Group convolution 自Alexnet就有,当时因为硬件限制而采用分组卷积;之后在2016年的ResNeXt中,表明采用group convolution可获得高效的网络;再有XceptionMobileNet均采用depthwise convolution, 这些都是最近出来的一系列轻量化网络模型

group convolution 与depthwise convolution 以及 channel-wise convolution 都是一样的,具体可见MobileNet里有分析depth-wise convolution的卷积方式,也可参考另外一篇博客:http://blog.csdn.net/shuzfan/article/details/77129716

如下图(a)所示, 为了提升模型效率,采用group convolution,但会有一个副作用,即:“outputs from a certain channel are only derived from a small fraction of input channels.”
于是采用channel shuffle来改善各组间“信息不流通”问题,如下图(b)所示。
具体方法为:把各组的channel平均分为g(下图g=3)份,然后依次序的重新构成feature map

这里写图片描述

Channel shuffle 的操作非常简单,接下来看看shufflenet,shufflenet借鉴了Resnet的思想,从基本的resnet 的bottleneck unit 逐步演变得到 shufflenet 的bottleneck unit,然后堆叠的使用shufflenet bottleneck unit获得shufflenet;

下图展示了shufflenet unit的演化过程
图(a):是一个带有depthwise convolution的bottleneck unit;
图(b):作者在(a)的基础上进行变化,对1*1 conv 换成 1*1 Gconv,并在第一个1*1 Gconv之后增加一个channel shuffle 操作;
图(c): 在旁路增加了AVG pool,目的是为了减小feature map的分辨率;因为分辨率小了,于是乎最后不采用Add,而是concat,从而“弥补”了分辨率减小而带来的信息损失。
这里写图片描述

文中提到两次,对于小型网络,多多使用通道,会比较好。
“this is critical for small networks, as tiny networks usually have an insufficient number of channels to process the information”
因此,以后若涉及小型网络,可考虑如何提升通道使用效率!

胡思乱想
把shuffleNet和mobilenet的创新点放在一起,想了一想,感觉shufflenet的shuffle操作和mobilenet 在depth-wise convolution之后用一个1*1的卷积的目的是一样的啊!

都是为了抵消depth-wise convolution 带来的“信息流通不畅”的问题,只不过shufflenet采用各通道之间交换信息,mobilenet采用1*1卷积进行“融合”;那么是否就depth-wise convolution带来的问题——“信息流通不畅”继续做文章?? 只要把经过depth-wise convolution之后的通道,“搞”到一起,然后起个名字——“搞”Net

猜你喜欢

转载自blog.csdn.net/u011995719/article/details/78918128