Paper : ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices
Code : unofficial
摘要
本文继续从group conv操作出发思考如何能进一步减少模型的参数,最终结合pointwise conv 和 shuffle channel的方式使模型尺寸大大减少,使移动端计算力支持网络推导。
网络结构
自从AlexNet将组卷积引入进来后,Xception, ResNeXt和MobileNet相继使用组卷积的方式减少模型参数,并取得了不错的进展。Xception(blog)提出了depthwise separate conv操作,该操作由spatial conv和pointwise conv两部分组成,而ShuffleNet就是在此基础上进行进一步的分析。
作者发现,在ResNeXt(cardinality=32)中,93.4%的加法和乘法是用在pointwise conv上,pointwise conv是为了解决group conv中组与组之间相互独立的问题而引入的,本质上是一个1*1的普通卷积操作,因此pointwise是通道稠密的,参数量较多。解决的方法是使其变成通道稀疏的卷积操作,也就是变成组卷积的形式。这样却无法解决组与组之间的参数相互独立的问题,为此引入通道打乱操作,如图所示
图(a)表示如果在spatial conv和pointwise conv都使用组卷积的话,那么组与组之间不存在权重连接,上一层的feature只与下一层同组的节点相连,我们希望是在稀疏的基础上能够做到如图(b)的连接方式,为此需要将通道打乱成图©所示,这样再使用组卷积形式的pointwise conv才再次达到了组与组之间参数相关的目的。
利用通道重排的优点,提出了ShuffleNet单元。从图2(a)所示的bottleneck出发,我们将第一个1×1层替换为分组逐点卷积,然后进行通道重排操作,形成一个ShuffleNet单元,如图2(b)所示。第二个分组逐点卷积的目的是恢复通道维数以匹配shortcut路径。为了简单起见,我们不在第二个逐点卷积层之后应用额外的通道重排操作,因为它已产生可比较的成绩。批归一化(BN)和非线性的使用与ResNet相似,只是我们没有按照Xception建议的在深度卷积后使用ReLU。对于将stride应用于ShuffleNet的情况,我们只做了两个修改(图2©):
- 在shortcut路径上添加一个3×3的平均池化;
- 用通道级联替换元素相加,这样可以很容易地扩大通道尺寸,而几乎无需额外的计算成本。
整个shuffleNet结构如下
核心观点
- 进一步扩展了group conv的使用方法,将pointwise conv发展为pointwise group conv
- 对通道shuffle方法的引入
- 结合channel shuffle, depthwise group conv和ResNeXt提出了shuffle unit