读懂ShuffleNet V2

news2024/11/26 4:29:08

ShuffleNetV2介绍

https://arxiv.org/abs/1807.11164

深度卷积神经网络的架构创新显著的提升了在ImageNet数据集上的分类准确率,如VGG、GoogleNet、ResNet、DenseNet、ResNeXt、SE-Net以及自动网络架构搜索获得的方案。然而除了准确率,计算复杂度是另一个重要的考虑因素。真实场景应用更加关注在给定运算平台的前提下,如何利用限的资源获得最佳的准确率。这种思路催生了一系列轻量级的架构设计如Xception、MobileNet、ShuffleNet与CondenseNet。在这类网络中,group convolution与depth-wise convolution起着重要的作用。

浮点数运算量FLOPs被广泛用作计算复杂度的评估指标。然而,FLOPs是一项间接指标,无法与直接指标如速度和准确率等同。过往的工作也证明FLOPs相同的网络运算速度却不同。单一使用FLOPs作为评估指标可能导致次优方案。

直接指标与间接指标的矛盾可以归咎于两点原因。第一,FLOPs没有考虑影响速度的一些重要因素。例如内存访问成本,它在group convolution中占据大量运算时间,也是GPU运算时的潜在性能瓶颈;还有并行度。相同FLOPs的情况下,高度并行的网络执行起来会更加迅速。

第二,FLOPs相同的操作,在不同平台下运行时不同。例如早期工作广泛使用张量分解来加速矩阵乘法。但是近期工作发现虽然它可以减少75%的FLOPs,但是在GPU上运算却更慢了。作者研究后发现这是因为最新的CUDNN(该文章发表于2018年)针对3×3卷积做了特殊优化。

因此,作者提出了高效网络架构设计的两大原则。第一,使用直接指标(如速度)而非间接指标(如FLOPs);第二,需要在目标平台上验证该指标。同时提出了四条与跨平台的设计指南,并在该指南指导下设计了一款新的网络架构ShuffleNet V2。
在这里插入图片描述

设计高效网络的实用指南

该研究在两类具备工业级优化神经网络库的硬件上开展。作者认为他们的CNN库效率比大部分开源库更高。

  • GPU。硬件为英伟达GTX 1080 Ti。软件CUDNN 7.0。
  • ARM。硬件为高通Snapdragon 810。软件基于Neon高度优化的实现,测试时单线程。
    其它设置还包括:完整的优化选项,开启tensor fusion。输入图像尺寸224×224。所有的网络随机初始化,测试重复100次,取运行时的平均值。测试对象选择了ShuffleNet v1与MobileNet v2,分别代表了group convolution与depth-wise convolution两种流行趋势。

整体运行时被按照操作类别分解如下图所示。FLOPs仅考虑了卷积运算部分,忽略了其它操作如数据I/O、随机化等同样耗时的操作。因此是不准确的。
在这里插入图片描述
在此基础上,作者针对高效网络设计提出了四条指南。

指南一:保持通道数恒定以最小化内存访问成本

在使用depthwise separable convolutions的网络中,pointwise卷积承担了大部分复杂度。输入通道数c1 与输出通道数c2 决定了网络形状。特征图的高度与宽度为 h 与 w,则1×1卷积的FLOPs为 B = h w c 1 c 2 B=hwc_1c_2 B=hwc1c2

假设缓存足够大能够储存下完整的特征图及参数。内存访问成本可以记为 M A C = h w ( c 1 + c 2 ) + c 1 c 2 MAC=hw(c_1+c_2)+c_1c_2 MAC=hw(c1+c2)+c1c2 。根据均值不等式可得:

可见MAC的下界由FLOPs决定。当输入与输出通道相等时值最小。

这个结论是理论上的。实际的设备缓存通常不够大。现代运算库通常使用复杂的阻挡策略来最大化缓存的使用。为验证该指南,作者在测试网络中堆叠了10个block,每个block包含2个卷积层。第一个输入通道c1,输出通道c2,;第二个则反过来。实验结果如下表,当c1:c2接近1:1时,MAC最小。

在这里插入图片描述

指南二:避免过度的分组卷积

分组卷积将稠密的卷积连接离散化,降低了FLOPs,使得使用更多的卷积通道成为可能。但是,这种操作增加了内存访问成本。

同指南一,1×1卷积的MAC公式可以记为: M A C = h w ( c 1 + c 2 ) + c 1 c 2 g = h w c 1 + B g c 1 + B h w MAC=hw(c_1+c_2)+\frac{c_1c_2}{g}=hwc_1 + \frac{Bg}{c_1} + \frac{B}{hw} MAC=hw(c1+c2)+gc1c2=hwc1+c1Bg+hwB ,其中 g g g为分组的数量,为FLOPs。可见,当 g g g增大时,MAC增大。

