ShuffleNetv1:An Extremely Efficient Convolutional Neural Network for Mobile Devices
ShuffleNetv1 通过 channel shuffle 解决分组卷积后,特征无法交流的情况
什么是 ShuffleNetv1?
- ResNeXt 提出的分组卷积 (GroupConvolution),可以在降低模型参数量的同时,提升模型的预测效果,但是分组后的特征完全不进行交流,虽然可以通过 1x1 卷积缓解,但是 1x1 卷积需要计算量很大,不是理想的方法
- ShuffleNetv1 通过使用 channel shuffle 操作弥补分组间的信息交流,使得网络可以尽情使用分组卷积
ShuffleNetv1 的网络结构?
- 3 个不同的 Stage 组成网络结构,最后一列显示不同的分组其层的输出通道
ShuffleNetv1 的基础单元 Units?
- 图 a:深度可分离卷积 + 残差连接,这在 MobileNetv2 上被作为基础单元
- 图 b:ShuffleNetv1 的基础单元,经过该单元后,特征图分辨率不变,使用 add 进行特征融合
- 图 c:ShuffleNetv1 的下采样单元,经过该单元后,特征图分辨率减半,使用 concat 进行特征融合
ShuffleNetv1 如何实现通道混淆 (channel shuffle)?
- 假定将输入层分为 g 组,总通道数为 g * n,首先你将通道那个维度拆分为 (g, n) 两个维度,然后将这两个维度转置变成 (n, g),最后重新 reshape 成一个维度 g * n
1 | def channel_shuffle(x, groups): |