美文网首页
2.5 ShuffleNet V2思考

2.5 ShuffleNet V2思考

作者: 深度学习模型优化 | 来源:发表于2019-04-26 10:24 被阅读0次

一看名字,就知道是对ShuffleNet V1的优化改进。

1 ShuffleNet V2设计思想

问题:间接指标(FLOPs)和直接指标(推理速度)并不是完全城正比的。
导致上面问题,有以下原因:

  • 内存访问成本(MAC);
  • 模型计算的并行度。
  • 张量分解(这个忧伤的故事,居然和CuDnn的优化有关)

基于以上原因,作者提出了两个网络设计原则:

  • 用直接指标(例如速度)替换间接指标(例如 FLOPs);
  • 直接指标在目标硬件平台上进行评估。

高效网络设计的4个原则:
G1. 相同的通道宽度可最小化内存访问成本(MAC);
G2. 过度的组卷积会增加 MAC;
G3. 网络碎片化(例如 GoogLeNet 的多路径结构)会降低并行度;
G4. 元素级运算(张量加法、ReLU 等)不可忽视。

高效架构应具备:

  1. 使用「平衡」的卷积(相同的通道宽度);
  2. 考虑使用组卷积的成本;
  3. 降低碎片化程度;
  4. 减少元素级(张量加法、ReLU 等)运算。

2 基本架构

图1 ShuffleNet V1 [15] 和 ShuffleNet V2 的构造块

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

图2 ShuffleNet V2 的整体架构,复杂度包含四个级别

3 代码

代码分析看ShuffleNet V2的tensorflow实现-源码分析

4 分析

对四个高效架构设计原则进行分析。

Guideline 1:输入通道数与输出通道数保持相等可以最小化内存访问成本(memory access cost,MAC)。

假设输入通道为C_{in},输出通道为C_{out},输出特征图的尺寸为h \times w,因此每个1\times 1卷积的FLOPs为B = hwC_{in}C_{out}。内存访问成本为MAC=hw(C_{in} + C_{out}) + C_{in}C_{out},于是有:
MAC \geq 2\sqrt{hwB} + \frac{B}{hw}

证明:
\because C_{in} + C_{out} \geq 2 \sqrt{C_{in}C_{out}} = 2 \sqrt{\frac{B}{hw}} \\ \therefore MAC \geq hw 2 \sqrt{\frac{B}{hw}} + \frac{B}{hw} = 2 \sqrt{Bhw} + \frac{B}{hw}
由上式可知,当C_{in} = C_{out}时,MAC最小。

这里使用了如下不等式:
a + b \geq 2\sqrt{ab}
这是因为(a + b)^2 \geq 0

Guideline 2: 分组卷积中使用过多的分组数会增加内存访问成本(MAC)。
分组卷积的FLOPs为:B = hwC_{in} C_{out} / g,这里的g表示分组数。于是有
MAC = hw(C_{in} + C_{out}) + \frac{C_{in} C_{out}}{g} = hwC_{in} + \frac{Bg}{C_{in}} + \frac{B}{hw}

对于变量C_{in}, h, w, B,这里很难说B也是固定的,因为B\varpropto \frac{1}{g}

Guideline 3:网络结构太复杂(分支和基本单元过多)会降低网络的并行程度。

探索网络的分支数以及每个基本结构包含的卷积层个数对网络速度的影响。

图3 5种结构 图4 5种结构的性能对比

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

图5 去除ReLU和short-cut的性能对比

5 总结

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

相关文章

网友评论

      本文标题:2.5 ShuffleNet V2思考

      本文链接:https://www.haomeiwen.com/subject/vvwzgqtx.html