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

使用C++编写接口调用PyTorch模型,并生成DLL供.NET使用

一、将PyTorch模型保存为TorchScript格式

1)构造一个pytorch2TorchScript.py,示例代码如下:

import torch
import torch.nn as nn
import argparse
from networks.seg_modeling import model as ViT_seg
from networks.seg_modeling import CONFIGS as CONFIGS_ViT_seg
import warnings
warnings.filterwarnings("ignore")def get_model(args):"""加载并配置模型。根据输入的配置参数创建模型并加载预训练的权重文件。Args:args: 命令行输入的参数集合。Returns:解包后的模型实例。"""# 根据配置文件选择模型config_vit = CONFIGS_ViT_seg[args.vit_name]# 根据模型类型配置跳跃连接与分类数if 'R50' in args.vit_name:config_vit.n_classes = args.num_classesconfig_vit.n_skip = 3else:config_vit.n_classes = args.num_classesconfig_vit.n_skip = 0# 配置模型的输入图像patch大小config_vit.patches["size"] = (args.vit_patches_size, args.vit_patches_size)# 实例化模型,并将其转移到GPU上model = ViT_seg(config_vit, img_size=args.img_size, num_classes=config_vit.n_classes).cuda()model = nn.DataParallel(model)  # 使用多个GPU进行并行计算# 加载预训练的模型权重model.load_state_dict(torch.load(args.model_path))# 返回解包后的模型实例return model.moduledef export_to_torchscript(model, example_input, output_path):"""将模型导出为TorchScript格式。Args:model: 要导出的模型实例。example_input: 示例输入张量,用于模型的跟踪(tracing)。output_path: 导出后的TorchScript模型保存路径。"""model.eval()  # 设置模型为推理模式# 使用trace方法将模型导出为TorchScripttraced_model = torch.jit.trace(model, example_input)# 将导出的模型保存为.pt文件traced_model.save(output_path)print(f"模型已保存为TorchScript格式: {output_path}")def main(args):# 加载模型model_to_export = get_model(args)# 创建一个示例输入张量 (大小为[BZ, channel, args.img_size, args.img_size])example_input = torch.randn(1, 1, args.img_size, args.img_size).cuda() # 模型导出的保存路径output_path = "torchscript/model_scripted.pt"# 导出模型为TorchScript格式export_to_torchscript(model_to_export, example_input, output_path)if __name__ == "__m

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • k8s ingress-nginx
  • JS设计模式之“语言之魂” - 原型模式
  • Python任务编排和工作流管理库之prefect使用详解
  • Istio基础概念
  • Spring Boot简介与体系知识导图
  • 阿里达摩院:FunASR语音识别
  • macos 使用port查询并安装python2, python3多版本, 设置默认python版本方法
  • 强化学习与自动驾驶研究内容
  • Jupyter Notebook详细教程
  • 【Python报错已解决】“ModuleNotFoundError: No module named ‘timm‘”
  • 软件设计文档绘图:流程图、数据流图、UML
  • 大牛荐书:美团王慧文清华大学产品经理课推荐阅读书单
  • Linux 软硬连接
  • 终于有人将多模态重点内容做成了动画
  • windows 编译libx264报错问题之解决
  • 【Leetcode】101. 对称二叉树
  • 【mysql】环境安装、服务启动、密码设置
  • Android 架构优化~MVP 架构改造
  • docker容器内的网络抓包
  • echarts的各种常用效果展示
  • Git学习与使用心得(1)—— 初始化
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • JavaScript函数式编程(一)
  • jQuery(一)
  • JS基础篇--通过JS生成由字母与数字组合的随机字符串
  • js面向对象
  • js中的正则表达式入门
  • Kibana配置logstash,报表一体化
  • Koa2 之文件上传下载
  • k个最大的数及变种小结
  • node学习系列之简单文件上传
  • spring boot下thymeleaf全局静态变量配置
  • 基于Android乐音识别(2)
  • 看域名解析域名安全对SEO的影响
  • 三分钟教你同步 Visual Studio Code 设置
  • 微信小程序开发问题汇总
  • 物联网链路协议
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 如何在招聘中考核.NET架构师
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • #{} 和 ${}区别
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • %check_box% in rails :coditions={:has_many , :through}
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (ibm)Java 语言的 XPath API
  • (vue)el-checkbox 实现展示区分 label 和 value(展示值与选中获取值需不同)
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (南京观海微电子)——I3C协议介绍
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例