当前位置: 首页 > article >正文

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

文章目录

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.kler.cn/news/327967.html

相关文章:

  • ubuntu安装ftp服务器
  • 前端Vue.js与后端Flask/Django协同开发指南
  • Java面试题真题·人才招聘系统项目介绍
  • 【Java 集合】List接口 —— ArrayList 与 LinkedList 详解
  • 针对考研的C语言学习(定制化快速掌握重点2)
  • 深度解析 HTTP
  • Linux集群部署RabbitMQ
  • 从Linux系统的角度看待文件-基础IO
  • Linux服务器配置anaconda3,下载torch
  • Brave编译指南2024 MacOS篇-拉取源码前的准备工作(二)
  • 鸿蒙开发(NEXT/API 12)【硬件(外设扩展驱动开发)】驱动开发服务
  • 【算法】模拟:(leetcode)6.Z 字形变换(medium)
  • 数据预处理:数据挖掘的第一步
  • 基于STM32的智能门禁系统
  • OpenCV视频I/O(6)检查视频捕获对象是否已成功打开的函数isOpened()的使用
  • uniapp 微信小程序 微信支付
  • 张量、框架
  • 选择与运用合适工具提升编程效率的秘诀
  • uboot笔记(一):概括/移植等
  • Lagent 自定义你的 Agent 智能体
  • k8s 部署 prometheus
  • Android中级控件
  • Fivetran+Milvus:AI搜索新时代的数据迁移利器
  • 学习记录:js算法(五十):二叉树的右视图
  • 【Preference Learning】Reasoning with Language Model is Planning with World Model
  • mysql学习教程,从入门到精通,SQL 表、列别名(Aliases)(30)
  • Spring Boot框架在甘肃非遗文化网站设计中的运用
  • ubuntu配置python环境
  • 深度学习基础及技巧
  • Linux性能调优技巧