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

【python代码】一些小实验

 

目录

1. 测试Resnet50 ONNX模型的推理速度


1. 测试Resnet50 ONNX模型的推理速度

###############################
# 导出resnet50 模型
# 测试onnx模型推理 cpu 和 GPU 的对比
###############################import time
import numpy as np
import onnxruntime as ort
import torchvision.models as models
import torchdef export_onnx(onnx_path):# ResNet50 模型, 保存onnx model 返回 torch modelresnet50 = models.resnet50(pretrained=False)torch.onnx.export(resnet50,  # 模型torch.randn(1, 3, 224, 224),  # 输入onnx_path, # 输出文件名opset_version=12, # opset版本 input_names=["input"], # 输入变量名output_names=["output"], # 输出变量名dynamic_axes={"input":{0 : "batch_x"}, "output":{0: "batch_y"}} # 动态轴设置)class ONNXModel:def __init__(self, model_path, use_gpu=False):"""初始化 ONNX 模型推理类。:param model_path: ONNX 模型文件路径:param use_gpu: 是否使用 GPU 推理"""self.model_path = model_pathself.use_gpu = use_gpuself.session = Noneself.load_model()self.input_name = self.session.get_inputs()[0].name  # 输入名字def load_model(self):"""加载 ONNX 模型。"""try:print(f"Loading model from {self.model_path}...")providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if self.use_gpu else ['CPUExecutionProvider']self.session = ort.InferenceSession(self.model_path, providers=providers)except Exception as e:print(f"Failed to load model: {e}")raiseproviders = self.session.get_providers()if 'CUDAExecutionProvider' in providers:print("✅ ONNX Runtime 正在使用 GPU 推理")else:print("❌ ONNX Runtime 正在使用 CPU 推理")def run_inference(self, input_data):"""执行推理并返回结果。:param input_data: 输入数据,通常为 numpy 数组或字典:return: 推理结果"""# 确保输入是字典格式input_data = {self.input_name: input_data}outputs = self.session.run(None, input_data)return outputs[0]def eval(onnx_model, n):# 推理n 次 返回对比结果batch_size = 32print("评估中....")onnx_input = np.random.randn(batch_size,3,224,224).astype(np.float32)  # ONNX 需要 CPU 数据# 1. ONNX 时间t1 = time.time()for _ in range(n):onnx_model.run_inference(onnx_input)t2 = time.time()t = t2 - t1print(f"推理{n}次时间对比:")print(f"模型推理时间: {t:.4f} 秒")print(f"模型推理平均时间: {t/n:.4f} 秒")def test():onnx_path = "./resnet50.onnx"# export_onnx(onnx_path)onnx_model_cpu = ONNXModel(onnx_path, use_gpu=False)# 评估推理性能eval(onnx_model_cpu, 50)onnx_model_gpu = ONNXModel(onnx_path, use_gpu=True)eval(onnx_model_cpu, 50)# 示例用法
if __name__ == "__main__":test()

http://www.lryc.cn/news/2385662.html

相关文章:

  • Linux服务器配置深度学习环境(Pytorch+Anaconda极简版)
  • Vue-创建应用/挂载应用/根组件模版-.vue单文件/应用配置
  • 超低延迟音视频直播技术的未来发展与创新
  • 虚拟文件(VFS)
  • Java 内存模型(JMM)深度解析:理解多线程内存可见性问题
  • 转移dp简单数学数论
  • 【大模型面试每日一题】Day 27:自注意力机制中Q/K/V矩阵的作用与缩放因子原理
  • Ubuntu24.04 LTS安装java8、mysql8.0
  • 动静态库--
  • 【检索增强生成(RAG)全解析】从理论到工业级实践
  • git clone时出现无法访问的问题
  • Lesson 22 A glass envelope
  • 文件系统·linux
  • 【Matlab】雷达图/蛛网图
  • 【信息系统项目管理师】第24章:法律法规与标准规范 - 27个经典题目及详解
  • 使用JProfiler进行Java应用性能分析
  • 遥感解译项目Land-Cover-Semantic-Segmentation-PyTorch之一推理模型
  • 最大似然估计(Maximum Likelihood Estimation, MLE)详解
  • 【单片机】如何产生负电压?
  • Java 8 Stream 流操作全解析
  • java线程中断的艺术
  • 【信息系统项目管理师】一文掌握高项常考题型-项目进度类计算
  • HarmonyOS 鸿蒙应用开发基础:转换整个PDF文档为图片功能
  • Flask-SQLAlchemy核心概念:模型类与数据库表、类属性与表字段、外键与关系映射
  • 刷题 | 牛客 - js中等题-下(更ing)30/54知识点解答
  • RAM(随机存取存储器)的通俗解释及其在路由器中的作用
  • 六、【前端启航篇】Vue3 项目初始化与基础布局:搭建美观易用的管理界面骨架
  • 【项目需求分析文档】:在线音乐播放器(Online-Music)
  • C++ 前缀和数组
  • PHP 实现通用数组字段过滤函数:灵活去除或保留指定 Key