模型剪枝:Network Slimming剪枝实战

news2025/2/12 7:54:58

本文来自公众号“AI大道理”

Network Slimming剪枝是比较广泛的一种模型剪枝方法,作者来自清华大学、英特尔中国实验室、复旦大学和科内尔大学。

1、Network Slimming剪枝理论

Network Slimming剪枝是结构性剪枝,是通道剪枝,是静态剪枝。

Network Slimming利用了BN层中的缩放因子γ来控制通道的重要性。

BN层:

BN层是归一化操作,将数据归一化到均值为0,方差为1上,防止数值逐步变大,不利于神经网络的训练。

通常插入在卷积和全连接之后,在非线性处理前。

若都是线性的,神经网络将失去意义。

因此,需要在BN后再次进行变换,以提供一定的非线性。

BN引入了两个可训练的参数γ和β。

随着𝛾更新, 约束项会将𝛾拉向0,从而判断这个通道不重要,进行剪枝。

(灵魂的拷问:γ参数控制着谁的通道?通道剪枝是剪枝谁的通道?是特征图的通道,还是卷积核的通道?)

答:先卷积,再BN,是对特征图里面的数据进行求均值,方差。

γZ依然在控制特征图的数据,根据γ判断通道重要性,是控制特征图的通道。

是对特征图的通道进行剪枝。

将缩放因子(参数γ)与卷积层中的每个通道相关联。

在训练期间对这些缩放因子施加稀疏正则化,以自动识别不重要的通道。

具有较小缩放因子值的通道将被剪枝。

剪枝后,获得紧凑模型,然后对其进行微调以达到与正常训练的网络相当(甚至更高)的精度。

稀疏训练后,剪掉一个BN层,需要将对应上一层的卷积核裁剪掉,同时将BN层后下一层卷积核对应的通道减掉。

γ越小,对应的通道越不重要。

(灵魂的拷问:L1为什么能达到稀疏正则化的效果?)

L1正则化:

L1范数:

即向量元素绝对值之和,x 到零点的曼哈顿距离。

L1范数就是所有元素绝对值的和。

把L1范数相同的点组和在一起就是一个正方形。

添加L1正则化的损失函数为:

其中,后面这项就是L1范数,也就是原来损失函数的惩罚项。

所谓惩罚项,其实就是和原来的损失函数竞争,现在要满足两者的最小值才是真正的最小值。

其中,L1正则化项的损失函数是一个个正方形,而原来的损失函数是一个个椭圆,只有两者的交点才使得整体损失最小。

这样就会产生很多0值,达到稀疏化的效果。

2、模型剪枝流程

1)正常训练

从头开始训练网络作为基线。

2) 稀疏训练

使用L1稀疏正则化进行训练时,控制经验损失和稀疏性之间的折中的超参数  。

3) 剪枝

需要确定比例因子的修剪阈值。使用全局修剪阈值。修剪阈值由所有比例因子中的百分比来确定,例如,40%或 60%的通道被修剪。通过建立一个新的更窄的模型并从用稀疏度训练的模型中复制相应的权重来训练。

4)微调

修剪后,获得了一个更窄、更紧凑的模型,然后对其进行微调。

3、Network Slimming剪枝实战

为了加速运算,我们通常将BN层和卷积层融合起来。

现在为了能够控制通道的重要性,Network Slimming在训练的时候BN层不能融合起来训练,而应该拆开。

yolov5会通过model.fuse()将卷积层和bn层融合。

为了对bn层剪枝,训练和保存的时候先不要做融合。

剪枝实战:

1)正常训练

YOLOv5s的常规训练,训练100epoch作为基准。

缩放因子分布的变化:

训练结果与指标:

last.pt大小为14.4MB(16位的浮点数)。

2) 稀疏训练

YOLOv5s的稀疏训练,训练100epoch。

缩放因子分布的变化:

训练结果与指标:

last.pt :14.4MB(16位的浮点数)。

可以看到bn训练中缩放因子分布的变化,随着训练(纵轴从上往下)进行,直方图逼近0附近,说明大多数bn已经变得稀疏。

