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

深度学习-模型转换_所需算力相关

模型转换相关

tensflow转onnx

python -m tf2onnx.convert  \--graphdef /root/autodl-tmp/warren/text-detection-ctpn/data/ctpn.pb  \--output ./model.onnx  --inputs Placeholder:0 --outputs Reshape_2:0,rpn_bbox_pred/Reshape_1:0

pytorch转onnx

#!/usr/bin/env python3import torchfrom simple_net import SimpleModel# Load the pretrained model and export it as onnxmodel = SimpleModel()model.eval()checkpoint = torch.load("weight.pth", map_location="cpu")model.load_state_dict(checkpoint)# Prepare input tensorinput = torch.randn(1, 1, 28, 28, requires_grad=True)#batch size-1 input cahnne-1 image size 28*28# Export the torch model as onnxtorch.onnx.export(model,input,'model.onnx', # name of the exported onnx modelopset_version=11,export_params=True,do_constant_folding=True)

模型所需算力测算

手动测算

网络代码

class SimpleModel(nn.Module):def __init__(self):super(SimpleModel, self).__init__()self.conv1 = nn.Conv2d(1,10,5) #1 input channel 10 outchannel 5 kernel sizeself.conv2 = nn.Conv2d(10,20,3) #same as aboveself.fc1   = nn.Linear(20*10*10,500) #in / outself.fc2   = nn.Linear(500,10) #same as abovedef forward(self, x):input_size = x.size(0)x = self.conv1(x) #in batch*1*28*28 out batch*10*24*24(28-5+1)x = F.relu(x)     #keep shape not change  out batch*10*24*24x = F.max_pool2d(x,2,2) #in batch*10*10*24 out batch*10*12*12(24/2)x = self.conv2(x) #in batch*10*12*12 out:batch 20*10*10(12-3+1)x = F.relu(x)x = x.view(input_size,-1)  #flatten -1:caculate dimens autoly 20*10*10x = self.fc1(x)# in :batch*2000 out batch*500x = F.relu(x) #keep sahpe not changex = self.fc2(x) #in 500 out 10output = F.log_softmax(x,dim=1) #caculate possibility#print("------------------------------output is ",output)return output

计算过程:

参数量

conv1层:1 input channel * 10 output channels * 5 * 5 kernel size + 10 bias = 260 个参数

conv2层:10 input channels * 20 output channels * 3 * 3 kernel size + 20 bias= 1820 个参数

fc1全连接层:20 * 10 * 10 (20个通道,每个通道大小为10*10) * 500 (输出大小) + 500 bias = 1000500 个参数

fc2全连接层:500 (输入大小) * 10 (输出大小) + 10 bias = 5010 个参数

总参数量为:260 + 1820 + 1000500 + 5010 = 1010120 个参数

Macs

1)conv1 层的FLOPs计算:

conv1 层是一个卷积层,输入大小为 batch * 1 * 28 * 28(假设batch大小为B,输入通道数为1,高度为28,宽度为28),输出大小为 batch * 10 * 24 * 24(输出通道数为10,高度为24,宽度为24)。在卷积操作中,每个输出位置需要进行一个 5 * 5 的卷积操作。因此,计算FLOPs的公式为:

其中,B为batch大小为1

FLOPs_conv1 = B * 10 * 24 * 24 * 5 * 5=14400

 2)conv2 层的FLOPs计算:

conv2 层也是一个卷积层,输入大小为 batch * 10 * 12 * 12,输出大小为 batch * 20 * 10 * 10。在卷积操作中,每个输出位置需要进行一个 3 * 3 的卷积操作。因此,计算FLOPs的公式为:

FLOPs_conv2 = B * 20 * 10 * 10 * 3 * 3

3)fc1 全连接层的FLOPs计算:

fc1 全连接层将二维的特征图展平为一维向量,并进行全连接操作。输入大小为 batch * (20 * 10 * 10)(即展平后的大小),输出大小为 batch * 500。在全连接操作中,每个输出位置需要进行一个乘法和一个加法操作。因此,计算FLOPs的公式为:

FLOPs_fc1 = B * (20 * 10 * 10) * 500 * 2

4)fc2 全连接层的FLOPs计算:

fc2 全连接层将输出大小从 500 减少到 10。输入大小为 batch * 500,输出大小为 batch * 10。在全连接操作中,每个输出位置需要进行一个乘法和一个加法操作。因此,计算FLOPs的公式为:

FLOPs_fc2 = B * 500 * 10 * 2

