ShuffleNet v2
论文 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相关推荐
- 论文笔记:ShuffleNet v2
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design ShuffleNet v2 1.四个问题 要解决什么 ...
- 轻量化网络:ShuffleNet V2
Guideline 1-4: ShuffleNet V2 疑问: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture ...
- 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2
前言 这个系列已经更新了20多篇了,感谢一直以来大家的支持和等待.前面已经介绍过MobileNet V1,MobileNet V2,MobileNet V3,ShuffleNet V1这几个针对移动端 ...
- 第八课:ShuffleNet v1、ShuffleNet v2学习
前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...
- 轻量化网络:ShuffleNet v2解析
原文: ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 论文链接:https://arxiv.org ...
- ShuffleNet V2学习笔记
paper:<ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design> 导语 神经网络架构的设计 ...
- ShuffleNet 系列(2): ShuffleNet v2 理论讲解
ShuffleNet V2 概述 论文:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design shuffl ...
- 【CV】ShuffleNet V2:高效 CNN 架构设计的实用指南
论文名称:ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design 论文下载:https://arxiv.or ...
- ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design
论文链接:https://arxiv.org/abs/1807.11164 一.论文简介: 深度卷积神经网络(CNN)的架构经过多年的发展,变得更加准确和快速.除了精度,计算复杂度是另一个重要的考虑因 ...
- 轻量化神经网络总结:SqueezeNet、Xception、MobileNet v1、MobileNet v2、ShuffleNet v1、ShuffleNet v2
2016.02 伯克利&斯坦福提出 SqueezeNet 在ImageNet上实现了与Alexnet相似的效果,参数只有其1/50 核心点: 1x1卷积核代替3x3卷积核 Squeeze La ...
最新文章
- encodeURIComponent或者encodeURI 不用行不行?
- java时间计算,获取某月第一天和最后一天
- 计算机控制技术曹立学答案,高等学校电子与电气工程及自动化专业十二五规划教材:计算机控制技术...
- 试解析Tomcat运行原理(一)--- socket通讯(转)
- BMP图像文件格式分析附带图解
- 如何在源码包编译安装的 LEMP 环境下开启 OpenSSL 功能
- python项目依赖库打包发布方法
- LeetCode 3.无重复字符的最长字串(滑动窗口)
- (一)音视频:解码H264文件流程 渲染和拿到解码后源数据YUV 完整Demo
- 推荐子龙山人的emacs的教程
- 让博客Docker化,轻松上手Docker
- 三种CRC16 C语言算法理解(CCITT)
- angular学习-数据绑定
- Word或者Excel中怎么把 空格 替换成 换行
- pyCUDA教程-系列学习(1):GPU结构、pyCUDA、numbapro安装及HelloGPU例子
- 入手评测 华为擎云 L410怎么样
- 关于Gradle新版插件依赖方式
- 机器学习(三)防止语句歧义、平凡解、支持向量机
- Jmeter参数化实现永久递增
- 练习:仿真模拟福彩双色球——中500w巨奖到底有多难?跑跑代码就晓得了。