C++通过onnxruntime部署Pytorch训练的YOLOV3

C++ onnxruntime模块加载Pytorch中的onnx模型
1.Python中Torch导出onnx文件
"""YOLOv3 onnx模块导出"""
model.eval()
torch.onnx.export(model=model,args=im,f="./yolov3.onnx",input_names=["inputs"]\
                  ,output_names=["output"])
利用torch.onnx.export()导出onnx模型,前提是model是加载好的Yolov3模型,这里不懂的可以看我之前写过YOLOv3调试的文章。
C++通过onnxruntime部署Pytorch训练的YOLOV3_第1张图片
就是在detect.py中加入上述代码。
错误一:opset version版本错误
在上述代码中指定,opset version=11 版本即可。
C++通过onnxruntime部署Pytorch训练的YOLOV3_第2张图片
导出成功后就可以在根目录下发现yolov3.onnx了
C++通过onnxruntime部署Pytorch训练的YOLOV3_第3张图片
测试代码:
import onnx

# Load the ONNX model
model = onnx.load("yolov3.onnx")

# Check that the IR is well formed
onnx.checker.check_model(model)

# Print a human readable representation of the graph
print(onnx.helper.printable_graph(model.graph))
2.安装onnxruntime
首先去官网下载onnxruntime版本:
cpu版本: NuGet Gallery | Microsoft.ML.OnnxRuntime 1.11.0
gpu版本: NuGet Gallery | Microsoft.ML.OnnxRuntime.Gpu 1.13.1
本文下载的cpu版本
下载完成后将安装文件放在一个文件夹里,然后打开需要配置onnxruntime的VS工程。
工具->NuGet包管理器->程序包管理控制台
在打开的控制台中输入以下命令:
PM> Install-Package Microsoft.ML.OnnxRuntime -Source D:\onnxruntime\setup
后面的路径可以根据自己配置的路径自行修改。
C++通过onnxruntime部署Pytorch训练的YOLOV3_第4张图片
上述操作完成后在你的工程目录下就会多出packages,点进去找到onnxruntime的头文件目录,把该目录配置到工程中
C++通过onnxruntime部署Pytorch训练的YOLOV3_第5张图片
C++通过onnxruntime部署Pytorch训练的YOLOV3_第6张图片
测试以下是否可用。
3.测试yolov3.onnx是否可用
#include
#include
#include
#include
#include 
#include
#include
#include 
using namespace std;
using namespace cv;
int main(int argc,char *argv)
{
    //初始化环境
    Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "test");
    //onnx文件路径
    const wchar_t* model_path = L"yolov3.onnx";
    //初始化Session 选项,申请一个线程,使用基础的优化器
    Ort::SessionOptions session_options;
    session_options.SetIntraOpNumThreads(1);
     session_options.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_BASIC);
    //按上述的配置创建Session,加入到运行内存中
    cout << "Using Onnxruntime C++ API..."<input_node_names(num_input_nodes);     //输入节点的名称
    vectoroutput_node_names(num_output_nodes);   //输出节点的名称
    //打印模型输入节点的数量
    for (int i=0;i

你可能感兴趣的:(c++,pytorch,开发语言)