5)现在我们将这四层的FLOPs相加得到总体的FLOPs

总体FLOPs = FLOPs_conv1 + FLOPs_conv2 + FLOPs_fc1 + FLOPs_fc2

总体FLOPs = B * 10 * 24 * 24 * 5 * 5 + B * 20 * 10 * 10 * 3 * 3 + B * (20 * 10 * 10) * 500 * 2 + B * 500 * 10 * 2

由于模型的参数量不依赖于batch大小B,所以FLOPs也不依赖于batch大小B。因此,我们可以直接将batch大小B忽略,得到最终的总体FLOPs:

总体FLOPs = 10 * 24 * 24 * 5 * 5 + 20 * 10 * 10 * 3 * 3 + (20 * 10 * 10) * 500 * 2 + 500 * 10 * 2

总体FLOPs ≈ 149760 + 182000 + 1000000 + 5010 = 1342770 个 FLOPs

6)因此,这个 "SimpleModel" 模型的总体FLOPs为 1342770 个 FLOPs,也就是 1.34 MMac(1.34百万次乘加运算)。

测试代码

'''Author: warrenDate: 2023-08-01 16:22:02LastEditors: warrenLastEditTime: 2023-08-01 16:26:45FilePath: /wzw/MNIST/cal_flops.pyDescription:Copyright (c) 2023 by ${git_name_email}, All Rights Reserved.'''#!/usr/bin/env python3import torchvision.models as modelsimport torch from simple_net import SimpleModelfrom ptflops import get_model_complexity_infoDEVICE     = torch.device("cuda" if torch.cuda.is_available() else "cpu")with torch.cuda.device(0):model     = SimpleModel().to(DEVICE)input_data = torch.randn(1, 1, 28, 28)macs, params = get_model_complexity_info(model, (1, 28, 28), as_strings=True,print_per_layer_stat=True, verbose=True)print('{:<30}  {:<8}'.format('Computational complexity: ', macs))print('{:<30}  {:<8}'.format('Number of parameters: ', params))

结果

SimpleModel(

  1.01 M, 100.000% Params, 1.34 MMac, 100.000% MACs,

  (conv1): Conv2d(260, 0.026% Params, 149.76 KMac, 11.199% MACs, 1, 10, kernel_size=(5, 5), stride=(1, 1))

  (conv2): Conv2d(1.82 k, 0.181% Params, 182.0 KMac, 13.610% MACs, 10, 20, kernel_size=(3, 3), stride=(1, 1))

  (fc1): Linear(1.0 M, 99.296% Params, 1.0 MMac, 74.817% MACs, in_features=2000, out_features=500, bias=True)

  (fc2): Linear(5.01 k, 0.497% Params, 5.01 KMac, 0.375% MACs, in_features=500, out_features=10, bias=True)

)

Computational complexity:       1.34 MMac

Number of parameters:           1.01 M

参数解释

Params 参数量 Mac乘加运算总数

总参数量:1.01 M(1,010,000个参数),占100.000%。

总浮点运算量(MACs):1.34 MMac(1,340,000次乘加运算),占100.000%。

各层的详细信息:

conv1层

参数量:0.026%(大约260个参数)

MACs:11.199%(大约149.76 KMac,即149,760次乘加运算)

conv2层

参数量:0.181%(大约1.82 k个参数)

MACs:13.610%(大约182.0 KMac,即182,000次乘加运算)

fc1全连接层

参数量:99.296%(大约1.0 M个参数)

MACs:74.817%(大约1.0 MMac,即1,000,000次乘加运算)

fc2全连接层

参数量:0.497%(大约5.01 k个参数)

MACs:0.375%(大约5.01 KMac,即5,010次乘加运算)

总体计算复杂度:1.34 MMac(1,340,000次乘加运算)。

总参数量:1.01 M(1,010,000个参数)。

相关文章:

深度学习-模型转换_所需算力相关

模型转换相关 tensflow转onnx python -m tf2onnx.convert \--graphdef /root/autodl-tmp/warren/text-detection-ctpn/data/ctpn.pb \--output ./model.onnx --inputs Placeholder:0 --outputs Reshape_2:0&#xff0c;rpn_bbox_pred/Reshape_1:0 pytorch转onnx #!/usr/…...

Koordinator 助力云原生应用性能提升:小红书混部技术实践

