论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design(ECCV 2018)
ShuffleNet v2设计原则
从实际效果触发,确立一些建立高效网络的基本设计原则,在 ShuffleNet v1 【 1 】 ^{【1】} 【1】 基础上改进
通道比例
FLOPs (floating point of operations):浮点运算次数,衡量算法/模型复杂度
MFLOPs (million floating point of operations)
由下图可知:FLOPs相近的模型精度和运行速度均相差较大,那么FLOPs作为衡量模型速度的指标是不准确的
FLOPs相同为什么速度却差别较大?
FLOPs 虽然相同,但是内存访问消耗时间 MAC(memory access cost)不一样
例:若输入特征通道数为
c
1
c_1
c1,卷积核尺寸为
1
×
1
1\times 1
1×1,步长为1,输出特征通道数为
c
2
c_2
c2、尺寸为
h
×
w
h\times w
h×w ,则该卷积层 FLOPs
B
=
h
w
c
1
c
2
B=hwc_1c_2
B=hwc1c2
所需存储空间:输入特征 + 输出特征 + 卷积核
MAC
=
h
w
(
c
1
+
c
2
)
+
c
1
c
2
≥
h
w
2
c
1
c
2
+
c
1
c
2
=
2
h
w
B
+
B
h
w
\begin{aligned} \text {MAC}&=hw(c_1+c_2)+c_1c_2\\ &\geq hw2\sqrt{c_1c_2}+c_1c_2\\ &= 2\sqrt{hwB}+\frac{B}{hw} \end{aligned}
MAC=hw(c1+c2)+c1c2≥hw2c1c2+c1c2=2hwB+hwB
给定 FLOPs ,当 c 1 = c 2 c_1=c_2 c1=c2 时,MAC 可取下界
Table1对上述进行验证,给定FLOPs,采用不同的通道比例,当
c
1
:
c
2
c_1:c_2
c1:c2 越接近时,速度越快,与上述吻合
Group数量
分组卷积
【
1
】
^{【1】}
【1】可以减少参数和计算量,但是 FLOPs 降低并不意味着速度更快。将前面例子的
1
×
1
1\times 1
1×1 卷积换成分组卷积,组数为
g
g
g,则该卷积层FLOPs为:
B
=
h
w
c
1
c
2
/
g
B=hwc_1c_2/g
B=hwc1c2/g
所需存储空间只有卷积核减少了:
MAC
=
h
w
(
c
1
+
c
2
)
+
c
1
c
2
g
=
h
w
c
1
+
B
g
c
1
+
B
h
w
\begin{aligned} \text {MAC}&=hw(c_1+c_2)+\frac{c_1c_2}{g}\\ &=hwc_1+\frac{Bg}{c_1}+\frac{B}{hw} \end{aligned}
MAC=hw(c1+c2)+gc1c2=hwc1+c1Bg+hwB
由上式可知:当 FLOPs 固定时,group 数量增加 MAC \text {MAC} MAC 也随之增加
Table 2 将 FLOPs 固定, c c c 为 c 1 c_1 c1 和 c 2 c_2 c2 之和,随着 group 数增加,为保持 FLOPs 基本不变, c c c 也相应增加,但速度随之变慢,这与上述吻合
分支数量
下表中:2-fragment-series 表示一个block中有2个卷积层串行;2-fragment-parallel表示一个block中有2个卷积层并行。由此可知:支路多对于并行计算不利
Element-Wise操作
如下图所示:element-wise操作虽然FLOPs不大,但是时间消耗占比却不少,应当少用
ReLU、Add、AddBias等 element-wise 操作 FLOPs 小,但是
MAC
\text {MAC}
MAC 大,如下表:取消 Relu 和 Short-cut层的 Add 后,速度有较大提升
ShuffleNet v2 Unit
由上述可知:设计高效网络应至少注意以下四点:
- G1:输入输出通道数相等
- G2:减少使用分组卷积
- G3:减少分支数量
- G4:减少element-wise操作
如下图所示:(a)、(b) 为 ShuffleNet v1 Unit:
- Bottleneck 输入输出维度比例设计违反 G1
- Group Convolutions违反 G2
- 使用过多的 Group 增加结构的碎片化违反 G3
- 在block最后的特征图(宽)上使用 element-wise Relu 和 Add 操作违反 G4
图(b)、(c) ShuffleNet v2 Unit 针对 ShuffleNet v1 Unit 改进:
- Channel Split 操作为变相的Group操作,将输入特征分成两分支,一支为Short-cut,另一支则取消了 1 × 1 1\times1 1×1卷积中的Group操作,因此 Channel Shuffle 移到了最后
- element-wise Add 操作替换为 concat,并取消了最后的 Relu
下表为 ShuffleNet v2 的整体架构:
实验
参考文献
【1】ShuffleNet v1
【2】MobileNets v1
【3】ShuffleNet v2算法笔记