一看名字,就知道是对ShuffleNet V1的优化改进。
1 ShuffleNet V2设计思想
问题:间接指标(FLOPs)和直接指标(推理速度)并不是完全城正比的。
导致上面问题,有以下原因:
- 内存访问成本(MAC);
- 模型计算的并行度。
- 张量分解(这个忧伤的故事,居然和CuDnn的优化有关)
基于以上原因,作者提出了两个网络设计原则:
- 用直接指标(例如速度)替换间接指标(例如 FLOPs);
- 直接指标在目标硬件平台上进行评估。
高效网络设计的4个原则:
G1. 相同的通道宽度可最小化内存访问成本(MAC);
G2. 过度的组卷积会增加 MAC;
G3. 网络碎片化(例如 GoogLeNet 的多路径结构)会降低并行度;
G4. 元素级运算(张量加法、ReLU 等)不可忽视。
高效架构应具备:
- 使用「平衡」的卷积(相同的通道宽度);
- 考虑使用组卷积的成本;
- 降低碎片化程度;
- 减少元素级(张量加法、ReLU 等)运算。
2 基本架构

(a) ShuffleNet 基本单元;
(b) 用于空间下采样 (2×) 的 ShuffleNet 单元;
(c) ShuffleNet V2 的基本单元;
(d) 用于空间下采样 (2×) 的 ShuffleNet V2 单元。DWConv:深度卷积 (depthwise convolution)。GConv:组卷积 (group convolution)。

3 代码
代码分析看ShuffleNet V2的tensorflow实现-源码分析
4 分析
对四个高效架构设计原则进行分析。
Guideline 1:输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,MAC)。
假设输入通道为,输出通道为
,输出特征图的尺寸为
,因此每个
卷积的FLOPs为
。内存访问成本为
,于是有:
证明:
由上式可知,当时,
最小。
这里使用了如下不等式:
这是因为。
Guideline 2: 分组卷积中使用过多的分组数会增加内存访问成本(MAC)。
分组卷积的FLOPs为:,这里的
表示分组数。于是有
对于变量,这里很难说
也是固定的,因为
。
Guideline 3:网络结构太复杂(分支和基本单元过多)会降低网络的并行程度。
探索网络的分支数以及每个基本结构包含的卷积层个数对网络速度的影响。


Guideline 4:Element-wise 的操作消耗也不可忽略(包括ReLU,Tensor的相加,偏置的相加等等操作)。

5 总结
本文先介绍了ShuffleNet V2的设计思想,然后分析设计高效网络结构的4项基本原则,并详细分析了四项原则,指导我们今后的高效网络架构设计。
网友评论