论文阅读:轻量级网络之shuffleNetV2—— ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

文章是去年的,但是感觉思路很清晰,被说服了,觉得超牛逼。之前没有好好看,真的是打脸max。还是要好好看论文啊,不要就听名字。

这篇文章主要是对v1的改进。

思考向,flops是衡量一个model速度的唯一考量么? 当然不是啦,还有计算平台以及内存访问代价(memory access cost, MAC)等等等。所以呢,就有了v2,并且提出了一些设计模型的通用准则。

现有的度量计算复杂度的指标是flops,也就是multiply_adds的数量,其实是一个间接的指标,可以近似的去估计实际速度但不是直接指标。比如说,mv2和nasnet_a的flops是同一个量级的,但是mv2的速度却更快。所以说,不能将flops作为唯一模型设计的度量指标,这样往往会导致次优解。

速度和flops之前的差异可以总结为如下两个原因。1.flops并没有考虑到一些对模型速度影响很大的因素。比如内存访问开销,在有牛逼GPU的时候很可能成为瓶颈,还有模型的并行程度,2.和平台的关系 ,不能理所当然的认为33是11的九倍,因为cudnn有优化。

因此,在设计一个轻量级网络的时候,不能只看理论计算量,要看实际速度,并且要根据特定的计算平台来设计。

不同平台上,耗时操作占比是不一样的,所以一定要考虑平台。


下面插入的是张祥雨博士讲座的PPT,思路真的是超级清晰,就是图不清晰,毕竟是视频截出来的。


影响模型执行速度的因素:

1.理论计算量最重要 也就是控制flops
2.计算访存比 访存比是线性增长 要专门考虑访存比
3.模型的并行度 碎片化多了之后各个操作会有依赖,会有很多内存读写操作
4.设备特性 比如ARM


高性能网络设计的指导准则

1.输入输出通道数接近 访存比最大
MAC的计算
其实特征占用的空间 以11卷积为例,输入输出的特征图大小为w,h 则占用的内存为 wh(c1+c2)+c1c211 flops B = hwc1c21*1,所以MAC与B可以表示为如下关系,怎么推的我就不清楚了

2.分组卷积要慎用 实现起来稍微困难,而且访存比很尴尬,因为不符合第一条的原则,输入输出通道在算的时候实际是有一个G的倍数关系的。


3.减少网络碎片


4.逐元素运算的开销不可忽视 虽然是搬运的操作
提出v2 v2就符合以上原则
还有特征重用



检测好,但是分割不行,主要是upsample的策略。

你可能感兴趣的:(论文阅读:轻量级网络之shuffleNetV2—— ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design)