模型压缩-对模型结构进行优化

模型压缩-对模型结构进行优化

概述

  • 模型压缩通常都是对推断过程而言,训练过程的计算代价通常不考虑,因为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}")

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot——整合Mongodb

简单介绍 Mongdb是一个开源,高性能,无模式的文档型数据库,NoSQL数据库产品中的一种,是最像关系型数据库的非关系型数据库。 使用场景 用户数据 存储位置:数据库特征:永久性存储,修改频率极低游…

蠕虫病毒流量分析案例

背景 某供排水集团的网络管理员对其网络的健康状况持认可态度,表示网络运行正常,没有发现异常行为。然而,由于网络环境变得越来越复杂,仅凭借传统的网络经验已经不能全面了解网络情况。因此,我们为供排水集团安装了Ne…

【实训】“宅急送”订餐管理系统(程序设计综合能力实训)

👀樊梓慕:个人主页 🎥个人专栏:《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》 🌝每一个不曾起舞的日子,都是对生命的辜负 前言 大一小学期,我迎来了人生中的第一次实训…

LNMP架构搭建论坛

目录 一、LNMP简介: 二、LNMP搭建: 1.前提准备: 关闭防火墙和安全机制: 2.编译安装nginx: 3.编译安装mysql: 3.1 安装依赖环境: 3.2 创建mysql运行用户: 3.3 编译安装&#xff1a…

神经网络与强化学习:揭示AI的超能力

文章目录 神经网络:模拟人脑的工具强化学习:通过试错学习结合神经网络和强化学习价值网络策略网络结合训练 应用领域游戏机器人控制金融交易 未来趋势自动化和自主系统个性化和自适应系统跨学科研究 结论 🎉欢迎来到AIGC人工智能专栏~神经网络…

msvcp110.dll是什么意思与msvcp110.dll丢失的解决方法

电脑突然提示msvcp110.dll丢失,无法执行此代码。导致软件无法打开运行,这个怎么办呢?我在网上找了一天的资料,终于把这个问题彻底处理好,也弄清楚了msvcp110.dll丢失的原因及msvcp110.dll丢失修复方法?现在…

LDAP服务器如何重启

1、find / -name ldap 该命令只会从根路径下查看ldap文件夹 find / -name ldap2、该命令会从根路径/查看所有包含ldap路径的文件夹,会查询出所有,相当于全局查询 find / -name *ldap*2、启动OpenLADP 找到LDAP安装目录后,执行以下命令 #直…

pytorch搭建squeezenet网络的整套工程,及其转tensorrt进行cuda加速

本来,前辈们用caffe搭建了一个squeezenet的工程,用起来也还行,但考虑到caffe的停更后续转trt应用在工程上时可能会有版本的问题所以搭建了一个pytorch版本的。 以下的环境搭建不再细说,主要就是pyorch,其余的需要什么p…

ABAP BAPI_ACC_DOCUMENT_POST 中 EXTENSION1的用法

BAPI_ACC_DOCUMENT_POST 在过账会计凭证时候,经常会发现一些标准字段在参数中并没有 可以通过CMOD/SMOD增强出口--》ACBAPI01--》EXIT_SAPLACC4_001--》ZXACCU15 示例代码: DATA: wa_extension TYPE bapiextc,it_extension TYPE STANDARD TABLE OF ba…

OpenCV(二十一):椒盐噪声和高斯噪声的产生

目录 1.图像噪声介绍 2.椒盐噪声的产生 3.高斯噪声的产生 1.图像噪声介绍 噪声介绍 图像噪声是指在图像中存在的不期望的、随机的像素值变化,这些变化来源于多种因素。噪声可能导致图像细节模糊、失真或难以分辨。 以下是几种常见的图像噪声类型: 1…

javascritp如何判断是从刷新(重新加载)、正常打开(或链接打开)、还是从浏览器回退进入页面的

重点先下另外一个知识点: 当我们的Web站点采用主体页面的iframe导航各个子页面(浏览器地址保持不变)的情况,如果我们希望每次iframe中打开的新的子页面,也都能够像在不采用iframe的情况那样,后续能够在浏览…

Tailwind 练手项目

Tailwind 练手项目 用到的技巧 Tailwind CSS 速成 应该都提过了,我不记得这里有什么特别新的知识 整体完成图大概这样: 一个纯静态页面,没有做 JS 之类的特效,不过做了移动端适配,说实话我写到一半的时候改了不少………

易云维®医院后勤管理系统软件利用物联网智能网关帮助实现医院设备实现智能化、信息化管理

近年来,我国医院逐渐意识到医院设备信息化管理的重要性,逐步建立医院后勤管理系统软件,以提高信息化管理水平。该系统是利用数据库技术,为医院的中央空调、洁净空调、电梯、锅炉、医疗设备等建立电子档案,把设备监控、…

mysql 安全加固

PS:之前在做安全测试的时候,报告mysql有安全漏洞,于是研究了下如何修复,于是记录下来分享给大家 1.1修改mysql 存放位置 修复 1.停服务 service mysqld stop2.迁位置 2.1 新建迁移目录 mkdir /home/database2.2 迁移数据文件…

【业务功能篇96】微服务-springcloud-springboot-认证服务-登录注册功能-Auth2.0-分布式session

5.登录功能 通过最基础的登录操作来完成登录处理 登录页面处理 认证服务的处理 /*** 注册的方法* return*/PostMapping("/login")public String login(LoginVo loginVo , RedirectAttributes redirectAttributes){R r memberFeginService.login(loginVo);if(r.getC…

数据结构:线性表之-单向链表(无头)

目录 什么是单向链表 顺序表和链表的区别和联系 顺序表: 链表: 链表表示(单项)和实现 1.1 链表的概念及结构 1.2单链表(无头)的实现 所用文件 将有以下功能: 链表定义 创建新链表元素 尾插 头插 尾删 头删 查找-给一个节点的…

(二十二)大数据实战——Flume数据采集之故障转移案例实战

前言 本节内容我们完成Flume数据采集的故障转移案例,使用三台服务器,一台服务器负责采集nc数据,通过使用failover模式的Sink处理器完成监控数据的故障转移,使用Avro的方式完成flume之间采集数据的传输。整体架构如下:…

OpenCV 01(图像加载与显示)

一、机器视觉 现在说的机器视觉(Machine Vision)一般指计算机视觉(Computer Vision), 简单来说就是研究如何使机器看懂东西。就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传…

VS编译.cu文件源文件无法打开matrix.h和mex.h问题

配置好cu和VS相关库文件后CUDA程序仍然报错:无法打开matrix.h和mex.h,解决办法: (1)这两个头文件是matlab中的,可能无法直接在VS中调用,可以通过添加外部依赖项的方法将matlab中的头文件的文件路…

1600*C. Maximum Set

解析: 尽可能的增大集合内的数,所以倍数要尽可能的小,所以让最小的数不断乘 2,即可找到最大的数量。 所以,每次计算 k log2( y / x ),这样可得出最小的 x,乘多少个 2,能…