惯例资源

论文地址


1.简介

相对于传统卷积方式,目前如分组卷积,空洞卷积,深度可分离卷积等,这些新型的卷积方式可以有效的降低模型的FLOPs,然而在实际设备上,由于各种各样的优化计算操作,导致计算量并不能准确地衡量模型的速度,换言之,相同的FLOPs会有不同的推理速度

具体来说,如在GPU运算的一些操作,底层都是调用cuda算子,而这些算子的操作方式,都是由开发人员优化后的,可能并没有针对具体的如深度可分离卷积进行优化;或在arm架构的cpu上,本质也是调用cpu的算子,可能并无相关优化。


2. 四个设计原则

shuffleNet_v2,指出了四个影响模型实际推理速度的操作,并在对速度和精度进行权衡后提出了shufflenet_v2架构。

FLOPs是理论上的计算量,我们可以把它看为是一种间接的衡量指标,与直接的衡量标准(速度)还是有差异的。

为什么这样说,FLOPs不能作为直接衡量标准?

2.1忽视了MAC

主要原因可能在于FLOPs只考虑了计算量却 忽视了MAC(memory access cost),即内存访问的时间成本。例如分组卷积,其使得底层使用的一些优化实现算法由于分组后实现性能更低,从而导致,分组数越大,时间成本越高。另一个是并行度,同样FLOPs下,高并行度的模型速度快于低并行度的模型。

2.2底层算子优化不同

另一个原因就是不同的算子(如调用cuda、cudnn)对每个具体的操作优化是不同的。举例来说按照FLOPs计算公式:

FLOPs=H∗W∗Cin∗K∗K∗CoutFLOPs = H*W*Cin*K*K*CoutFLOPs=H∗W∗Cin∗K∗K∗Cout

K为kernel size大小;H,W分别为输入特征图长宽;Cin为输入维度;Cout为输出维度。

假设我们H,W,Cin,Cout保持不变,分别计算33卷积核与11卷积核,33卷积核的FLOPs为11卷积核的9倍,但实际的运行时间并不是九倍,这是因为底层算子(cuda,cudnn,不同版本也有差异)对3*3卷积核计算做了优化,这就是不同运行平台/设备/环境所带来的差异。

2.3推理时间并不完全取决于计算量


如论文中的上图所示,这是两个模型在GPU,CPU(ARM)上各项操作所花费的具体时间,可以看到的是,整体的推理耗时除了卷积操作,还有包括Data(数据处理),Elemwise(Element-wise,点单个像素点操作,如ReLU, AddTensor, AddBias等等),以及模型设计所带来的一些固有的操作(shuffle等)
卷积即可用FLOPs表示。

2.4提出四个设计原则

ShuffleNet v2进行了四项实验,得出了一些比较耗时的操作,经过原理分析,提出了四条设计原则。

  1. 卷积层输入输出通道数相同时,MAC最小
  2. 分组卷积的分组数越大,MAC越大
  3. 网络支路会降低模型的并行度
  4. Element-wise操作不可忽视

3.四个设计原则详解

3.1卷积层输入输出唯独相同时,MAC最小

为了简化表达式,论文采用了11卷积核来进行理论推导。对于输入尺寸为HW的特征图,输入维度为Cin,输出维度为Cout:

那么FLOPs = H * W * Cin * Cout;
那么MAC = h * w * (c1 + c2 ) + c1 * c2

这里hwc1为输入特征图内存访问成本,hwc2为输出特征图内存访问时间成本,c1xc2x1x1为卷积核内存访问时间成本。
令FLOPs = B,带入MAC表达式,根据不等式表达定理,可得如下不等式:

MAC存在下限,当c1 = c2时,MAC取最小值。
来看实验结果,固定总的FLOPs,分别来看不同得到Cin,Cout比例下,模型的运行时间。

与理论一致,在1:1时模型速度最快

3.2 过多的组卷积增加了MAC

分组卷积一方面在固定FLOPs下,使用了更多的纬度信息同时提高了模型的准确率;另一方面,由于使用了更多的维度信息,所以增加了MAC开销。于是对于1*1,分组数为g的组卷积,我们可以得到如下公式:

在这里B=FLOPs=h * w * cin * cout / 2。可以由公式得出,g越大,MAC越大。
结果如下,组数越多,速度越慢In theGoogLeNet series [29,30,3,31] and auto-generated architectures [9,11,10]), a “multi-path” structure is widely adopted in each network block. A lot of small operators(called “fragmented operators” here) are used instead of a few large ones. Forexample, inNASNET-A[9] the number of fragmented operators (i.e. the numberof individual convolution or pooling operations in one building block) is 13. Incontrast, in regular structures like ResNet [4], this number is 2 or 3:

所以对于分组选择,需要我们在精度和速度之间做一个权衡。

3.3过多的支路降低了模型的并行度

在inception_v1这样的网络中,在一个block中应用了多条支路结构同时把一个大的操作改为进行几个小的操作然后串联,最后进行concat,这样做提升了精度,但是同时降低了效率。

这种在一个boock中应用多条支路的同时把一个大的操作改为进行几个小的操作然后串联结构无法较好的利用GPU强大的并行计算能力,在提升精度的同时,却降低了效率同时引入了额外的开销,如内核的启动与同步。
实验结果如下:


