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

目录

Introduction

四条高效网络设计准则

G1) Equal channel width minimizes memory access cost (MAC)

G2) Excessive group convolution increases MAC

G3) Network fragmentation reduces degree of parallelism

G4) Element-wise operations are non-negnigible

结论

ShuffleNet v2


Introduction

论文首先指出之前的文章在衡量模型复杂度时大多使用FLOPs作为评价指标,但是和速度、延迟这些我们真正在意的指标相比,FLOPs只能作为一个近似,比如MobileNet v2和NASNET-A的FLOPs差不多,但是前者的速度要快得多。

评价指标FLOPs和速度之间的差异主要有两方面的原因,一是一些对速度有很大影响的因素在计算FLOPs时却并没有考虑到,例如内存访问成本MAC(memory access cost)和并行度(degree of parallelism);二是相同FLOPs的操作在不同的平台上速度也不同。

因此作者提出了两条网络执行效率对比的准则

  • 使用直接指标如速度而不是间接指标如FLOPs
  • 在同一平台上进行评估

四条高效网络设计准则

作者从不同的方面对模型的速度进行了细致的分析,最终得到了4条高效网络的设计准则,具体如下。

G1) Equal channel width minimizes memory access cost (MAC)

即卷积的输入输出channel相同时,内存访问成本最低。

之前的轻量模型通常会使用深度可分离卷积(depthwise separable convolution),其中逐点卷积(pointwise convolution)又占了计算量的大头,假设输入特征图的尺寸为h×w,输入通道数为c1,输出通道数为c2,则1×1卷积的FLOPs为B=hwc1c2。假设平台的缓存足够大可以存储所有的特征图和参数,则内存访问成本MAC=hw(c1+c2)+c1c2,分别代表输入特征图、输出特征图、权重的内存访问成本。根据均值不等式有

因此在给定FLOPs的情况下MAC是有最小值的,且仅当c1=c2时取得最小值。当然这只是理论上的结论,实际上很多设备上的缓存不够大,而且现代的计算库通常采用复杂的阻塞策略来充分利用缓存机制。因此作者做了一系列实验来验证上述结论,通过堆叠10个block,每个block由两个卷积层组成,c1和c2分别是输入和输出通道数,来测试模型推导速度,结果如下

可以看出当c1=c2时,速度最快。随着c1/c2越来越大,速度越来越慢。

G2) Excessive group convolution increases MAC

即过多的组卷积会增大内存访问成本

组卷积通过只对输入通道的一部分进行卷积减小了FLOPs,因此在FLOPs固定的情况下可以使用更多的通道,从而增加网络容量得到更高的精度。但同时,更多的通道也就意味着MAC的增加。

其中g是分组个数,B=hwc1c2/g是FLOPs。从公式中可以看出,当输入大小c1×h×w和计算成本B固定时,MAC随着g的增加而增加。作者也通过实验论证了上述结论

G3) Network fragmentation reduces degree of parallelism

即网络的分支结构会降低并行度。

对于像GoogLeNet中用到的并行结构有助于提升精度,但因为对像GPU这样并行计算能力强的设备不友好而降低效率。作者通过实验按串行、并行两种方式组合不同的卷积来评估模型速度,block的结构如下所示

结果如下

可以看出,在FLOPs固定的情况下卷积以串行方式组合时速度更快。

G4) Element-wise operations are non-negnigible

即element-wise操作对速度的影响不应忽略。

如上图所示,element-wise操作还是占据了相当比例的运行时间的,尤其是在GPU上。Element-wise操作包括ReLU、AddTensor、AddBias等,这些操作的FLOPs较小但MAC较大。需要注意的是,我们把深度卷积也看做element-wise操作,因为它的MAC/FLOPs比值很大。

作者同样通过实验进行了验证,以ResNet中的bottleneck为例,通过分别去除ReLU和shortcut来测试速度。

可以看出去除ReLU和shortcut后速度获得了大约20%的提升。

结论

通过以上四个实验,作者总结一个高效的网络结构应该

  • use "balanced" convolutions (equal channel width)
  • be aware of the cost of using group convolutions
  • reduce the degree of fragmentation
  • reduce element-wise eperations

