之前介绍了 MobileNets,MobileNets 主要通过 Depthwise Convolution 和 Pointwise Convolution 替代传统卷积操作提高模型效率,使模型更容易用在移动端。本文介绍旷视科技提出的 ShuffleNet,ShuffleNet 对分组卷积进行 Channel Shuffle 操作,融合各个分组的特征,在降低计算量的同时保持了模型的精度。
1.MobileNets 和分组卷积的问题
之前的文章《高效的 CNN 模型 MobileNets》介绍了 MobileNets 模型,MobileNets 主要采用了分组卷积代替传统的卷积操作,将 feature map 的 channel 分为 G 组,然后对各组分别卷积,如下图所示,GConv 表示分组卷积,Conv 表示传统卷积。
分组卷积虽然可以减少计算量,但是也带来了另外一个问题,即 feature map 不同组之间的特征无法进行通信,等于把 feature map 分组传到了完全不相关的管道中,降低模型提取特征的能力。MobileNets 为了解决这一问题,在分组卷积后加入了 Pointwise Convolution,即使用 1×1 的卷积核融合各个分组的特征。
下表反映了 MobileNets 各组件的计算量和参数量,可以看到密集的 1×1 卷积操作占了 MobileNets 94% 的计算量。
2.ShuffleNet
ShuffleNet 是旷视科技在 2017 年提出的模型,论文《ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices》。ShuffleNet 和 MobileNets 都采用了分组卷积的思想降低计算量,但是和 MobileNets 不同,ShuffleNet 通过 Channel Shuffle 操作打乱分组,从而获得其他分组的信息。
2.1 Channel Shuffle
上图 b、c 展示了 Channel Shuffle 的过程,将分组均匀打乱使新的分组包含其他分组的信息。这一过程很容易通过代码实现,假设原来包含 G 个分组,每个分组 N 个 channel,则先把 channel 的维度转为 2 维 (G, N),然后转置 (N, G),最后 reshape 回 1 维即可。过程如下图所示。
2.2 ShuffleNet 基本单元
上图 a 是一个轻量级的残差单元,里面包含一个 3×3 的 DWConv (Depthwise Convolution),DWConv 是一种特殊的分组卷积,其分组数量等于 channel 数量。另外还包括两个密集的 1×1 卷积。
ShuffleNet 对图 a 进行了改进,用 1×1 的分组卷积代替 1×1 卷积,并加上一个 Channel Shuffle 操作混合各分组特征,如图 b 所示。
对于要使用 stride 的情况,ShuffleNet 也对结构进行了少量修改,如图 c 所示。在原始输入上进行 stride=2 的 Avg Pool 操作,并设置 DWConv 的 stride=2,使两部分尺寸一致。
2.3 ShuffleNet 网络结构
上表展示了不同配置下 ShuffleNet 的复杂度,复杂度用 FLOPs (浮点运算数量) 衡量。ShuffleNet 首先使用 3×3 的卷积和 MaxPool 处理输入图像 (Conv1, MaxPool),然后传入三个 ShuffleNet 基本单元 (Stage2、Stage3、Stage4),最后使用 GlobalPool 和全连接层进行分类。
3.实验效果
作者改变 ShuffleNet 的 channel 数量,统计不同 channel 数量及 Channel Shuffle 操作对分类错误率的影响,结果如下表所示,其中 ShuffleNet 0.5x 指把 channel 数量设置为原来的一半。
作者也对比了 ShuffleNet 和 MobileNets 的效果,如下表所示,可以看到在相近的计算量下,ShuffleNet 的效果要比 MobilieNets 好很多。
4.参考文献
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
本文暂时没有评论,来添加一个吧(●'◡'●)