系列文章目录
=======================================================
专题-端侧机器学习
第一节 端侧机器学习框架Tensorlfow Lite
第二节 轻量级网络模型之MobileNet系列
第三节 轻量级网络模型之ShuffleNet
第四节 轻量级网络模型之EfficientNe
第五节 Android应用APP: 基于MobileNet和EfficientNet的图像分类模型
=======================================================
轻量级网络模型之ShuffleNet
参见文章: ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile
Devices
文章要点
- 作者提出了一个针对移动设备的高效卷积模型ShuffleNet
- 作者基于pointwise group convolution 和 channel shuffle 提出了一个高效的卷积网络building block: Shuffle Unit.
模型结构
模型配置如下表所示:
可以看到除了开始的Conv 1 + MaxPool
以及结尾的GlobalPool
和FC
,中间的网络共分为三个阶段: Stage 2, Stage 3, Stage 4
, 每个Stage
由3个ShuffleNet Unit
构成, ShuffleNet Unit 有两种配置:一种时stride为1,另一种是stride=2, 两种结构的示意图如下:
(左边为stride=1, 右边为stride=2),下面对ShufflesNet Unit的设计原理作以深入的分析。
ShuffleNet Unit
设计原理
在面向移动设备的网络模型设计中, 为了满足模型的复杂性约束, #chanels不能太大 (#channels越大,越有助于提升模型的Accuracy), 而pointwise convolution本身是一个代价高昂的操作, 这进一步限制了所能使用的**#channels** 。为了解决这个问题,一个直接的想法就是采用分组卷积group convolution, 然而group convolution存在的问题是: 当多个group convolution进行Stack时, 最终的输出中,每个channel仅与输入中的某个组的chanel有关,这阻碍了group间channel的信息流动,从而限制了网络的表达能力
。为此,作者又引入了channel shuffle, 即在group convolution间插入 channel convolution, 从而克服了这个问题。
ShuffleNet Unit 中的核心概念就是 group convolution
和 channel shuffle
。 如下图所示,(b)是在(a)的 stacked group convolution基础上插入channel shuffle后的示意图,(c)是(b)的等价实现: 假设第一层 convolution的输出尺寸为(g,n), g为组数,n为每组的channel数量, 只需要对其进行reshape然后再按行flatten即可。
ShuffleNet unit结构
ShuffleNet unit 采用了ResNet中的bottleneck 结构(下图最左边), 并对其做了以下几点修改:
(1)将1x1 conv替换为1x1 group conv.;
(2) 将bottleneck的3x3常规conv.替换为3x3 depthwise conv.;
(3)在depthwise conv.之前加入了channel shuffle操作。.
特别注意:
(1)受XCeption的启发,在ShuffleNet unit 的depthwise conv.操作后去掉了非线性映射nonlinearity
stride=2的ShuffleNet unit相对于stride=1的ShuffleNet unit的区别在于:
(1)Shortcut path 中 采用了 3x3 的AVG pool (stride=2), 目的是为了与residual path输出的feature map的spatial 尺寸进行匹配;
(2)将两个path的聚合方式由逐像素的Add 操作替换为channel方向的Concentation操作, 原文中解释这种方式能够极大提升#channels.
References
1.ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices