模型压缩-对模型结构进行优化
模型压缩-对模型结构进行优化
概述
- 模型压缩通常都是对推断过程而言,训练过程的计算代价通常不考虑,因为GPU可以快速完成任意复杂度模型的训练
- 对于推断过程来说,模型应用才是对于速度敏感的场景
- 多数情况下 希望使用尽可能少的能耗完成京可能多的数据处理
- 推断过程不仅仅需要在CPU设备上完成测试,还需要再低功耗设备完成推断
卷积结构基础优化-空洞卷积
- 增大感受野,增大感受野基本方式就是增大卷积核大小
- 增大卷积核大小会增大训练参数 拖慢计算
- 使用空洞卷积进行优化
- 空洞卷积将卷积可训练参数之间添加多个1
- 二维空洞卷积的核心形式就是再普通空洞卷积核心的横向纵向都添加1
- pytorch中再conv添加dilation参数 默认为1
https://blog.csdn.net/mrjkzhangma/article/details/104929302
- 关于常规卷积

- 关于空洞卷积

- 空洞卷积计算:扩张率D,那么就在横纵方向添加D -1 行

增大感受野的原因
- 下采样过程中大量池化操作,损失一些信息,再解码重建过程中产生影响
关于分组卷积
- 将输入特征图按照通道均分为g组,然后对每一组进行常规卷积
- 由于分组之后,每一组输入特征图的通道数变成Cin / g,那么每一个卷积核的通道数也降低到Cin / g
- 由于每一组进行的是常规卷积,所以每一组至少需要一个卷积核,也就是分组卷积输出通道数至少为g,那么如果每一组有n个卷积核 输出Cout = n x g, 所以输出通道数是分组数的整数倍
- 分组卷积中要求输入和输出通道数均能整除分组数g
- 分组卷积的运算量和参数量的减少,本质原因就是一个卷积核本身通道数减少为原来的g分之一
- 整个分组卷积的参数量:

分组卷积的作用
- 减少运算量和参数,原来的1/g
- 隔绝不同组的信息交换
- 如果需要考虑所有输入特征图信息的情况,分组卷积会降低模型的性能,对于这个问题,需要在两个分组卷积之间加入Channel_Shuffle模块打乱通道顺序,从而实现不同分组之间的信息交换
关于分组卷积
import torch
import torch.nn as nn# batch 5 channel 128 大小 28 x 28
x = torch.zeros([5,128,28,28])cnn = nn.Conv2d(128,256,3,groups=2)# 计算cnn 的参数数量 只有一层卷积
# 第一个参数是权重 torch.Size([256, 64, 3, 3])
# 因为分为两组 每一组输入特征图的通道数变成64,然后每一个卷积核的通道数 也是64
# 3 x 3 卷积核 输出256 输入64 总共256个卷积核个数
for var in cnn.parameters():print(var.shape)# cnn = nn.Conv1d(128,256,3,groups=2)
# for var in cnn.parameters():
# print(var.shape)
from torchvision.models import resnet50,mobilenet_v2
import torch
import timemodel1 = resnet50()
model2 = mobilenet_v2() # 卷积速度优化# 输入1 输出3 大小 224 x 224
x = torch.randn([1,3,224,224],dtype=torch.float32)# 进行十次推理测试 每一次测试都测量模型推理时间 然后打印结果
for i in range(10):t1 = time.perf_counter()y = model2(x)t2 = time.perf_counter()# 计算推理时间 进行十次推理 发现每一次推理的时间都减小print(f"{t2-t1:.3f}")torch.save(model1.state_dict(),"resnet.pth")# 使用torch.save 保存模型的权重参数 然后以后可以加载这些模型权重 然后重用
torch.save(model2.state_dict(),"mobilenetv2.pth")
关于深度可分离卷积
import torch
import torch.nn as nn
import time# 产生随机测试数据
x = torch.randn([32,64,300,300])
# 定义卷积网络# 逐层卷积 g = Cin = Cout 卷积核大小 3 x 3
cnn1 = nn.Conv2d(64,64,3,groups=64)# 逐点卷积
cnn2 = nn.Conv2d(64,128,1,groups=1)cnn1.eval() # 推断模型
cnn2.eval() for i in range(10):t1 = time.perf_counter()x = cnn1(x)y = cnn2(x)t2 = time.perf_counter()print(f"{t2 - t1:.3f}")相关文章:
模型压缩-对模型结构进行优化
模型压缩-对模型结构进行优化 概述 模型压缩通常都是对推断过程而言,训练过程的计算代价通常不考虑,因为GPU可以快速完成任意复杂度模型的训练对于推断过程来说,模型应用才是对于速度敏感的场景多数情况下 希望使用尽可能少的能耗完成京可能…...
软件工程课件
软件工程 考点概述软件工程概述能力成度模型能力成熟度模型集成软件过程模型逆向工程 考点概述 重点章节 软件工程概述 之前老版教程的,之前考过 能力成度模型 记忆 能力等级 和 特点 能力…...
基于ADS的marx雪崩电路设计-设计实践(射频脉冲源)
基于ADS的marx雪崩电路设计-设计实践(射频脉冲源) 设计一个ns级别的脉冲源,属于是半路转行的,虽然不了解具体原理但是也可以进行设计。具体的设计理论以及优化方法将在之后进行讨论. 参考文献:基于Marx电路的亚纳秒级…...
X86_64函数调用汇编程序分析
X86_64函数调用汇编程序分析 1 X86_64寄存器使用标准2 对应代码的分析2.1 main函数及其对应的汇编程序2.1.1 main的C代码实现2.1.2 main函数对应汇编及其分析2.1.3 执行完成之后栈的存放情况 2.2 test_fun_a函数及其对应的汇编程序2.2.1 test_fun_a函数的C实现2.2.2 test_fun_a…...
Vue3【Provide/Inject】
前言 自从使用了Provide/Inject代码的组织方式更加灵活了,但是这个灵活性的增加伴随着代码容错性的降低。我相信只要是真的在项目中引入Provide/Inject的同学,一定一定有过或者正在经历下面的状况: 注入名(Injection key&#x…...
Go-Python-Java-C-LeetCode高分解法-第四周合集
前言 本题解Go语言部分基于 LeetCode-Go 其他部分基于本人实践学习 个人题解GitHub连接:LeetCode-Go-Python-Java-C Go-Python-Java-C-LeetCode高分解法-第一周合集 Go-Python-Java-C-LeetCode高分解法-第二周合集 Go-Python-Java-C-LeetCode高分解法-第三周合集 本…...
vue路由
一、声明式导航-导航链接 1.需求 实现导航高亮效果 如果使用a标签进行跳转的话,需要给当前跳转的导航加样式,同时要移除上一个a标签的样式,太麻烦!!! 2.解决方案 vue-router 提供了一个全局组件 router…...
最强的AI视频去码图片修复模型:CodeFormer
目录 1 CodeFormer介绍 1.1 CodeFormer解决的问题 1.2 人脸复原的挑战 1.3 方法动机 1.4 模型实现 1.5 实验结果 2 CodeFormer部署与运行 2.1 conda环境安装 2.2 运行环境构建 2.3 模型下载 2.4 运行 2.4.1 人脸复原 编辑编辑 2.4.2 全图片增强 2.4.3 人脸颜色…...
jenkins自动化部署安装
一、准备工作 1、安装jdk # 1、下载准备jdk包(也可以用docker安装) wget ... # 2、直接解压到,无需安装 unzip ...2、安装maven # 1、下载准备maven压缩包 wget ... # 2、直接解压,无需安装 unzip ... # 3、修改setting.xml,修改localRepository和MIRROR镜像地址…...
如何调用Zabbix API获取主机信息
自Zabbix 1.8版本被引进以后,Zabbix API开始扮演着越来越重要的角色,它可以为批量操作、第三方软件集成以及其他应用提供可编程接口。 在运维实践中,Zabbix API还有更多巧妙的应用。 面对规模庞大的监控设备,可能会出现某台机器发…...
批量执行redis命令总结
目录 批量执行redis命令方式1: redis-cli直接执行方式2:通过redis-cli和xargs等命令 批量执行redis命令 方式1: redis-cli直接执行 redis-cli command param redis-cli本身支持单个命令执行省略了连接参数操作的key等相关数据,可以通过线下获取或通过keys scan等命…...
命令行git联网失败,但是实际可以联网
最近下载代码的时候发现总是告诉我连不上github的网页,但是我自己通过浏览器又可以上网,找了半天发现这个方法可以。 记录下这个代理 打开git bash 执行以下命令: git config --global http.proxy http://127.0.0.1:7890 git config --glob…...
网络编程套接字,Linux下实现echo服务器和客户端
目录 1、一些网络中的名词 1.1 IP地址 1.2 端口号port 1.3 "端口号" 和 "进程ID" 1.4 初始TCP协议 1.5 UDP协议 2、socket编程接口 2.1 socket 常见API 2.2 sockaddr结构 3、简单的网络程序 3.1 udp实现echo服务器和客户端 3.1.1 echo服务器实…...
java+ssh+mysql智能化办公管理系统
项目介绍: 本系统为基于jspsshmysql的OA智能办公管理系统,包含管理员、领导、员工角色,功能如下: 管理员:公告信息;工作计划;公司资料;部门管理;员工管理;员…...
网络层抓包tcpdump
sudo tcpdump -i eth0 -s 0 -nn host iphost -w xxx.pcap 这段代码使用了命令行工具 tcpdump,用于在Linux系统上捕获网络数据包。让我详细介绍一下这段代码的含义和 tcpdump 的用法: 代码含义: sudo: 使用超级用户权限执行 tcpdump 命令&am…...
QT之形态学操作
形态学操作包含以下操作: 腐蚀 (Erosion)膨胀 (Dilation)开运算 (Opening)闭运算 (Closing)形态梯度 (Morphological Gradient)顶帽 (Top Hat)黑帽(Black Hat) 其中腐蚀和膨胀操作是最基本的操作,其他操作由这两个操作变换而来。 腐蚀 用一个结构元素…...
15、监测数据采集物联网应用开发步骤(11)
源码将于最后一遍文章给出下载 监测数据采集物联网应用开发步骤(10) 程序自动更新开发 前面章节写了部分功能模块开发: 日志或文本文件读写开发;Sqlite3数据库读写操作开发;定时器插件化开发;串口(COM)通讯开发;TCP/IP Client开发;TCP/IP Server 开发;modbus协议…...
Pygame中Trivia游戏解析6-2
3.1.2 读取保存题目的文件 在Trivia类的__init__()方法中,对各变量初始化完成之后,读取保存题目的文件,代码如下所示。 f open(filename, "r", encodingutf8) trivia_data f.readlines() f.close() 其中,open()函数…...
java 实现命令行模式
命令模式是一种行为设计模式,它允许您将请求封装为对象,以便您可以将其参数化、队列化、记录和撤销。在 Java 中实现命令模式涉及创建一个命令接口,具体命令类,以及一个接收者类,该接收者类执行实际操作。下面是一个简…...
A - Orac and Models(最长上升子序列——加强版)
There are nn models in the shop numbered from 11 to nn, with sizes s_1, s_2, \ldots, s_ns1,s2,…,sn. Orac will buy some of the models and will arrange them in the order of increasing numbers (i.e. indices, but not sizes). Orac thinks that the obtai…...
Flink的反压机制
目录 1. 什么是反压? 2. Flink 反压机制的演变 第一代:基于 TCP 的传播(Flink 1.5 之前) 第二代:基于信用制的反压(Flink 1.5+,当前版本) 3. 基于信用制的反压详解 核心组件 工作流程(对应上图) 优势 4. 如何识别和处理反压? 识别(通过 Flink Web UI) …...
OpenClaw+Qwen3-14b_int4_awq:跨平台文件同步助手
OpenClawQwen3-14b_int4_awq:跨平台文件同步助手 1. 为什么需要智能文件同步 上周我差点犯了个职场大错——把包含客户联系方式的Excel表格同步到了公共网盘。这件事让我意识到:传统的文件同步工具就像个"搬运工",它分不清哪些文…...
10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南
10分钟零成本搭建KIMI AI免费API:个人智能助手完整指南 【免费下载链接】kimi-free-api 🚀 KIMI AI 长文本大模型逆向API【特长:长文本解读整理】,支持高速流式输出、智能体对话、联网搜索、探索版、K1思考模型、长文档解读、图像…...
成本控制艺术:OpenClaw+Phi-3-vision-128k-instruct任务级计费方案
成本控制艺术:OpenClawPhi-3-vision-128k-instruct任务级计费方案 1. 当Token消耗成为拦路虎 上个月收到账单时,我的手指在鼠标滚轮上停滞了整整三秒——Phi-3-vision-128k-instruct的API调用费用比预期高出47%。这个数字让我意识到,在享受…...
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案
WebPlotDigitizer完全指南:从图表图像提取数据的终极解决方案 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...
别再只盯着LSB了:用Python实战对比空间域与DCT/DWT变换域水印的鲁棒性
别再只盯着LSB了:用Python实战对比空间域与DCT/DWT变换域水印的鲁棒性 数字水印技术作为信息隐藏领域的重要分支,其核心挑战始终是如何在不可见性与抗攻击能力之间找到最佳平衡点。传统教材和理论课程往往将LSB(最低有效位)算法作…...
时序数据库选型避坑指南:从写入性能到查询优化的5个关键指标对比(含IoTDB实测数据)
时序数据库选型实战:5个关键指标与IoTDB性能深度评测 当工业互联网平台每秒需要处理百万级传感器数据时,传统数据库的写入瓶颈往往成为系统崩溃的导火索。某汽车制造厂的案例颇具代表性——他们在初期选型时过度关注查询功能,结果系统上线后频…...
别再死记硬背了!从硬件电路角度,图解I2C为什么必须用开漏输出和上拉电阻
从晶体管到总线协议:深度解析I2C硬件设计精髓 在嵌入式系统设计中,I2C总线因其简洁的两线制架构而广受欢迎,但许多开发者对其底层硬件实现机制存在理解盲区。当你在调试I2C设备时,是否遇到过信号波形畸变、总线冲突或电平异常的问…...
LinkSwift:重新定义网盘下载体验的八大平台直链解析工具
LinkSwift:重新定义网盘下载体验的八大平台直链解析工具 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...
实在Agent适合什么规模的企业使用?深度解析企业级AI Agent适配逻辑与落地边界
随着2026年企业数字化转型进入深水区,AI Agent(人工智能体)已不再仅仅是实验室里的原型,而是演变为推动企业智能自动化的核心引擎。在当前“大模型落地”的浪潮下,许多企业管理者都在思考一个核心问题:像实…...