稀疏训练之后模型指标在下降。

3) 剪枝

剪枝率0.5。

剪枝后的网络情况:

可见通道数的确在变少。

剪枝后会生成pruned_model.pt模型,大小27.1MB(32位浮点)

original_model.pt->pruned_model.pt(32位浮点)

4)微调

funetuned.pt :   6.14MB(16位的浮点数)

可见经过微调后,精度和召回率等指标又上升了一点,逼近未剪枝之前的指标。

4、Network Slimming剪枝效果评估

网络变化:

通道变少。

模型大小变化:

减小了57.4%

速度变化:

变快了27.8%

5、总结

Network Slimming剪枝是结构性剪枝,是通道剪枝,是静态剪枝。

Network Slimming利用了BN层中的缩放因子γ来控制通道的重要性。

Network Slimming剪枝后模型通道变少,模型大小变小,推理速度变快。

 ——————

浅谈则止,细致入微AI大道理

扫描下方“AI大道理”,选择“关注”公众号

—————————————————————

 

—————————————————————

投稿吧   | 留言吧

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

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

相关文章

mac安装hive_20230609

竟然是今年第一篇 hhhh 过两天把上半年的东西梳理好的话 陆续放上来吧~ 公司本地测试环境的hive版本不支持不等式关联操作,而现在用hive也比较多,所以在本地装了一个hive,主要写一下大致步骤和过程中遇到的问题~&#…

win10任务栏卡死解决

现象: win10 更新后,开机任务栏卡死,点开始反应,设置页面无法打开。 原因: 原因是Win10更新的任务栏资讯和兴趣,而资讯和兴趣是Edge浏览器的,该服务器是在国外,国内的网络加载不出来…

【lvs集群】HAProxy搭建Web集群

HAProxy搭建Web集群 一、 HAProxy简介1.1HAProxy主要特性1.2HAProxy负载均衡策略非常多,常见的有如下8种1.3LVS、Nginx、HAproxy的区别1.4常见的Web集群调度器 二、Haproxy搭建 Web 群集haproxy服务器部署节点服务器部署 三、定义监控页面与定义日志3.1定义监控页面…

stm32f103最小系统板详细介绍

一.什么是单片机最小系统 常见的单片机最小系统为单片机能独立运行程序及控制外围电路的最简单电路,主要由单片机、晶振电路、复位电路三部分构成。Stm32f103c8t6也不例外,构成最小的运行电路也需要以上三部分。 Stm32f103最小系统板原理图如下&#xf…

初始Sentinel(Sentinel的简单介绍及项目整合)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将详细介绍Sentinel的概念,优点,与Hystrix的对比以及微服务中整合Sentinel,后续文章将详细介绍Sentinel的细节部分。 如果文章…

分享几个关于AI的网站

分享几个关于AI的网站 AI文本 ChatGPT:https://chat.openai.com/ NotionAI:https://www.notion.so/product/ai A.I. Data Sidekick:AI工具编写 SQL、文档等的速度提高10倍https://www.airops.com/ Writesonic:人工智能写作辅助工…

CSS基础学习--7 fonts字体

一、CSS 字体 CSS字体属性定义字体系列,加粗,大小,文字样式。 二、字体系列 font-family 属性设置文本的字体系列 font-family 属性应该设置几个字体名称作为一种"后备"机制,如果浏览器不支持第一种字体,…

Haproxy的应用

Taproxy 一、Haproxy的原理Haproxy的主要特性Haproxy八种负载均衡策略LVS、Nginx、Haproxy的区别 二、搭建web群集 一、Haproxy的原理 Haproxy是可提供高可用性,负载均衡以及基于TCP和HTTP应用的代理,是免费、快速并且可靠的一种解决方案。Haproxy非常适…

电脑提示vcruntime140_1.dll丢失怎么修复?

本修复教程操作系统:Windows系统 vcruntime140_1.dll是电脑文件中的dll文件(动态链接库文件)。如果计算机中丢失了某个dll文件,可能会导致某些软件和游戏等程序无法正常启动运行,并且导致电脑系统弹窗报错。 在我们打…

