【AI】PyTorch实战(四):使用C++调用PyTorch模型

103 篇文章 63 订阅 ¥69.90 ¥99.00

AI学习目录汇总

1、简述

PyTorch是由python语言实现,想要使用C++调用PyTorch模型,需要先将PyTorch模型的结构和参数保存成一种和具体编程语言无关的格式,然后使用C++来解析这种格式即可。TorchScript程序就是使用python语言,将PyTorch模型的结构和参数保存下来,这一操作称为序列化。

PyTorch提供C++接口库——libTorch,该库用于加载已经序列化的PyTorch模型,这一操作称为反序列化。

2、使用步骤

2.1 生成torch.jit.ScriptModule对象

在序列化之前,首先需要在python环境中产生一个ScriptModule对象,这个对象有执行序列化的接口。
有两种方法产生ScriptModule对象,一种称为==“跟踪”、另一种称为“注解”
1)所谓
“跟踪”就是加载网络模型后,创建一个随机输入,在“特定方法”中,执行一次==预测(向前传播)操作,这个“特定方法”(torch.jit.trace)可以跟踪预测的过程,获取预测时网络模型的结构和参数,将它们封装到ScriptModule对象中。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以回答你的问题。首先,你需要了解 ONNX 是什么。ONNX(Open Neural Network Exchange)是一种开放的格式,用于表示深度学习模型。ONNX 可以将模型从一个框架转换到另一个框架,从而使模型在不同的平台上运行。MNIST 手写字体识别是一个常见的示例,我们可以使用 ONNX 将该模型转换为 ONNX 格式,然后在 Windows 下使用 C++ 进行部署和调用。 以下是实现步骤: 1.首先,你需要安装 ONNX 工具包。可以从 ONNX 官网下载并安装 ONNX 工具包。 2.然后,你需要下载 MNIST 手写字体识别模型并将其转换为 ONNX 格式。你可以从 PyTorch 官网下载 MNIST 模型使用 PyTorch 转换器将其转换为 ONNX 格式。 3.接下来,在 Windows 系统中,你需要安装 Visual Studio 2017 或更高版本。你还需要安装 CMake 和 OpenCV 库。 4.然后,你需要下载 ONNX Runtime 并将其添加到项目中。可以从 ONNX Runtime 的 GitHub 仓库下载 ONNX Runtime。 5.接下来,创建一个新的 Visual Studio 项目,将 ONNX Runtime 添加到项目中,并将 MNIST 手写字体识别模型添加到项目中。 6.然后,你可以编写 C++ 代码来加载模型并进行推理。以下是一个简单的代码示例: ``` #include <iostream> #include <vector> #include <string> #include "opencv2/opencv.hpp" #include "onnxruntime_cxx_api.h" using namespace std; using namespace cv; using namespace Ort; int main() { // Load MNIST model Env::VarLogger logger = Env::Default().GetLogger(); SessionOptions session_options; session_options.SetIntraOpNumThreads(1); session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_BASIC); const char* model_path = "mnist.onnx"; Ort::Session session{Env::Default(), model_path, session_options}; Ort::AllocatorWithDefaultOptions allocator; // Load image Mat image = imread("test.png", IMREAD_GRAYSCALE); resize(image, image, Size(28, 28)); vector<float> input_data(image.ptr<float>(), image.ptr<float>() + 28 * 28); vector<const char*> input_node_names = {"Input3"}; vector<const char*> output_node_names = {"Plus214_Output_0"}; vector<int64_t> input_node_dims = {1, 1, 28, 28}; // Run inference vector<Ort::Value> inputs; inputs.emplace_back(Ort::Value::CreateTensor<float>(allocator, input_data.data(), input_data.size(), input_node_dims.data(), input_node_dims.size())); auto output_tensors = session.Run(Ort::RunOptions{nullptr}, input_node_names.data(), inputs.data(), inputs.size(), output_node_names.data(), output_node_names.size()); // Get results vector<float> output_data(output_tensors.front().GetTensorMutableData<float>(), output_tensors.front().GetTensorMutableData<float>() + 10); int max_index = distance(output_data.begin(), max_element(output_data.begin(), output_data.end())); cout << "Predicted digit: " << max_index << endl; return 0; } ``` 这段代码将加载 MNIST 手写字体识别模型,将图像转换为模型的输入格式,运行推理并输出预测结果。 7.最后,你可以构建并运行程序,测试部署和调用 ONNX 模型的效果。 希望这个示例可以帮助你实现 Windows 下 C++ 部署调用 ONNX 模型
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

郭老二

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值