深度学习500问——Chapter17:模型压缩及移动端部署(2)

news2024/11/19 19:46:02

文章目录

17.4.6 低秩分解

17.4.7 总体压缩效果评价指标有哪些

17.4.8 几种轻量化网络结构对比

17.4.9 网络压缩未来研究方向有哪些

17.5 目前有哪些深度学习模型优化加速方法

17.5.1 模型优化加速方法

17.5.2 TensorRT加速原理

17.5.3 TensorRT如何优化重构模型

17.5.4 TensorRT加速效果如何

17.6 影响神经网络速度的4个因素


17.4.6 低秩分解

基于低秩分解的深度神经网络压缩与加速的核心思想是利用矩阵或张量分解技术估计并分解深度模型中的原始卷积核。卷积计算是整个卷积神经网络中计算复杂度最高的计算操作,通过分解4D卷积核张量,可以有效减少模型内部的冗余性。

此外,对于2D的全连接层矩阵参数,同样可以利用低秩分解技术进行处理。但由于卷积层与全连接层的分解方式不同,本文分别从卷积层和全连接层2个不同角度回顾与分析低秩分解技术在深度神经网络中的应用。

在2013年,Denil等人[57]从理论上利用低秩分解的技术并分析了深度神经网络存在大量的冗余信息,开创了基于低秩分解的深度网络模型压缩与加速的新思路。如图7所示,展示了主流的张量分解后卷积计算。

(出自《深度神经网络压缩与加速综述》)

17.4.7 总体压缩效果评价指标有哪些

网络压缩评价指标包括运行效率、参数压缩率、准确率,与基准模型比较衡量性能提升时,可以使用提升倍数(speedup)或提升比例(ratio)。

评价指标特点
准确率目前,大部分研究工作均会测量Top-1准确率,只有在ImageNet这类大型数据集上才会只用Top-5准确率,为方便比较
参数压缩率统计网络中所有可训练的参数,根据机器浮点精度转换为字节(byte)量纲,通常保留两位有效数字以作近似估计
运行效率可以从网络所含浮点运算次数(FLOP)、网络所含乘法运算次数(MULTS)或随机实验测得的网络平均前向传播所需时间这3个角度来评价

17.4.8 几种轻量化网络结构对比

网络结构Top1准确率/%参数量/MCPU运行时间/ms
MobileNet V170.64.2123
ShuffleNet(1.5)69.02.9-
ShuffleNet(x2)70.94.4-
MobileNet V271.73,480
MobileNet V2(1.4)74.76.9149

17.4.9 网络压缩未来研究方向有哪些

网络剪枝、网络蒸馏和网络分解都能在一定程度上实现网络压缩的目的。回归到深度网络压缩到本质目的上,即提取网络中的有用信息,以下是一些值得研究和探寻的方向。

(1)权重参数对结果的影响度量。深度网络的最终结果是由全部的权重参数共同作用形成的,目前,关于单个卷积核/卷积核权重的重要性的度量仍然是比较简单的方式。尽管文献[14]中给出了更为细节的分析,但是由于计算难度大,并不实用。因此,如何通过有效的方式来近似度量单个参数对模型的影响,具有重要意义。

(2)学生网络结构的构造。学生网络的结构构造目前仍然是由人工指定的,然而,不同的学生我网络结构的训练难度不同,最终能够达到的效果也有差异。因此,如何根据教师网络结构设计合理的网络结构在精简模型的条件下获取较高的模型性能,是未来的一个研究重点。

(3)参数重建的硬件架构支持。通过分解网络可以无损地获取压缩模型,在一些对性能要求高的场景中是非常重要的。然而,参数的重建步骤会拖累预测阶段的时间开销,如何通过硬件的支持加速这一重建过程,将是未来对研究方向。

(4)任务或使用场景层面的压缩。大型网络通常是在量级较大的数据集上训练完成的,比如,在ImageNet上训练的模型具备对1000类物体的分类,但在一些具体场景的应用中,可能仅需要一个能识别其中几类的小型模型。因此,如何从一个全功能的网络压缩得到部分功能的子网络,能够适应很多实际应用场景的需求。

(5)网络压缩效用的评价。目前,对各类深度网络压缩算法的评价是比较零碎的,侧重于和被压缩的大型网络在参数量和运行时间上的比较。未来的研究可以从提出更加泛化的压缩评价标准出发,一方面平衡运行速度和模型大小在不同应用场景下的影响;另一方面,可以从模型本身的结构性出发,对压缩后的模型进行评价。

17.5 目前有哪些深度学习模型优化加速方法

https://blog.csdn.net/nature553863/article/details/81083955

17.5.1 模型优化加速方法

模型优化加速能够提升网络的计算效率,具体包括:

(1)Op-level的快速算法:FFT Conv2d(7x7,9x9),Winograd Conv2d(3x3,5x5)等;

(2)Layer-level的快速算法:Sparse-block net[1] 等;

(3)优化工具与库:TensorRT(Nvidia),Tensor Comprehension(Facebook)和Distiller(Intel)等。

17.5.2 TensorRT加速原理

https://blog.csdn.net/xh_hit/article/details/79769599

在计算资源并不丰富的嵌入式设备上,TensorRT之所以能加速神经网络的推断主要得益于两点:

  • 首先是TensorRT支持int8和fp16的计算,通过在减少计算量和保持精度之间达到一个理想的trade-off,达到加速推断的目的。
  • 更为重要的是TensorRT对于网络结构进行了重构和优化,主要体现在以下几个方面:

        (1)TensorRT通过解析网络模型将网络中无用的输出层消除以减小计算。

        (2)对于网络结构的垂直整合,即将目前主流神经网络的Conv、BN、Relu三个层融合为了一个层,例如将图1所示的常见的Inception结构重构为图2所示的网络结构。

        (3)对于网络结构的水平组合,水平组合是指将输入为相同张量和执行相同操作的层融合在一起,例如图2向图3的转化。

图1

图2

图3

以上3步即是TensorRT对于所部属的深度学习网络的优化和重构,根据其优化和重构策略,第一和第二步适用于所有的网络架构,但是第三步则对于含有Inception结构的神经网络加速效果最为明显。

Tips:想更好地利用TensorRT加速网络推断,可在基础网络中多采用Inception模型结构,充分发挥TensorRT的优势。

17.5.3 TensorRT如何优化重构模型

条件方法
若训练的网络模型包含TensorRT支持的操作

1、对于Caffe与TensorFlow训练的模型,若包含的操作都是TensorRT支持对,则可以直接由TensorRT优化重构;

2、对于MXnet、PyTorch或其他框架训练的模型,若包含的操作都是TensorRT支持的,可以采用TensroRT API重建网络结构,并间接优化重构;

若训练的网络模型包含TensorRT不支持的操作

1、TensorFlow模型可通过tf.contrib.tensorrt转换,其中不支持的操作会保留为TensorFlow计算节点;

2、不支持的操作可通过Plugin API实现自定义并添加进Tensor计算图;

3、将深度网络划分为两个部分,一部分包含的操作都是TensorRT支持的,可以转换为TensorRT计算图。另一部分则采用其他框架实现,如MXnet 或 PyTorch;

17.5.4 TensorRT加速效果如何

以下是在TitanX(Pascal)平台上,TensorRT对大型分类网络的优化加速效果:

NetworkPrecisionFramework/GPU:TitanXPAvg.Time(Batch=8,unit:ms)Top1 Val.Acc.(ImageNet-1k)
Resnet50fp32TensorFlow24.10.7374
Resnet50fp32MXnet15.70.7374
Resnet50fp32TRT4.0.112.10.7374
Resnet50int8TRT4.0.160.7226
Resnet101fp32TensorFlow36.70.7612
Resnet101fp32MXnet25.80.7612
Resnet101fp32TRT4.0.119.30.7612
Resnet101int8TRT4.0.190.7574

17.6 影响神经网络速度的4个因素

  1. FLOPs(FLOPs就是网络执行了多少multiply-adds操作);
  2. MAC(内存访问成本);
  3. 并行度(如果网络并行度高,速度明显提升);
  4. 计算平台(GPU,ARM)

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

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

相关文章

Unity中Mesh多种网格绘制模式使用方法参考

Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是 Triangles网格由三角形构成。Quads网格由四边形构成。Lines网…

多线程——认识线程(Thread)

目录 前言 一、第一个多线程程序 1.程序编写 2.介绍jconsole 二、创建线程 1.继承Thread类 ①重写run方法 ②重写run方法,使用匿名内部类 2.实现Runnable接口 ①重写run方法 ②重写run方法,使用匿名内部类 ③使用 lambda 表达式 三、多线程…

【吊打面试官系列-MySQL面试题】为表中得字段选择合适得数据类型

大家好,我是锋哥。今天分享关于【为表中得字段选择合适得数据类型】面试题,希望对大家有帮助; 为表中得字段选择合适得数据类型 字段类型优先级: 整形>date,time>enum,char>varchar>blob,text 优先考虑数字类型,其次是…

c++类与对象二

文章目录 C类与对象二类的实例化类对象内存大小计算this指针特性 C类与对象二 类的实例化 用类创建对象的过程,称之为类的实例化 类是对对象进行描述的,限定了类有哪些成员,定义一个类并没有开辟内存空间。例如需要学生填写的个人表格&…

js 如何获取当日零点整的时间戳

最近遇到个问题需要取当日的零点整的时间戳去存取日程 上代码: const timestr new Date().setHours(0, 0, 0, 0) console.log(timestr) 效果展示: Tips:除了 Java 以外的语言需要除以1000 具体视情况而定 Java、js的时间戳都是毫秒级的…

每日一练:腐烂的橘子

994. 腐烂的橘子 - 力扣(LeetCode) 题目要求: 在给定的 m x n 网格 grid 中,每个单元格可以有以下三个值之一: 值 0 代表空单元格;值 1 代表新鲜橘子;值 2 代表腐烂的橘子。 每分钟&#xf…

