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学习笔记相关推荐

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

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

  2. ant design pro V2 学习笔记

    该笔记分为两部分,前面部分为官方文档介绍,后面为实际项目改造的历程 本文档不定时更新,你想要的在实战部分 如果你对react.dva等一些概念不是很清晰,建议先看以下概念: react:https:/ ...

  3. DeepLab V2学习笔记

    DeepLab V2 遇到的相关问题以及解决方法 对于DeepLab V1的优化 模型总结 补充的一个小知识点 ASPP Learning rate policy 消融实验 实验结果 遇到的相关问题以 ...

  4. NET 应用架构指导 V2 学习笔记(二十) 业务组件设计指导

    前言 业务组件的设计是非常重要的工作,如果你没有正确的设计业务组件的话,结果很可能就是代码难以维护和扩展.在设计和实现应用的时候,有多种类型的业务组件.包括业务逻辑组件,业务实体,业务流程或者是工作流 ...

  5. NET 应用架构指导 V2 学习笔记(十九) 表现层组件设计指导

    5 决定数据绑定的需求 数据绑定在应用中,提供了一种在用户界面的控件和数据或者逻辑组件建立连接的方式.数据绑定允许你将数据库的数据,或者是其他结构的数据进行显示或者和他们进行交互.数据绑定是绑定目标( ...

  6. 论文笔记:ShuffleNet v2

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

  7. 台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2)

    台大李宏毅Machine Learning 2017Fall学习笔记 (3)Bias and Variance (v2) 这节课主要讲解了训练模型的误差来源及相应的解决方案. 模型的误差主要来源于数据 ...

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

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

  9. 【动手学深度学习v2李沐】学习笔记07:权重衰退、正则化

    前文回顾:模型选择.欠拟合和过拟合 文章目录 一.权重衰退 1.1 硬性限制 1.2 柔性限制(正则化) 1.3 参数更新法则 1.4 总结 二.代码实现 2.1 从零开始实现 2.1.1 人工数据集 ...

最新文章

  1. C#自动弹出窗口并定时自动关闭
  2. oracle间隔分区
  3. SPSS输出的结果都要写到文章中吗
  4. task2 EDA数据分析
  5. 5.1数组的定义5.2数组的顺序表示和实现
  6. 怎么定义int_面试官问:MySQL的自增ID用完了,怎么办?!
  7. Json.Net学习笔记(十二) 协议解析
  8. android http封装类,HTTP封装类 工具类 For Android
  9. VS2017下载地址和安装教程(图解)
  10. LabVIEW 使用入门(简明笔记)
  11. SSB基准测试-MySQL
  12. 百度网盘下载速度慢的解决方式
  13. 数据挖掘思维和实战20 Apriori 与 FP-Growth:不得不再说一遍啤酒与尿布的故事
  14. 搭建MYSQL的mmm架构出现 master/AWAITING_RECOVERY. Roles报错
  15. Android如何设置渐变色背景 渐变shape
  16. c语言组建怎样变成编译,c语言编译【处理流程】
  17. TOMCAT/JS/CSS/JavaWeb/浏览器老是加载缓存/谷歌浏览器/微软浏览器/刷新键都按烂了/无法加载样式解决办法之一
  18. 中国一些著名网站的主题颜色
  19. Windows环境下(64bit,内存4G),安装虚拟机(VM12.5),Ubuntu(17.04),anaconda(Python3.6)和TensorFlow(1.3)
  20. 软测_2执行发送邮件程序的回归测试

热门文章

  1. btc 挖矿奖励 机制
  2. golang入门项目—日志收集
  3. 1到100之间所有奇(偶)数的和,奇(偶)数的个数,奇(偶)数的平均数
  4. 基于顺序表的图书管理系统(C语言)
  5. 计算机公开课议课术语,评课用语大全:公开课评课缺点用语
  6. unity里面动态的替换shader
  7. 是命运不济是运气不好都可以
  8. Nest.js 怎样使用 hbs 的 partials?
  9. 虚拟机u盾怎么使用_虚拟机用U盾支付安全吗
  10. CCTV曝光百度 凤巢系统的六大谎言