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

news2024/10/2 0:21:37

文章目录

17.7 压缩和加速方法如何选择

17.8 改变网络结构设计为什么会实现模型压缩、加速

17.8.1 Group convolution

17.8.2 Depthwise separable convolution

17.8.3 输入输出的channel相同时,MAC最小

17.8.4 减少组卷积的数量

17.8.5 减少网络碎片化程度(分支数量)

17.8.7 减少元素级操作


17.7 压缩和加速方法如何选择

(1)对于在线计算内存存储有限的应用场景或设备,可以选择参数共享和参数剪枝方法,特别是二值量化权值和激活、结构化剪枝。其他方法虽然能够有效的压缩模型中的权值参数,但无法减小计算中隐藏的内存大小(特征图)。

(2)如果在应用中用到的紧性模型需要利用预训练模型,那么参数剪枝、参数共享以及低秩分解将成为首要考虑的方法。相反地,若不需要借助预训练模型,则可以考虑紧性滤波设计及知识蒸馏方法。

(3)若需要一次性端对端训练得到压缩与加速后模型,可以利用基于紧性滤波设计的深度神经网络压缩与加速方法。

(4)一般情况下,参数剪枝,特别是非结构化剪枝,能大大压缩模型大小,且不容易丢失分类精度。对于需要稳定的模型分类的应用,非结构化剪枝成为首要选择。

(5)若采用的数据集较小时,可以考虑知识蒸馏方法。对于小样本的数据集,学生网络能够很好地迁移教师模型的知识,提高学生网络的判别性。

(6)主流的5个深度神经网络压缩与加速算法相互之间是正交的,可以结合不同技术进行进一步的压缩与加速。如:韩松等人[30]结合了参数剪枝和参数共享;温伟等人[64]以及AIvarez等人[85]结合了参数剪枝和低秩分解。此外对于特定的应用场景,如目标检测,可以对卷积层和全连接层使用不同的压缩与加速技术分别处理。

参考《深度神经网络压缩与加速综述》

17.8 改变网络结构设计为什么会实现模型压缩、加速

17.8.1 Group convolution

Group convolution最早出现在ALexNet中,是为了解决单卡显存不够,将网络部属到多卡上进行训练而提出。Group convolution可以减少单个卷积 1/g 的参数量。如何计算的呢?

假设:

  • 输入特征的维度为HWC_1
  • 卷积核的维度为H_1W_1C_1,共C_2
  • 输出特征的维度为H_1W_1C_2

传统卷积计算方式如下:

传统卷积运算量为:

A = H*W * h1 * w1 * c1 * c2

Group convolution是将输入特征对维度c1分为g份,每个group对应的channel数为 c1/g,特征维度 H*W*c1/g,每个group对应对卷积核对维度也相应发生改变为 h1*w1*c1/g,共 c2/g个;每个group相互独立运算,最后将结果叠加在一起。

Group convolution计算方式如下:

Group convolution运算量为:

B = H * W * h1 * w1 * c1/g * c2/g * g

Group卷积相对于传统卷积的运算量为:

\dfrac{B}{A} = \dfrac{ H * W * h1 * w1 * c1/g * c2/g * g}{H * W * h1 * w1 * c1 * c2} = \dfrac{1}{g}

由此可知:group卷积相对于传统卷积减少了 1/g 的参数量。

17.8.2 Depthwise separable convolution

Depthwise separable convolution 是由 depthwise conv 和 pointwise conv构成。

depthwise conv(DW)有效减少参数数量并提升运算速度。但是由于每个feature map 只被一个卷积核卷积,因此经过DW输出的feature map不能只包含输入特征图的全部信息,而且特征之间的信息不能进行交流,导致“信息流通不畅”。

pointwise conv(PW)实现通道特征信息交流,解决DW卷积导致“信息流通不畅”的问题。假设输入特征的维度为 H*W*c1;卷积核的维度为 h1*w1*c1,共c2个;输出特征的维度为 H1*W1*c2。

传统卷积计算方式如下:

传统卷积运算量为:

A = H * W * h1 * w1 * c1 * c2

DW卷积的计算方式如下:

DW卷积运算量为:

B_{DW} = H * W * h1 * w1 * 1 * c1

PW卷积的计算方式如下:

PW卷积运算量为:

B_{PW} = H_m * W_m * 1 * 1 * c_1 * c_2

Depthwise separable convolution运算量为:

B = B_{DW} + B_{PW}

Depthwise separable convolution相对于传统卷积的运算量为:

\dfrac{B}{A} = \dfrac{ H * W * h_1 * w_1 * 1 * c_1 + H_m * W_m * 1 * 1 * c_1 * c_2}{H * W * h1 * w1 * c_1 * c_2}\\= \dfrac{1}{c_2} + \dfrac{1}{h_1 * w_1}

由此可知,随着卷积通道数的增加,Depthwise separable convolution的运算量相对于传统卷积更少。

17.8.3 输入输出的channel相同时,MAC最小

卷积层对输入和输出特征通道数相等时MAC最小,此时模型速度最快。

假设feature map的大小为h*w,输入通道c_1,输出通道c_2

已知:FLOPs = B = h * w * c1 * c2=> c1 * c2 = \dfrac{B}{h * w}

根据均值不等式得到(c1-c2)^2>=0,等式成立的条件是c1=c2,也就是输入特征通道数和输出特征通道数相等时,在给定FLOPs前提下,MAC达到取值的下界。

17.8.4 减少组卷积的数量

过多的group操作会增大MAC,从而使模型速度变慢。

由以上公式可知,group卷积想比与传统的卷积可以降低计算量,提高模型的效率;如果在相同的FLOPs时,group卷积为了满足FLOPs会是使用更多的channels,可以提高模型的精度。但是随着channel数量的增加,也会增加MAC。

FLOPs:B = \dfrac{h * w * c1 * c2}{g}

MAC:MAC = h * w * (c1 + c2) + \dfrac{c1 * c2}{g}

由MAC、FLOPs可知:MAC = h * w * c1 + \dfrac{B*g}{c1} + \dfrac{B}{h * w}

当FLOPs固定(B不变)时,g越大,MAC越大。

17.8.5 减少网络碎片化程度(分支数量)

模型中分支数量越少,模型速度越快。

此结论主要是由实验结果所得。

以下为网络分支数和各分支包含的卷积数目对神经网络速度的影响。

实验中所使用到的基本网络结构,分别将它们重复10次,然后进行实验。实验结果如下:

由实验结果可知,随着网络分支数量多增加,神经网络的速度在降低。网络碎片化程度对GPU的影响效果明显,对CPU不明显,但是网络速度同样在降低。

17.8.7 减少元素级操作

元素级操作所带来对时间消耗也不能忽视。

ReLU、Tensor相加,Bisa相加的操作,分离卷积(depthwise convolution)都定义为元素级操作。

FLOPs大多数都是对于卷积计算而言的,因为元素级操作的FLOPs相对要低很多。但是过多的元素级操作也会带来时间成本。ShuffleNet作者对ShuffleNet v1和MobileNet v2对几种层操作的时间消耗做了分析,发现元素级操作对于网络速度的影响也很大。

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

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

相关文章

【Vue】vue2项目打包后部署刷新404,配置publicPath ./ 不生效问题

Vue Router mode,为 history 无效,建议使用默认值 hash;

C++语言学习(2): name lookup 的概念

何谓 name lookup C 中很重要的一个概念:name lookup。 当编译器在遇到一个 name 的时候, 会做查找(lookup),会把引入这个 name 的声明和它关联起来,具体来说,又包含两种类型的 lookup&#xf…

深蕾半导体Astra™ SL1620详细介绍,嵌入式物联网处理器

一,SL1620是什么 Astra™ SL系列是深蕾半导体推出的高度集成的嵌入式物联网处理器SoC(System on Chip)系列产品,专为多模式消费者、企业和工业物联网工作负载而设计。SL1620是Astra™ SL系列中的一款成本和功耗优化的安全嵌入式So…

数据结构-3.8.栈在括号匹配中的应用

一.括号匹配问题: 1.例一: 把左括号依次压入栈中,越往后压入栈的左括号越先被匹配即被弹出栈->先进后出,后进先出 2.例二: 当遇到左括号就压入栈中,当遇到右括号就把栈顶的左括号弹出,检查…

计算机毕业设计 基于协同过滤算法的个性化音乐推荐系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

Linux系统命令:用于改变用户的登录 Shell 的命令chsh命令详解

目录 一、概述 二、用法 1、基本用法 2、常用选项 3、获取帮助 三、示例 1. 更改当前用户的登录 Shell 2. 更改其他用户的登录 Shell 3、列出所有可用的 shell 四、 注意事项 1、已经安装好 2、权限 3、密码验证 4、shell 路径 5、生效时间 五、示例输出 一、概…

mfc140u.dll缺失?快速解决方法全解析,解决mfc140u.dll错误