leetcode35--搜索插入位置--二分查找刷题

搜索插入位置 一共会出现下面四种情况: 目标值在数组所有元素之前 目标值等于数组中某一个元素 目标值插入数组中的位置 目标值在数组所有元素之后 首先在二分查找的代码之前处理掉目标值在数组所有元素之前和之后的情况如果目标值在数组中的某个位置&#xff0c…

51单片机系列-按键检测原理

🌈个人主页:羽晨同学 💫个人格言:“成为自己未来的主人~” 独立按键是检测低电平的。 下面我们来看一张对应的电路原理图: 在这张图当中,P1,P2,P3内部都上拉了电阻,但是P0没有&am…

学习记录:js算法(四十九):二叉树的层序遍历

文章目录 二叉树的层序遍历网上思路队列循环 总结 二叉树的层序遍历 给你二叉树的根节点 root ,返回其节点值的层序遍历 。 (即逐层地,从左到右访问所有节点)。 图一: 示例 1:如图一 输入:roo…

【QT】亲测有效:“生成的目标文件包含了过多的段,超出了编译器或链接器允许的最大数量”错误的解决方案

在使用dlib开发人脸对齐功能时&#xff0c;出现了”生成的目标文件包含了过多的段&#xff0c;超出了编译器或链接器允许的最大数量的错误“。 主要功能代码如下&#xff1a; #include <QApplication> #include <QImage> #include <QDebug>#include <dlib…

叶绿素透射反射率与波长

本文在分析巢湖水体反射光谱特征的基础上,通过对光谱反射率与叶绿素a 的浓度之间的关系进行分析研究,结果表明,单波段光谱反射率与叶绿素a浓度的相关系数较小,不宜用于估算叶绿素a浓度&#xff0e;光谱反射率比值RFo5.m/Rss.nm.和 690nm反射率的一阶微分均与叶绿素a浓度有较好的…

leetcode每日一题day16(24.9.26)——数组元素和与数字和的绝对差

思路&#xff1a;遍历数组在对数组元素进行求和时并使用while循环求数字和&#xff0c;由于对于一个数&#xff0c;其必定大于其个数位数字的和,所以可以直接对sum进行减 代码 int differenceOfSum(vector<int>& nums) {int ans 0;for (int x : nums) {ans x; // …

基于Springboot+Vue的玩具租赁系统(含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 系统中…

OpenSCAP部署、使用与原理分析

文章目录 前言1、概述2、安装与使用2.1、源码安装2.1.1、获取源代码2.1.2、获取构建依赖项2.1.3、构建库2.1.4、构建HTML文档2.1.5、运行测试2.1.6、安装OpenSCAP2.1.7、安装SCAP内容 2.2、使用方法2.2.1、oscap的常用命令2.2.2、显示有关SCAP内容的信息2.2.2.1、显示有关SCAP源…

WITS核心价值观【创新】篇|系统进化论 解锁新纪元

「客尊」、「诚信」、「创新」 与「卓越」 是纬创软件的核心价值观。我们秉持诚信态度&#xff0c;致力于成为客户长期且值得信赖的合作伙伴。持续提升服务厚度&#xff0c;透过数字创新实践多市场的跨境交付&#xff0c;助客户保持市场领先地位。以追求卓越的不懈精神&#xf…

【Python报错已解决】 WARNING: Ignoring invalid distribution

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

【JavaSE】反射、枚举、lambda表达式

目录 反射反射相关类获取类中属性相关方法常用获得类相关的方法示例常用获得类中属性相关的方法示例获得类中注解相关的方法 反射优缺点 枚举常用方法优缺点 枚举与反射lambda表达式语法函数式接口简化规则使用示例变量捕获集合中的应用优缺点 反射 Java的反射&#xff08;refl…

数据分析-30-电影死亡笔记中的数据分析思维

文章目录 1 死亡笔记简介2 推理过程中的数据分析2.1 第一个问题2.2 第二个问题2.3 第三个问题3 数据分析的发展4 参考附录1 死亡笔记简介 《死亡笔记》改编自小畑健同名日本人气漫画《Death note》,故事描述拥有一本写上姓名就能将人置于死地笔记本的高中生夜神月与天才警部搜…

人工智能迭代产品有哪些

人工智能迭代产品有很多&#xff0c;以下是一些例子&#xff1a; Ai 智能办公利器 - Ai-321.com 人工智能 - Ai工具集 - 集合全球ai人工智能软件的工具箱网站 Midjourney&#xff1a;这是一款基于AI技术的文生图产品&#xff0c;可以通过简单的prompt生成独具艺术感的 Midjo…

工具按钮 QToolButton

工具按钮常常用来显示图标&#xff0c;然后添加到工具栏中 常用属性和方法 文本 设置和获取文本 //设置和获取文本 QString text() const void setText(const QString &text)图片 设置和获取图片 //设置和获取图片 QIcon icon() const void setIcon(const QIcon &…