FPGA基础知识-模块和端口

目录 学习目标 学习内容 端口 端口列表 端口声明 端口链接规则 学习时间 总结 学习目标: 1.说明Verilog 模块定义中的各个组成部分,例如模块名、端口列表、参数、变址声明、数据流描述语句、行为语句、调用(实例引用》其他模块以及任务…

Java网络开发(Filter过滤器)—— tomcat的过滤器 编码控制 + 网页权限控制

目录 引出1.过滤器简介2.用过滤器实现全局编码控制(1)导包import javax.servlet.*;(2)如果是tomcat8.5,要把3个方法都实现(3)代码如下,要点:放行,chain.doFil…

Bug小能手系列(python)_7: BertTokenizer报错 Connection reset by peer

ConnectionResetError: [Errno 104] Connection reset by peer 0. 错误介绍1. 解决思路1.1 添加代码 force_downloadTrue1.2 删除缓存1.3 科学上网1.4 线下下载 2. 解决方法2.1 清除缓存2.2 线下下载模型(强烈建议) 3. 总结 0. 错误介绍 当使用transfor…

4.将图神经网络应用于大规模图数据(Cluster-GCN)

到目前为止,我们已经为节点分类任务单独以全批方式训练了图神经网络。特别是,这意味着每个节点的隐藏表示都是并行计算的,并且可以在下一层中重复使用。 然而,一旦我们想在更大的图上操作,由于内存消耗爆炸&#xff0c…

【Python 生成器与迭代器】零基础也能轻松掌握的学习路线与参考资料

一、Python生成器与迭代器概述 Python是一种高级编程语言,其中非常重要的概念就是生成器和迭代器。Python生成器和迭代器联合使用,能够实现高效的迭代操作,避免增加额外的内存消耗,同时提高代码的可读性。Python中常见的生成器和…

单机多节点 elasticsearch 集群安全认证

es 版本:7.6.2 部署环境:CentOS Linux release 7.6.1810 (Core) 一:生成 ca 证书 cd 到 es 的安装目录,并执行下面的命令来生成 ca 证书: ./bin/elasticsearch-certutil ca Elasticsearch碰到第一个直接回车&#xf…

面试专题:Mysql

1.说说自己对于 MySQL 常见的两种存储引擎:MyISAM与InnoDB的理解 关于二者的对比与总结: 1.count运算上的区别:因为MyISAM缓存有表meta-data(行数等),因此在做COUNT(*)时对于一个结构很好的查询是不需要消耗多少资源的…

[CKA]考试之K8s 版本升级

由于最新的CKA考试改版,不允许存储书签,本博客致力怎么一步步从官网把答案找到,如何修改把题做对,下面开始我们的 CKA之旅 题目为: Task 现有的Kubernetes 集群正在运行版本1.22.0。仅将master节点上的所有 Kuberne…

【Python】集合 set ② ( 集合常用操作 | 集合中添加元素 | 集合中移除元素 | 集合中随机取出元素 )

文章目录 一、集合中添加元素二、集合中移除元素三、集合中随机取出元素 在 Python 中 , 集合 set 是无序的 , 因此 集合 数据容器 不支持 使用 下标索引 访问 集合元素 ; 一、集合中添加元素 调用 集合#add(新元素) 函数 , 可以将新元素添加到 集合 数据容器中 ; 集合添加元素…

Vue- ref属性

ref属性 被用来给元素或者子组件注册引用信息(id的替代者) 通过案例来演示_ref属性 1 编写案例 如图:有一个按钮,点击按钮可以输出dom元素 备注:虽然vue不用我们亲自操作dom,但是有的特殊的情况下就要…

【2023华中杯】B题 小学教学应用题 相似性度量及难度评估 29页论文及MATLAB代码

1 题目 B 题 小学数学应用题相似性度量及难度评估 某 MOOC 在线教育平台希望能够进行个性化教学,实现用户自主学习。在用户学习时,系统从题库中随机抽取若干道与例题同步的随堂测试题,记录、分析学生的学习和答题信息,并且课后会自…