当你的电脑出现找不到mfc140u.dll的问题,不少用户在使用电脑时陷入了困扰。这个错误提示就像一道屏障,阻挡了用户正常使用某些软件。无论是办公软件、游戏还是专业的设计工具,一旦出现这个问题,都会导致软件无法正常运行。如果您也…

复数表示的电场

Exm加是复振幅,这是用复数表示电场,并提取只与空间有关的项复振幅就是复数表示电场,且把与空间xyz有关的量提取出来 经过验证实数E0cos(wtδx)对t求导,等于E0e^j(wtδx)对t求导再取实部 实数表示电磁波cos…

Windows11系统下SkyWalking环境搭建教程

目录 前言SkyWalking简介SkyWalking下载Agent监控实现启动配置SkyWalking启动Java应用程序启动Elasticsearch安装总结 前言 本文为博主在项目环境搭建时记录的SkyWalking安装流程,希望对大家能够有所帮助,不足之处欢迎批评指正🤝&#x1f91…

openpnp - 底部相机高级校正的参数设置

文章目录 openpnp - 底部相机高级校正的参数设置概述笔记修改 “Radial Lines Per Calibration Z” 的方法不同 “Radial Lines Per Calibration Z”的校验结果不同 “Radial Lines Per Calibration Z”的设备校验动作的比较总结备注END openpnp - 底部相机高级校正的参数设置 …

5G NR物理信道简介

文章目录 NR 上行物理信道PRACHPUCCHPUSCH NR 下行物理信道PBCHPDCCHPDSCH NR 上行物理信道 PRACH PRACH(Physical Random Access Channel)物理随机接入信道,用于传导preamble 序列。PRACH 由循环前缀CP、前导序列和保护间隔三部分组成。 PUCCH PUCCH…

相互作用的检索增强 3D 分子生成扩散模型 - IRDiff 评测

IRDiff 是一个全新的基于蛋白质-配体相互作用的检索增强 3D 分子扩散模型,可以生成目标感知的分子。IRDiff 利用一组设计好的参考配体分子来引导扩散模型生成满足目标特性的分子。 一、背景介绍 IRDiff 来源于清华大学深圳国际研究生院的杨文明教授和鹏城实验室的王…

通信工程学习:什么是POP3邮局协议版本3

POP3:邮局协议版本3 POP3(Post Office Protocol - Version 3),即邮局协议版本3,是TCP/IP协议族中的一员,由RFC1939定义。它是一种用于电子邮件接收的协议,主要规定了个人计算机如何连接到互联网…

OpenCV C++ 图像处理实战 ——《基于轮廓比对的缺陷检测》

OpenCV C++ 图像处理实战 ——《基于轮廓比对的缺陷检测》 一、结果演示二、图像预处理三、基于轮廓比对的缺陷检测3.1 计算平移分量3.2 计算旋转角度3.3 缺陷检测3.4 缺陷绘制四、源码测试图像下载总结一、结果演示 二、图像预处理 本文主要是基于轮廓匹配进行缺陷识别,最主…

STM32F103C8T6的平衡小车设计(基于FreeRTOS框架)

github主页:https://github.com/snqx-lqh gitee主页:https://gitee.com/snqx-lqh 本项目github地址:https://github.com/snqx-lqh/Stm32BalanceCar 本项目gitee地址:https://gitee.com/snqx-lqh/stm32-balance-car 欢迎交流 项目介…

leetcode:380. O(1) 时间插入、删除和获取随机元素

实现RandomizedSet 类: RandomizedSet() 初始化 RandomizedSet 对象bool insert(int val) 当元素 val 不存在时,向集合中插入该项,并返回 true ;否则,返回 false 。bool remove(int val) 当元素 val 存在时&#xff0…

开发者在AIGC浪潮中的定位与策略

人工智能时代,程序员如何保持核心竞争力? 随着AIGC(如chatgpt、midjourney、claude等)大语言模型接二连三的涌现,AI辅助编程工具日益普及,程序员的工作方式正在发生深刻变革。有人担心AI可能取代部分编程工…

Python FFmpeg 安装使用教程

文章目录 什么是 FFmpeg?主要功能包括: Windows 下载安装下载解压安装配置环境变量 使用案例使用 ffmpeg-python 库转换视频格式视频剪辑添加字幕 使用 subprocess.run 执行视频格式转换 其它问题ffmpeg 不是内部或外部命令,也不是可运行的程序 个人简介…

【深度学习】反向传播-过程举例

深度学习中,一般的参数更新方式都是梯度下降法,在使用梯度下降法时,涉及到梯度反向传播的过程,那么在反向传播过程中梯度到底是怎么传递的?结合自己最近的一点理解,下面举个例子简单说明! 一、…