作者的实验显示,相比标准卷积,分组数为8的卷积运算耗时在GPU上增加了一倍,在ARM上增加了30%。因此分组卷积带来的准确率上升是以速度为代价的,需要谨慎设计。
在这里插入图片描述

指南三:谨慎使用碎片化的网络

碎片化运算使用多个较小的运算取代单个较大的运算。尽管这样可以提升准确率,但是却降低了网络的并行度。这尤其不利于强并行运算资源如GPU,还会带来额外的kernel载入与同步损耗。
在这里插入图片描述
为了量化碎片化带来的影响,作者设计了上图所示block。实验中,GPU下采用图c的网络比采用图a的慢3倍。在ARM下的影响则有限。

指南四:不可忽视逐元素操作的负面影响

逐元素操作包括ReLu、AddTensor、AddBias等。他们的FLOPs相对较小,但是内存访问成本却很高。(作者将depthwise convolution也看做逐元素操作)。试验中,去除ReLU与shortcut连接的ResNet在GPU和ARM上的速度都提升了20%。

小结与讨论

综上,作者认为高效的网络设计应当:

  1. 使用均衡的卷积策略(通道数恒定)
  2. 警惕群组卷积
  3. 减弱碎片化程度
  4. 减少逐元素操作

ShuffleNet V2: 一种高效架构

ShuffleNet V1使用了pointwise group convolution以及类bottleneck结构,还引入了channel shuffle操作来促进不同群组间的信息交换。从上述的四个指南出发,作者提出了改进的ShuffleNet V2。

在这里插入图片描述

通道切分

作者设计了通道切分(channel split)操作如上图©所示。在每个单元前输入通道c被划分为c-c’与c’两个分支。为避免碎片化,一个分支保持不变;另一个分支遵循指南一,包含3个恒等通道数的卷积层,且1×1卷积不再分组。之后两个分支拼接为一个,通道数不变;再执行通道随机化操作。对于具备降采样功能的单元如图(d)所示,去掉了通道切分后,输出通道数扩增一倍。

ShuffleNet V2就是基于以上两种单元构建的。为了简化操作,模型的c’=c/2。网络整体架构类似ShuffleNet V1,具体参数如下表所示。有一点不同之处是在global averaged pooling前增加了1×1卷积以融合特征。每个单元的channel数是可变的,以便统一缩放改变网络的复杂度。

在这里插入图片描述

准确率分析

ShuffleNet不仅高效,同时还很准确。原因在于:第一,提效后网络可以使用更多的通道数。第二,每个单元内一半的通道直接馈入下一个单元。这可以看作是某种程度的特征再利用,类似DenseNet与CondenseNet。

结论

ShuffleNet的作者认为运算速度等直接指标应当是神经网络模型设计的一个重要因素。以此为前提作者分析了常用的网络设计策略对内存访问成本的影响,提出了四个高效网络设计指南,并设计了一种新的神经网络架构。

相比之前的网络设计以准确率为主要诉求,该文章提出的观点在设计网络时提供了更加全面的视角,值得关注。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/90371.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

实操分享:台式数字万用表测电压,手动测试VS万用表软件NS-Multimeter

台式数字万用表可以测量电流、电压、电阻、温度等多种参数,是电子工程师必备的仪器之一。本篇文章纳米软件Namisof小编将为大家分享:使用台式数字万用表手动测电压和万用表软件测电压的方法。本次将用DMM6500台式数字万用表为大家进行演示说明。 一、DMM…

大学生图书馆网页设计模板代码 DIV布局书店网页作业成品 学校书籍网页制作模板 学生简单书籍阅读网站设计成品