作者&#xff1a;宋泽辉&#xff08;小红书&#xff09;、张佐玮&#xff08;阿里云&#xff09; 编者按&#xff1a; Koordinator 是一个开源项目&#xff0c;是基于阿里巴巴内部多年容器调度、混部实践经验孵化诞生&#xff0c;是行业首个生产可用、面向大规模场景的开源混…...

java中如何使用elasticsearch—RestClient操作文档(CRUD)

目录 一、案例分析 二、Java代码中操作文档 2.1 初始化JavaRestClient 2.2 添加数据到索引库 2.3 根据id查询数据 2.4 根据id修改数据 2.4 删除操作 三、java代码对文档进行操作的基本步骤 一、案例分析 去数据库查询酒店数据&#xff0c;导入到hotel索引库&#xff0…...

MySQL自定义函数

MySQL自定义函数 函数与存储过程类似&#xff0c;也是一组预先编译好的SQL语句的集合&#xff0c;但是存储过程可以有0个或多个返回&#xff0c;函数就只能有一个返回 创建函数 #语法 参数列表包含两部分 参数名和参数类型 #函数体必须有return语句 且每个sql语句后要以;结尾 所…...

技术学习|CDA level I 数据库应用(数据操作语言DML)

数据操作语言&#xff08;DML&#xff09;是对表中记录进行添加、更新、删除等操作的语言。 一、添加数据 在数据表中填充数据有两种方法&#xff0c;第一种方法是使用insert into语句向数据表中直接录入每行数据信息&#xff0c;但并不常用&#xff0c;因为分析使用的数据很…...

关键字:instanceof关键字

在 Java 中&#xff0c;instanceof关键字用于检查一个对象是否是某个特定类或其子类的实例。它的语法如下&#xff1a; 其中&#xff0c;Object是要检查的对象&#xff0c;Class是要检查的类或接口。 instanceof关键字的返回值是一个布尔值&#xff0c;如果对象Object是类Cla…...

【LeetCode:34. 在排序数组中查找元素的第一个和最后一个位置 | 二分】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…...

年度征文|回顾2023我的CSDN

一年转眼而逝&#xff0c;回顾这一年在csdn的创作&#xff0c;学习&#xff0c;记录历程。回顾过去&#xff0c;才能展望未来&#xff0c;首先看图说话。 今年在csdn的访问量已由年初的2万到年末的50w。粉丝有年初的300个左右&#xff0c;增加到4000个左右。我年初的目标是粉丝…...

3.无重复字符的最长子串(滑动窗口,C解答)

题目描述&#xff1a; 给定一个字符串 s &#xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc"&#xff0c;所以其长度为 3。示例 2: 输入: s "bbbbb&quo…...

什么是系统设计 – 学习系统设计

系统设计被定义为为系统的不同组件、接口和模块创建架构并提供有助于在系统中实现这些元素的相应数据的过程。系统设计是任何分布式系统设计背后的核心概念。 系统设计涉及识别数据源&#xff0c;它是描述、创建和规划框架以满足特定业务的必要性和先决条件的直觉。 为什么要…...

基于Python的城市热门美食数据可视化分析系统

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长 QQ 名片 :) 1. 项目简介 本项目利用网络爬虫技术从XX点评APP采集北京市的餐饮商铺数据&#xff0c;利用数据挖掘技术对北京美食的分布、受欢迎程度、评价、评论、位置等情况进行了深入分析&#xff0c;方便了解城市美食店…...

万字长文谈自动驾驶occupancy感知

