yolov7模型部署——环境搭建(python 导出onnx模型,c# OnnxRunTime-GPU版调用) 踩坑记录
1. 环境搭建
首先需要安装以下环境:
- Python 3.7
- PyTorch 1.7.1
- onnx 1.8.1
- onnxruntime-gpu 1.7.0
其中,onnxruntime-gpu 1.7.0 需要根据自己的 CUDA 版本进行选择,可以在官网上查看对应版本。
2. 导出 onnx 模型
使用 PyTorch 导出 onnx 模型的代码如下:
python import torch import torchvision # 加载模型 model = torchvision.models.detection.fasterrcnn_resnet50_fpn(pretrained=True) model.eval() # 输入数据 x = torch.randn(1, 3, 224, 224) # 导出 onnx 模型 torch.onnx.export(model, x, "model.onnx", opset_version=11)
其中,opset_version 表示使用的 onnx 版本,需要根据自己的 onnx 版本进行选择。
3. C# 调用 onnx 模型
使用 onnxruntime-gpu 1.7.0 调用 onnx 模型的代码如下:
csharp using System; using System.Linq; using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; class Program { static void Main(string[] args) { // 加载模型 var session = new InferenceSession("model.onnx"); // 输入数据 var tensor = new DenseTensor(new[] { 1, 3, 224, 224 }, Enumerable.Range(0, 1 * 3 * 224 * 224).Select(x => (float)x).ToArray()); // 运行模型 var inputs = new[] { "input" }; var outputs = new[] { "output1", "output2" }; var results = session.Run(inputs.ToDictionary(x => x, x => tensor), outputs); // 输出结果 var output1 = results.First(x => x.Key == "output1").Value; var output2 = results.First(x => x.Key == "output2").Value; Console.WriteLine($"output1: {string.Join(", ", output1.Cast ())}"); Console.WriteLine($"output2: {string.Join(", ", output2.Cast ())}"); } }
需要注意的是,onnxruntime-gpu 1.7.0 需要安装 CUDA 和 cuDNN,否则会报错。同时,需要将 onnxruntime.dll 和 onnxruntime_gpu.dll 复制到项目的输出目录中。
4. 踩坑记录
在实际使用中,可能会遇到以下问题:
- 导出的 onnx 模型无法正常运行:可能是因为 PyTorch 和 onnx 的版本不兼容,需要根据提示升级或降级版本。
- C# 调用 onnx 模型报错:可能是因为缺少 CUDA 或 cuDNN,需要安装对应版本。同时,需要将 onnxruntime.dll 和 onnxruntime_gpu.dll 复制到项目的输出目录中。
- C# 调用 onnx 模型输出结果不正确:可能是因为输入数据的格式不正确,需要根据模型的输入格式进行调整。同时,需要注意模型的输出格式,可能需要进行转换。
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。