ShuffleNet v2

ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

论文指出单纯的乘加运算FLOPs并不能完全表示模型的运算速度,访存开销memory access cost(MAC)也应该考虑进去。并基于这,设计出了轻量化网络ShuffleNet V2。

 

提出了4个改进的原则:

(1)单个模块的输入输出通道相同,可以最小化访存开销(MAC)

c1:输入通道数

c2:输出通道数

h,w:输入feature map 的高度,宽度

B:FLOPs数,就是计算量,这里假设B恒定,卷积为1*1卷积(pointwise convolution ),因此计算量就是hwc1c2

MAC:访存次数,包括从内存取输入的feature map 的次数hwc1,将结果写回去的次数hwc2,取1*1卷积核参数的次数1*1*c1*c2

假设FLOPs数B恒定,c1*c2乘积一定的条件下,c1==c2可以使得c1+c2的值最小。

得出结论,当c1:c2=1:1时,可以获得最小的访存次数,使得网络运行速度提升。

(2)过量使用组卷积group convolution ,会增加MAC

g:组卷积的group个数

B:FLOPs数,由于这里使用的是组卷积,因此要除g

MAC:访存次数,从MAC公式可以看出,g越大,MAC值越大

(3)网络的分支越多,并行度越差

网络碎片化会降低并行度 一些网络如Inception,以及Auto ML自动产生的网络NASNET-A,它们倾向于采用“多路”结构,即存在一个lock中很多不同的小卷积或者pooling,这很容易造成网络碎片化,减低模型的并行度,相应速度会慢

(4)Element-wise 操作的时间是不可忽略的

像ReLU, AddTensor, AddBias 这些操作,虽然具有比较小的FlOPs数,但是却有比较大的访存MAC

 

最终结论:

  1. 使用平衡的卷积,(相同的输入,输出通道数)
  2. 组卷积的group数要谨慎设计
  3. 减少网络的并行度,减少碎片化
  4. 减少Element-wise 操作

 

网络模块:

前2个模块为ShuffleNet V1中的模块,(a)为传统模块,(b)为下采样模块

后2个模块为ShuffleNet V2中的模块,(c)为传统模块,(d)为下采样模块

V2和V1模块设计的区别:

  1. v2中的传统模块增加了channel split,假设原始输入通道数为c,将通道分成了c-c’和c’两个通道,实验中,c’=c/2
  2. 将channle shuffle操作移到后面来做
  3. 传统模块中将add操作转化为concat操作,有助于增加信息量,减少运算量
  4. 将Group conv换成了普通的conv,可以减少group数,减少MAC

 

网络结构:

论文实验:

分类任务精度:

ShuffleNet v2 ≥MobileNet v2 > ShuffeNet v1 > Xception

检测任务精度:

ShuffleNet v2 > Xception ≥ ShuffleNet v1 ≥ MobileNet v2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值