ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 论文笔记

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

论文链接: https://arxiv.org/abs/1807.11164

一、 Problem Statement

作者认为在设计网络结构的时候光考虑FLOPs这个指标不够,还需要考虑MAC(memory access cost)和目标设备。
相近的FLOPs可能会又不同的速度,在不同目标设备上不同的操作也有不同的速度。

二、 Direction

提出了下面四个准则

  1. 相同的通道数来减少MAC(memory access cost)
  2. 过多的group convolution会增加MAC
  3. 网络碎片化减少了并行的程度
  4. element-wise的操作也是不可以忽略的

三、 Method

1. Equal channel width minimizes memory access cost (MAC)

作者举了个例子,假设网络结构中使用了depthwise separable convolutions, 输入通道数为 c 1 c_1 c1, 输出通道数为 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为:
M A C = h w ( c 1 + c 2 ) + c 1 c 2 MAC = hw(c_1 + c_2) + c_1c_2 MAC=hw(c1+c2)+c1c2
分别代表输入,输出和卷积核权重的memory access。根据均值定理,可以得到:
M A C ≥ 2 h w B + B h w MAC \geq 2 \sqrt{hwB} + \frac{B}{hw} MAC2hwB +hwB
所以,在给定的FLOPs下,MAC有一个下限。当输入和输出通道数一样的时候,MAC最小。

2. Excessive group convolution increases MAC

Group convolution通过将所有通道之间的密集卷积变为稀疏(仅在通道组)内来降低计算复杂度(FLOPs)。一方面,它在固定的FLOPs下,能够使用更多的通道数来增加网络的capacity,提升精度。但是,增加通道数会导致更多的MAC。根据上面的式子,我们做一个变形:
M A C = h w ( c 1 + c 2 ) + c 1 c 2 g = h w c 1 + B g c 1 + B h w MAC = hw(c_1 + c_2) + \frac{c_1c_2}{g} \\ =hwc_1 + \frac{Bg}{c_1} + \frac{B}{hw} MAC=hw(c1+c2)+gc1c2=hwc1+c1Bg+hwB
这里的 g g g是group的数量。 B = h w c 1 c 2 / g B = hwc_1c_2 /g B=hwc1c2/g是FLOPs。可以看到,给定一个固定的输入大小, c 1 × h × w c_1 \times h \times w c1×h×w 和计算量B,MAC随着 g g g的增大而增大。 意味着如果使用一个大的group number,会导致速度降低。
因此,group number的数量需要根据目标设备和任务小心的选择。简单地使用大的group number是不明智的,因为会导致使用更多的通道数,增加计算量。

3. Network fragmentation reduces degree of parallelism

网络碎片化会减少并行的程度。尽管碎片化会提升精度,但这对一些并行计算的设备是不友好的,会引进额外的开销,比如内核启动和同步。 减少碎片化的程度。
在这里插入图片描述

4. Element-wise operations are non-negligible

Element-wise操作,如ReLU, AddTensor, AddBias等等也是不可以忽略的,它们有着小的FLOPs,但是有相对大的MAC。特别是depthwise convolution,它有着较大的 M A C / F L O P s MAC/FLOPs MAC/FLOPs比例。因此,尽可能减少这些element-wise操作。

5. ShuffleNet V2

作者根据上面的规则,改进ShuffleNet V1, 设计出ShuffleNet V2。它们之间的差别通过下图对比:
在这里插入图片描述

  • 增加了channel split:
    输入通道 c c c会分为 c − c ′ c-c' cc c ′ c' c。然后一个branch经过三个相同输入输出通道数的卷积来满足第一条规则。然后两个1x1卷积不再是group-wise的,满足第二条规则,因为split操作已经产生了两个groups。
  • 用Concatenation替换Add
    因为通道数相同,channel shuffle操作会在concatenation之后,使得信息可以在两个branch之间交流。
  • element-wise 操作只存在一个branch中:
    像ReLU和depth-wise convolution只存在一个branch之中。concat, channel shuffle, channel split融合在一个element-wise操作中。

在这里插入图片描述

可以看到,额外的1x1卷积层在global average pooling之前会使用,用来融合特征。

ShuffleNet v2拥有更多的特征通道和更大的网络capacity。其次,在每个block中,一半的特征通道(当 c ′ = c / 2 c'=c/2 c=c/2时)直接穿过该block并连接下一个block。这可以看作是一种特征重用,使得ShuffleNet v2更加效率和精度更高。

四、 Conclusion

提出了4个准则来设计网络结构,以后在优化速度和精度的时候,可以借鉴。

五、 Reference

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值