实验证明,只有一条支路时且只进行单个操作时,运行速度最快。因此,在网络结构中支路数可以提到精度,但也会降低运行速度,从而影响实时性。

3.4Element-wise操作不可忽视

在之前的2.3的图中,已经证明了element-wise虽然不增加FLOPs,但是造成的时耗仍然不可忽视。为了进一步探究其对运行速度的影响,作者选取ResNet中的bottleneck unit结构进行了对比实验,实验结果如图11。

在实验中,作者分别移除了bottleneck unit(也就是1x1卷积后接3x3卷积,再接1x1卷积,中间使用了ReLU, 另有一个shortcut连接)结构中的ReLU和shortcut操作作为对比。结果最终显示当ReLU、shortcut两部分操作均被移除之后,整体速度是最快的。

对此,shuffleNet v1使用多的分组数,违背了第二条原则,使用bottleneck相似的结构违背了第一条原则,MobileNet v2使用倒残差结构违背了第一条,且在通道数较多的feature map上使用了depthwise conv和ReLU违背了第四条,自动生成的结构有较多支路,违背了第三条。

注意:这里指的违背了这些原则,并不是说设计不好。以第二条分组数和第三条支路数为例,不能因为它们会降低模型运行时间,就再也不使用支路和分组卷积,毕竟它们对模型精度有较大提升,因此需要选择合适的分组数和支路数,以便在速度上和精度上取得权衡。


总结:影响实际模型运行速度的有很多因素,我们在设计时要做一个权衡。不能只要速度不要精度,也不能只考虑精度而忽视了部署时的真正性能

[计算机视觉]-从ShuffleNet V2来看,为什么有些FLOPs小的模型在实际推理过程中所花费的时间更长/速度更慢?相关推荐

  1. ShuffleNet 系列(2): ShuffleNet v2 理论讲解

    ShuffleNet V2 概述 论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design shuffl ...

  2. 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2

    前言 这个系列已经更新了20多篇了,感谢一直以来大家的支持和等待.前面已经介绍过MobileNet V1,MobileNet V2,MobileNet V3,ShuffleNet V1这几个针对移动端 ...

  3. 论文笔记:ShuffleNet v2

    ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design ShuffleNet v2 1.四个问题 要解决什么 ...

  4. 轻量化网络:ShuffleNet V2

    Guideline 1-4: ShuffleNet V2 疑问: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture ...

  5. 第八课:ShuffleNet v1、ShuffleNet v2学习

    前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...

  6. 轻量化网络:ShuffleNet v2解析

    原文: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 论文链接:https://arxiv.org ...

  7. ShuffleNet V2学习笔记

    paper:<ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design> 导语 神经网络架构的设计 ...

  8. 【CV】ShuffleNet V2:高效 CNN 架构设计的实用指南

    论文名称:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 论文下载:https://arxiv.or ...

  9. ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design

    论文链接:https://arxiv.org/abs/1807.11164 一.论文简介: 深度卷积神经网络(CNN)的架构经过多年的发展,变得更加准确和快速.除了精度,计算复杂度是另一个重要的考虑因 ...

最新文章

  1. Eclipse插件安装的三种方法
  2. WordPress美化_节日灯笼插件
  3. io.jsonwebtoken.SignatureException: JWT signature does not match locally computed signature.
  4. keras实现多层LSTM
  5. 疫情情况下酒店办理入住流程
  6. 手动安装virtualbox增强功能
  7. (三) SiamRPN从论文角度介绍
  8. 信息检索2.1书刊资料检索工具--书目note
  9. Zynga和StarLark庆祝《Golf Rival》面世四周年
  10. 《一封来自姐姐的信》
  11. Tc27x的MTCR与MFCR指令
  12. 自动驾驶仿真软件SCANeR studio(三)terrain地形模式
  13. Java代码实现阿里云视频上传
  14. 脚本及恶意网页攻击实验
  15. 【iOS】自动布局(AutoLayout)和手写布局(frame)
  16. 计算机微机原理心得体会,微机原理课设体会心得体会
  17. 【Python数学建模】nba预测,基于退役球员数据预测现役球员入选名人堂的可能性
  18. (python+cv2)做一个简单的摄像头人脸识别
  19. linux系统不死机了怎么办,Linux死机后怎么办
  20. 大话西游各服务器位置,大话西游手游时间服哪个区好_大话西游手游时间服哪个服务器人多_玩游戏网...

热门文章

  1. Dubbo第三讲:Dubbo的可扩展机制SPI源码解析
  2. 「星辰大海」你可能需要知道的 promise 知识的总结(内附思维导图)
  3. 求二叉树深度以及寻找二叉树中某一节点值
  4. Uniprot数据库
  5. 详解向下兼容、向上兼容、向前兼容、向后兼容
  6. 【word】删除 word 最后一页分节符,前页页眉消失
  7. [博创智联]创新创客智能硬件平台——超声波测距传感器
  8. 《机器学习-小知识点》1: Generative VS Discriminative 问题
  9. 【ITK 基本操作说明】
  10. 18.排列数字(c++)简单的dfs详解