ShuffleNetV1
亮点
- 提出channel shuffle思想,解决组卷积中各组channel之间信息没有交流的问题,如下图
- a为原组卷积,b和c为添加channelshuffle的组卷积
- 将MobileNet中的PW卷积改为group卷积,因为作者发现MobileNet中PW卷积最耗时间,见下图
- a为MobileNet中的bneck,b和c分别为ShuffleNet中步距为1和2的模块
- ShuffleNetV1结构:
ShuffleNetV2
影响网络效率的四个因素
- 输入输出channel相同会使memory access cost最小
- FLOPs不变的情况下,组卷积中组的个数越大,MAC越大
- 网络碎片(各种分支)会降低并行度
- EW操作(如relu等)对效率也有不可忽视的影响
设计高效网络的四个准则
- 输入输出channel相同
- 降低组卷积中组的个数
- 减少网络碎片
- 减少EW操作
根据四个准则设计ShuffleNetV2
- a和b为V1,c和d为V2
- channelsplit将channel均分为两部分,送入两分支,channelshuffle将channel打乱
- c图中ReLU仅在一个branch中存在,a中ReLU在add操作后,因此c相对于a减少了EW操作
- c图中concat,channelshuffle,channelsplit操作可以合并为一个EW操作,即打乱重新分,这又减少了EW操作
- d图中没有split操作,因此输出channel翻倍(保证两个分支的输入输出channel一致)
ShuffleNetV2结构
- 对于1x以上版本中,stage2的第一个block的分支的输出channel不等于输入channel,而是直接调整为指定输出channel的一半(如总输出channel为116的话,则每个分支的输出channel为58)