🎉精彩专栏推荐 💭文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业: 【📚毕设项目精品实战案例 (10…

ESP-C3入门1. VSCode+IDF 开发环境

ESP-C3入门1. VSCodeIDF 开发环境一、芯片说明1. 主要参数2. 内部结构图ESP32-C3-MINI-1内部架构图:ESP32-C3-MINI-1U内部架构图:3. 引脚4. 引脚描述5. strapping管脚6. 系统复位二、idf-vscode开发环境搭建1. 安装vscode2. idf配置(1&#x…

【AI with ML】第 5 章 :自然语言处理简介

🔎大家好,我是Sonhhxg_柒,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 📝个人主页-Sonhhxg_柒的博客_CSDN博客 📃 🎁欢迎各位→点赞…

【Spring】——13、BeanPostProcessor在Spring底层是如何使用的?

📫作者简介:zhz小白 公众号:小白的Java进阶之路 专业技能: 1、Java基础,并精通多线程的开发,熟悉JVM原理 2、熟悉Java基础,并精通多线程的开发,熟悉JVM原理,具备⼀定的线…

本周推荐 | 表达式引擎的组合子实现方案

推荐语:本文清晰而详细地介绍了如何使用 Parser 组合子方案,结合 Monad 通过合理的分层、抽象和组合,在性能达标的情况下实现消息场景中函数式的表达式解析。非常具有实践意义,推荐阅读学习!——大淘宝技术终端开发工程…

java+mysql基于ssm的网上订餐外卖管理系统

随着人们生活节奏的加快,网上订餐和外卖是当前很多人的一个选择,如何能够让更多的人吃上美味健康的饭菜是本系统研究的一个重要内容,同时本系统还拥有外卖的功能,让食客可以第一时间享受的想要吃到的美食 根据条件需要,系统结构主要由三大用户组成。一是买家组成的买家用户,二…

虹科技术 | 终端入侵防御 | 在重大攻击中发现新的Babuk勒索软件

11月期间,Morphisec在调查一个客户的防范事件时发现了Babuk勒索软件的一个全新变种。Babuk在2021年初首次被发现,当时它开始针对企业进行双重勒索攻击,以窃取和加密数据。这一年晚些时候,一个威胁者在一个讲俄语的黑客论坛上泄露了…

【案例教程】气象数据相关分析:如何使用格点数据分析中国霜冻灾害变化技术

【查看原文】气象数据相关分析及使用系列:如何使用格点数据分析中国霜冻灾害变化技术 霜冻是一种短历时的农业气象灾害,它是由于日最低气温下降,使植物茎、叶处温度下降到0℃以下,导致正在生长的植物受到冻伤的现象。霜冻出现的早…

深度学习——数据增广(笔记)+代码

1.为什么要进行数据增广? ①大型数据集是深度网络的前提条件 ②图像增广对训练数据进行一系列的随机变化,生成相似但不同的训练样本,从而扩大训练集的规模 ③数据增广:可以处理图片和文本和语音。 ④对于图片的处理方式包括&a…

FITC-PEG-DBCO,Fluorescein-PEG-DBCO,荧光素-PEG-DBCO

【产品描述】 DBCO试剂在水性缓冲液中具有快速动力学和稳定性,可用于标记叠氮化物修饰的生物分子,具有高特异性和反应性。FITC具有高吸收率的荧光量子产率和良好的水溶性等特点,是生物学中应用广泛的一种绿色荧光素衍生物,除了用作…

【TypeScript系列】【一篇就够】TypeScript知识点总结(一)

00 TypeScript简介 TypeScript是JavaScript的超集。它对JS进行了扩展,向JS中引入了类型的概念,并添加了许多新的特性。TS代码需要通过编译器编译为JS,然后再交由JS解析器执行。TS完全兼容JS,换言之,任何的JS代码都可以…

神经网络科研绘图可视化工具

本文介绍10种科研绘图可视化工具。 目录1.神经网络框架自带的可视化工具库2.NN-SVG3.PlotNeuralNet4.netron5.ZETANE6.Tensorspace.js7.GRAPHCORE8.nn_vis9.PowerPoint1.神经网络框架自带的可视化工具库 pytorch:pytorchviz库; keras:keras.…

Map和Set

目录 1.搜索 1.1 概念 1.2 模型 2.Map的使用 2.1 Map说明 2.2 Map.Entry说明,v> 2.3 Map的常见方法 2.3.1 V put(K key, V value) 2.3.2 V get(Object key) 2.3.3 V getOrDefault(Object key, V defaultValue) 2.3.4 Set keySet() Collection values() 2.3.5 S…

JavaWeb语法二:Thread类的基本使用

目录 1.创建线程 1.2:run()和start()方法 1.3:Thread的几个常见属性 2.线程的有关操作 2.1:启动一个线程:start() 2.2:中断一个线程 2.2.1:使用自定义的变量来作为标志位 2.2.2:使用Thr…

高校校园网络

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字):开发工具IDEA-2020.1,数据库mysql55.527,SSM框架,jdk版本"1.8.0_74",java语言。 管理员…

小白年薪26万,为什么Python岗位的薪资越来越高?问题解析

人工智能和大数据概念的兴起,带动了Python的快速增长——Python语言逻辑简洁、入门简单、生态丰富,几乎成为几个新兴领域的不二选择。而除了这两个领域,Python还有更多的适用领域:爬虫、web、自动化运维等领域都非常适合Python发挥…

大二学生HTML期末作业、个人主页网页制作作业

🎉精彩专栏推荐👇🏻👇🏻👇🏻 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 💂 作者主页: 【主页——🚀获取更多优质源码】 🎓 web前端期末大作业…

代码随想录第八天

专题:字符串 题目: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 char[] 的形式给出。不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。你可以假设数组中的所…

CleanMyMacX4.15好用吗?CleanMyMac X2023安全吗?

CleanMyMac x4.15已经正式发布,作为最新的系统清理和应用管理软件,可以让用户一键智能化清理Mac电脑,自动扫描Mac上的所有文件,包括:Mac系统清理、邮件应用程序清理、大和旧型文件清理、itunes文件清理、废纸篓清理、应…