文章目录 prologue欢迎大家点赞收藏与我交流讨论paper listVision-based occupancy :1. [MonoScene: Monocular 3D Semantic Scene Completion [CVPR 2022]](https://arxiv.org/pdf/2112.00726.pdf)2. [Tri-Perspective View for Vision-Based 3D Semantic Occupancy Predictio…...

KBDNO1.DLL文件缺失,软件或游戏无法启动运行,怎样快速修复

不少小伙伴&#xff0c;求助电脑报错“KBDNO1.DLL文件缺失&#xff0c;软件或游戏无法启动或运行”&#xff0c;应该怎么办&#xff1f; 首先&#xff0c;我们先来了解“KBDNO1.DLL文件”是什么&#xff1f; KBDNO1.DLL是Windows操作系统中的一个动态链接库文件&#xff0c;主…...

计算机网络【EPOLL 源码详解】

IO多路复用 在以前&#xff0c;传统的网络编程是多线程模型&#xff0c;一个线程单独处理一个请求。 然而&#xff0c;线程是很昂贵的资源&#xff1a; 线程的创建和销毁成本很高&#xff0c;linux的线程实际上是特殊的进程&#xff1b;因此通常会使用线程池来减少线程创建和…...

第82讲:MySQL Binlog日志的滚动

MySQL Binlog日志的滚动 MySQL Binlog日志滚动指的就是产生一个新的Binlog日志&#xff0c;然后进行记录&#xff0c;因为如果都在一个Binlog中记录&#xff0c;查询是非常慢的&#xff0c;检索的效率也很低。 Binlog日志滚动有三种方法&#xff1a; 重启MySQL 数据库一般不重…...

2024.1.3C语言补录 宏函数

在C语言中&#xff0c;宏函数可以使用预处理器指令 #define 来定义。宏函数与常规函数类似&#xff0c;但它们在预处理阶段进行替换&#xff0c;而不是在运行时。 定义:#define 宏名称(参数列表) 宏体 其中&#xff1a; #define 是预处理器指令&#xff0c;用于定义宏。宏名…...

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件

鸿蒙&#xff08;HarmonyOS&#xff09;项目方舟框架&#xff08;ArkUI&#xff09;之线性布局容器Column组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Column组件 沿垂直方向布局的容器。 子组件 可以包含子组件。 接…...

快手推荐算法工程师三面回顾

快手三次技术面试一次HR面试的简单回顾&#xff0c;希望对大家有所启发。 一面 面试官一上来就让写算法题&#xff0c;第一个是计算岛屿数量&#xff0c;第二个是最长回文字串。 然后就是介绍自己的论文。对于论文的工作&#xff0c;面试官只是在问关于论文的问题&#xff0…...

Sonarqube安装(Docker)

一&#xff0c;拉取相关镜像并运行 # 拉取sonarqube镜像 docker pull sonarqube:9.1.0-community在运行之前要提前安装postgres并允许&#xff0c;新建数据库名为sonar的数据库 Docker安装postgres教程 docker run -d --name sonarqube --restartalways \ -p 19000:9000 \ …...

双击shutdown.bat关闭Tomcat报错:未设置关闭端口~

你们好&#xff0c;我是金金金。 场景 当我startup.bat启动tomcat之后&#xff0c;然后双击shutdown.bat关闭&#xff0c;结果报错了~ 排查 看报错信息很明显了&#xff0c;未配置关闭端口&#xff0c;突然想起来了我在安装的时候都选的是默认的配置&#xff0c;我还记得有这…...

HLS 2017.4 导出 RTL 报错:ERROR: [IMPL 213-28] Failed to generate IP.

软件版本&#xff1a;HLS 2017.4 在使用 HLS 导出 RTL 的过程中产生如下错误&#xff1a; 参考 Xilinx 解决方案&#xff1a;https://support.xilinx.com/s/article/76960?languageen_US 问题描述 DESCRIPTION As of January 1st 2022, the export_ip command used by Vivad…...

【Kubernetes】kubectl 常用命令

kubectl 常用命令 1.基础命令2.部署命令3.集群管理命令4.故障诊断与调试命令5.高级命令6.设置命令7.其他命令 kubectl 是 Kubernetes 提供的命令行管理工具。通过使用 kubectl&#xff0c;可以管理和操作 Kubernetes。 1.基础命令 命令 说明 create通过文件名或标准输入创建 …...

鸿蒙开发第一天

一、开发准备工作 1、开发工具的安装 1&#xff09;下载地址&#xff1a;https://developer.huawei.com/consumer/cn/deveco-studio/ 2&#xff09;查询API文档链接&#xff1a;https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V2/syscap-00000014080893…...

Midjourney表情包制作及变现最全教程

盘点Midijourney&#xff08;AIGF&#xff09;热门赚米方法&#xff0c;总有一种适合你之AI绘画操作技巧及变现渠道剖析 【表情包制作】 首先我们对表情包制作进行详细的讲解&#xff1a; 当使用 Midjourney&#xff08;AIGF&#xff09; 绘画来制作表情包时&#xff0c;你可以…...

UNIAPP中借助store+watch完成实时数据

简介 手机端蓝牙连接校验仪&#xff0c;校验仪上传校验数据至手机完成展示。基于watch&#xff0c;完成实时展示数据。对象放在store中。实现分为store中的配置&#xff0c;数据接收&#xff0c;数据展示 store配置 在state中配置属性&#xff0c;在mutations中配置更新方法…...

COLMAP 三维重建 笔记

目录 安装COLMAP 需要设置环境变量 COLMAP数据下载 使用ColmapOpenMVS进行物体的三维重建 安装COLMAP 1.1 下载Colmap&#xff1a;https://demuc.de/colmap/#download 选择cuda版本的进行下载。 1.2 下载OpenMVS&#xff0c;可以选择下载源码自行编译也可以选择封装好的可…...

即时设计:一键查看设计稿与页面差异,让设计师的工作更便捷高效

设计稿走查 在设计工作中&#xff0c;对设计稿和实际页面进行对比是必不可少的环节。然而&#xff0c;传统的对比方式往往耗时耗力&#xff0c;无法精确测量差异。为了解决这个问题&#xff0c;我们推出了一款强大的工具&#xff0c;它可以通过图片对比&#xff0c;轻松查看设…...

知识库问答LangChain+LLM的二次开发:商用时的典型问题及其改进方案

前言 如之前的文章所述&#xff0c;我司下半年成立大模型项目团队之后&#xff0c;我虽兼管整个项目团队&#xff0c;但为让项目的推进效率更高&#xff0c;故分成了三大项目组 第一项目组由霍哥带头负责类似AIGC模特生成系统第二项目组由阿荀带头负责论文审稿GPT以及AI agen…...

Mac内心os:在下只是个工具,指望我干人事?

呜呜呜&#xff0c;今天去医院看病了&#xff0c;乌央央的好多人。最近在研究苹果开发者工具中的HealthKit&#xff0c;等我研究透给大家安利。今天还是继续闲聊吧&#x1f602;&#x1f602;提前感谢大家体谅我这个病号&#xff0c;发射小红心&#xff0c;biubiubiu~ 据说&am…...

2024年最新远程控制软件

远程控制软件是一种技术工具&#xff0c;允许用户通过互联网远程控制他人的计算机。该软件通常用于公司或个人远程管理其他计算机的功能。它们允许用户远程操作他人电脑上的程序、文件或网页&#xff0c;或查看目标计算机的屏幕图片和其他信息。因此&#xff0c;该软件也广泛应…...

请专业做网站的老师/最新最好的磁力搜索

HBase版本&#xff1a;0.94.15-cdh4.7.0 在 HBase中&#xff0c;大部分的操作都是在RegionServer完成的&#xff0c;Client端想要插入、删除、查询数据都需要先找到相应的 RegionServer。什么叫相应的RegionServer&#xff1f;就是管理你要操作的那个Region的RegionServer。Cli…...

网站域名跟谁买/互联网广告营销是什么

这是一个缠绕了我差不多有大半年的噩梦,作为一个程序员,笔记本怎么可能不装linux系统,但是我的笔记本神舟系列,买回来屡次三番重装系统,废了很多功夫,网络连接那里一直就没有WiFi选项。 无奈之下,我一度把很多环境都迁移到windows里面去了,但是奈何ubuntu之心不死,总…...

网站运营与推广计划书怎么做/成人职业技能培训学校

为什么80%的码农都做不了架构师&#xff1f;>>> 1、默认生产者消息是持久的:会存数据库 --消费者的持久&#xff1a;createDurableSubscriber是指消费者能收到所有它订阅时间点之后的消息&#xff0c;即使消 费者注册后关闭&#xff0c;当它重启就能收到注册时间点…...

做淘宝需要知道什么网站/福州网站排名推广

创建父工程 idea创建父工程 idea创建一个工程。父工程管理公共资源 添加子模块 选择添加到父工程里面spring_cloud_parent 相应的子模块添加到父工程的pom.xml文件里 转载于:https://www.cnblogs.com/mentalidade/p/10326343.html...

驰业网站建设/西安的网络优化公司

前几天下班回到家后正在处理一个白天没解决的bug&#xff0c;厕所突然传来对象的声音&#xff1a;对象&#xff1a;xx&#xff0c;你有《时间简史》吗&#xff1f;我&#xff1a;我去&#xff01;妹子&#xff0c;你这啥癖好啊&#xff0c;我有时间也不会去捡屎啊&#xff01;对…...

用二级域名做的网站算新站吗/域名购买

题目&#xff1a; 小易准备去魔法王国采购魔法神器,购买魔法神器需要使用魔法币,但是小易现在一枚魔法币都没有,但是小易有两台魔法机器可以通过投入x(x可以为0)个魔法币产生更多的魔法币。 魔法机器1:如果投入x个魔法币,魔法机器会将其变为2x1个魔法币 魔法机器2:如果投入x…...