ShuffleNet v2

作者按照上述四条准则对shufflenet v1进行了改进,得到了shufflenet v2。v1和v2的block结构如下

作者提出Channel Split操作,如上图(c)所示,在每个单元的开始,输入通道数c被分成c-c'和c'两个分支。按照G3,一个分支保持不变,另一个分支由三个卷积串行组成并且输出和输入通道c'相等,这满足了G1。其中的两个1×1卷积是普通卷积,而不是v1中的组卷积,这一方面是因为G2,另一方面是因为channel split已经算是变相的分组了。

然后两个分支进行Concat,使得整个单元的输出通道和输入通道数c一样(G1)。然后再进行channel shuffle,保证两个分支的信息流动。

shuffling完这个单元就结束了,后面接下一个单元。注意到v1中的Add被去掉了。像ReLU、深度卷积这样的element-wise操作只存在于一个分支中。此外,三个连续的element-wise操作concat、channel shuffle、channel split被组合成一个element-wise操作,这符合G4

当stride=2时,去掉了channel split,因此最终的输出通道数会double。

ShuffleNet v2的完整结构如下所示

整体结构和v1类似,只有一点不同,在最后的全局平均池化前加了一层1×1卷积

ShuffleNet v2相关推荐

  1. 论文笔记:ShuffleNet v2

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

  2. 轻量化网络:ShuffleNet V2

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

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

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

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

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

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

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

  6. ShuffleNet V2学习笔记

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

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

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

  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)的架构经过多年的发展,变得更加准确和快速.除了精度,计算复杂度是另一个重要的考虑因 ...

  10. 轻量化神经网络总结:SqueezeNet、Xception、MobileNet v1、MobileNet v2、ShuffleNet v1、ShuffleNet v2

    2016.02 伯克利&斯坦福提出 SqueezeNet 在ImageNet上实现了与Alexnet相似的效果,参数只有其1/50 核心点: 1x1卷积核代替3x3卷积核 Squeeze La ...

最新文章

  1. encodeURIComponent或者encodeURI 不用行不行?
  2. java时间计算,获取某月第一天和最后一天
  3. 计算机控制技术曹立学答案,高等学校电子与电气工程及自动化专业十二五规划教材:计算机控制技术...
  4. 试解析Tomcat运行原理(一)--- socket通讯(转)
  5. BMP图像文件格式分析附带图解
  6. 如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能
  7. python项目依赖库打包发布方法
  8. LeetCode 3.无重复字符的最长字串(滑动窗口)
  9. (一)音视频:解码H264文件流程 渲染和拿到解码后源数据YUV 完整Demo
  10. 推荐子龙山人的emacs的教程
  11. 让博客Docker化,轻松上手Docker
  12. 三种CRC16 C语言算法理解(CCITT)
  13. angular学习-数据绑定
  14. Word或者Excel中怎么把 空格 替换成 换行
  15. pyCUDA教程-系列学习(1):GPU结构、pyCUDA、numbapro安装及HelloGPU例子
  16. 入手评测 华为擎云 L410怎么样
  17. 关于Gradle新版插件依赖方式
  18. 机器学习(三)防止语句歧义、平凡解、支持向量机
  19. Jmeter参数化实现永久递增
  20. 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。

热门文章

  1. 基于同义词词林的词语间相似度计算
  2. query归一 同义词挖掘
  3. 量子化学计算机理,量子化学(理论化学的分支学科)_百度百科
  4. 游戏多开检测的几种实现方法及破解方法参考
  5. 计算机禁止安装游戏,win7系统禁用自动安装游戏应用的详细教程
  6. matlab数控加工,关于MATLAB复杂型面数控加工编程.pdf
  7. 安卓手机多开助手v1.2 BY im大朋友
  8. 十大顶级大数据可视化工具
  9. 谷歌胜诉!10年Java版权案终结;京东、美团等10家平台承诺不用大数据杀熟;百度网盘海外版上传下载不限速 | EA周报
  10. 图解Java类加载机制