使用C++部署应用onnx模型

一、配置简介

windows10 + GTX 1050Ti 4GB显存

cuda 11.5

onnxruntime-gpu 1.11.1

visual studio 2019

.onnx模型,input为float32的{1,3,400,424};output为int64的{1,1,400,424}

二、流程梳理

1.python下生成pytorch的模型.pth,并基于.pth模型进行推理

2.python下依据模型推理实现从.pth转向.onnx

3.python下基于.onnx进行推理,与1中的结果进行比较

4.基于已知的输入输出,在C++下部署.onnx模型,进行推理,与3中的结果进行比较

三、代码(仅列出C++下的部署程序示例)

class ModelInfo {
public:
	ModelInfo() {};
	~ModelInfo() {};
public:
	size_t num_input_nodes;										//输入节点的数量
	std::vector<const char*> input_node_names;					//输入节点的名称
	std::vector<std::vector<int64_t>> input_node_dims;			//输入节点的维度
	std::vector<ONNXTensorElementDataType> input_types;			//输入节点的类型
	std::vector<OrtValue*> input_tensors;						//输入节点的tensor

	size_t num_output_nodes;									//输出节点的数量
	std::vector<const char*> output_node_names;					//输出节点的名称
	std::vector<std::vector<int64_t>> output_node_dims;			//输出节点的维度
	std::vector<ONNXTensorElementDataType> output_types;		//输出节点的类型
	std::vector<OrtValue*> output_tensors;						//输出节点的tensor
public:
	inline void InitialInput() {
		this->input_node_names.resize(this->num_input_nodes);
		this->input_node_dims.resize(this->num_input_nodes);
		this->input_types.resize(this->num_input_nodes);
		this->input_tensors.resize(this->num_input_nodes);
	}

	inline void InitialOutput() {
		this->output_node_names.resize(this->num_output_nodes);
		this->output_node_dims.resize(this->num_output_nodes);
		this->output_types.resize(this->num_output_nodes);
		this->output_tensors.resize(this->num_output_nodes);
	}
};


bool CheckStatus(const OrtApi* g_ort, OrtStatus* status) {
	if (status != nullptr) {
		const c
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值