ShuffleNet V2学习笔记
paper:《ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design》
导语
神经网络架构的设计目前主要由计算复杂度的间接指标(即FLOPs)来指导。但是,直接指标(如速度)还依赖于其他因素,如内存访问成本(MAC)和平台特点。
作者指出过去在网络架构设计上仅注重间接指标 FLOPs 的不足,并提出两个基本原则和四个实用准则来指导网络架构设计,最终得到了无论在速度还是精度上都超越先前最佳网络(如 ShuffleNet V1、MobileNet 等)的 ShuffleNet V2。
引言
度量计算复杂度的常用指标是浮点运算数,即 FLOPs。然而,FLOPs 是一种间接指标。它只是本文真正关心的直接指标(如速度或延迟)的一种近似形式,通常无法与直接指标划等号。将 FLOPs 作为衡量计算复杂度的唯一标准是不够的,这样会导致次优设计。
间接指标 (FLOPs) 和直接指标(速度)之间存在差异的原因可以归结为两点:(1)内存访问成本;(2)并行度。
设计原则
研究者提出了高效网络架构设计应该考虑的两个基本原则:第一,应该用直接指标(例如速度)替换间接指标(例如 FLOPs);第二,这些指标应该在目标平台上进行评估。
实用准则
提出了设计高效网络架构需要遵循的准则:
•G1. 相同的通道宽度可最小化内存访问成本(MAC);
•G2. 过度的组卷积会增加 MAC;
•G3. 网络碎片化(例如 GoogLeNet 的多路径结构)会降低并行度;
•G4. 元素级运算不可忽视。
本文总结出一个高效的网络架构应该:(1)使用「平衡」的卷积(相同的通道宽度);(2)考虑使用组卷积的成本;(3)降低碎片化程度;(4)减少元素级运算。
ShuffleNet V2
ShuffleNet V1 回顾
根据 ShuffleNet V1,轻量级网络的主要挑战是在给定计算预算(FLOPs)时,只能获得有限数量的特征通道。为了在不显著增加 FLOPs 情况下增加通道数量,ShuffleNet V1 采用了两种技术:逐点组卷积核和类瓶颈(bottleneck-like)结构;然后引入「channel shuffle」操作,令不同组的通道之间能够进行信息交流,提高精度。其构建模块如图 3(a)(b) 所示。
如第二部分所述,逐点组卷积和瓶颈结构都增加了 MAC(G1 和 G2)。这个成本不可忽视,特别是对于轻量级模型。另外,使用太多分组也违背了 G3。捷径连接(shortcut connection)中的元素级「加法」操作也不可取 (G4)。因此,为了实现较高的模型容量和效率,关键问题是如何保持大量且同样宽的通道,既没有密集卷积也没有太多的分组。
通道分割【caffe中的Slice操作】
为此,本文引入一个简单的操作——通道分割(channel split)。如图 3© 所示。在每个单元的开始,c 特征通道的输入被分为两支,分别带有 c−c’ 和 c’个通道。按照准则 G3,一个分支仍然保持不变。另一个分支由三个卷积组成,为满足 G1,令输入和输出通道相同。与 ShuffleNet V1 不同的是,两个 1×1 卷积不再是组卷积。这部分是为了遵循 G2,部分是因为分割操作已经产生了两个组。
卷积之后,把两个分支拼接起来,从而通道数量保持不变 (G1)。然后进行与 ShuffleNet V1 相同的「Channel Shuffle」操作来保证两个分支间能进行信息交流。
「Shuffle」之后,下一个单元开始运算。注意,ShuffleNet V1 [15] 中的「加法」操作不再存在。像 ReLU 和深度卷积这样的操作只存在一个分支中。另外,三个连续的操作「拼接」、「Channel Shuffle」和「通道分割」合并成一个操作。根据 G4,这些变化是有利的。
对于空间下采样,该单元经过稍微修改,详见图 3(d)。通道分割运算被移除。因此,输出通道数量翻了一倍。
本文提出的构造块 ©(d),以及由此而得的网络,被称之为 ShuffleNet V2。基于上述分析,本文得出结论:由于对上述四个准则的遵循,该架构设计异常高效。
上述构建模块被重复堆叠以构建整个网络。为简单起见,本文令 c’ = c/2。整个网络结构类似于 ShuffleNet V1(见表 5)。二者之间只有一个区别:前者在全局平均池化层之前添加了一个额外的 1×1 卷积层来混合特征,ShuffleNet V1 中没有该层。与 ShuffleNet V1 类似,每个构建块中的通道数量可以扩展以生成不同复杂度的网络,标记为 0.5×、1× 等。
实现
https://github.com/farmingyard/ShuffleNet
内容主要摘自文章《ECCV 2018 | 旷视科技提出新型轻量架构ShuffleNet V2:从理论复杂度到实用设计准则》:https://www.sohu.com/a/244491616_418390
ShuffleNet V2学习笔记相关推荐
- 第八课:ShuffleNet v1、ShuffleNet v2学习
前言 随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容.来源于哔哩哔哩博主"霹雳吧啦Wz",博主学习作为笔记记录,欢 ...
- ant design pro V2 学习笔记
该笔记分为两部分,前面部分为官方文档介绍,后面为实际项目改造的历程 本文档不定时更新,你想要的在实战部分 如果你对react.dva等一些概念不是很清晰,建议先看以下概念: react:https:/ ...
- DeepLab V2学习笔记
DeepLab V2 遇到的相关问题以及解决方法 对于DeepLab V1的优化 模型总结 补充的一个小知识点 ASPP Learning rate policy 消融实验 实验结果 遇到的相关问题以 ...
- NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导
前言 业务组件的设计是非常重要的工作,如果你没有正确的设计业务组件的话,结果很可能就是代码难以维护和扩展.在设计和实现应用的时候,有多种类型的业务组件.包括业务逻辑组件,业务实体,业务流程或者是工作流 ...
- NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导
5 决定数据绑定的需求 数据绑定在应用中,提供了一种在用户界面的控件和数据或者逻辑组件建立连接的方式.数据绑定允许你将数据库的数据,或者是其他结构的数据进行显示或者和他们进行交互.数据绑定是绑定目标( ...
- 论文笔记:ShuffleNet v2
ShuffleNet V2: Practical Guidelines for Efficient CNN Architecture Design ShuffleNet v2 1.四个问题 要解决什么 ...
- 台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2)
台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2) 这节课主要讲解了训练模型的误差来源及相应的解决方案. 模型的误差主要来源于数据 ...
- 卷积神经网络学习路线(二十一) | 旷世科技 ECCV 2018 ShuffleNet V2
前言 这个系列已经更新了20多篇了,感谢一直以来大家的支持和等待.前面已经介绍过MobileNet V1,MobileNet V2,MobileNet V3,ShuffleNet V1这几个针对移动端 ...
- 【动手学深度学习v2李沐】学习笔记07:权重衰退、正则化
前文回顾:模型选择.欠拟合和过拟合 文章目录 一.权重衰退 1.1 硬性限制 1.2 柔性限制(正则化) 1.3 参数更新法则 1.4 总结 二.代码实现 2.1 从零开始实现 2.1.1 人工数据集 ...
最新文章
- C#自动弹出窗口并定时自动关闭
- oracle间隔分区
- SPSS输出的结果都要写到文章中吗
- task2 EDA数据分析
- 5.1数组的定义5.2数组的顺序表示和实现
- 怎么定义int_面试官问:MySQL的自增ID用完了,怎么办?!
- Json.Net学习笔记(十二) 协议解析
- android http封装类,HTTP封装类 工具类 For Android
- VS2017下载地址和安装教程(图解)
- LabVIEW 使用入门(简明笔记)
- SSB基准测试-MySQL
- 百度网盘下载速度慢的解决方式
- 数据挖掘思维和实战20 Apriori 与 FP-Growth:不得不再说一遍啤酒与尿布的故事
- 搭建MYSQL的mmm架构出现 master/AWAITING_RECOVERY. Roles报错
- Android如何设置渐变色背景 渐变shape
- c语言组建怎样变成编译,c语言编译【处理流程】
- TOMCAT/JS/CSS/JavaWeb/浏览器老是加载缓存/谷歌浏览器/微软浏览器/刷新键都按烂了/无法加载样式解决办法之一
- 中国一些著名网站的主题颜色
- Windows环境下(64bit,内存4G),安装虚拟机(VM12.5),Ubuntu(17.04),anaconda(Python3.6)和TensorFlow(1.3)
- 软测_2执行发送邮件程序的回归测试