模型压缩(3) - ShuffleNet
ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices
论文地址:Arxiv Paper
GitHub: Tensorflow, Caffe
主要是在Xception的基础上进一步改进
Motivation:
-
Xception / ResNeXt 这种优化结构对于extremely small network的计算性能欠佳
因为conv1x1耗时过长(在MobileNet中已验证)
受AlexNet的启发,提出了group convolution,提高conv1x1的计算性能
-
Group convolution 的引入有局限性
提出了channel shuffle增加了feature channel之间信息的流动性
ShuffleNet units
-
图(a) ,带有depthwise conv的bottleneck module
由三个部分组成:
point wise 1x1 conv + Xception中的depthwise 3x3 conv + point wise 1x1 conv
前面两个op组合构成了Xception,最后一个为了shortcut的channel匹配
-
图(b),引入Group conv
1). 考虑conv1x1耗时较长(在MobileNet中已验证),因此受Alexnet启发,对conv1x1进行分组计算,
将第一个point wise conv1x1 替换为 1x1 group conv
2). 用Group conv使得不同Group 的结果中信息隔离,因此增加channel shuffle层,交换信息
3). 接一个Xception 中的depthwise conv3x3
4). 与1)相同,将point wise conv1x1替换为1x1 group conv,提高computation performance
-
图(c),stride = 2的ShuffleNet
1). shortcut上增加了avg_pooling
2). 用concat替换element wise add
Channel shuffle原理
Reference