onnxruntime部署yolov5
时间: 2025-01-04 08:18:38 浏览: 7
### 使用 ONNX Runtime 部署 YOLOv5 模型
#### 加载模型
为了使用ONNX Runtime部署YOLOv5模型,首先需要加载已经转换成ONNX格式的YOLOv5模型文件。这通常是一个`.onnx`扩展名的文件。
```cpp
#include "onnxruntime_cxx_api.h"
// 创建环境和会话选项
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "YoloV5");
Ort::SessionOptions session_options;
session_options.SetIntraOpNumThreads(1);
std::wstring model_path = L"path_to_your_model.onnx";
Ort::Session session(env, model_path.c_str(), session_options);
```
上述代码展示了创建ONNX Runtime运行所需的环境以及设置会话参数[^3]。
#### 数据预处理
在进行推理之前,输入图片需经过一系列预处理操作以匹配模型预期的输入格式。对于YOLOv5而言,常见的做法是调整大小到固定尺寸并规范化像素值范围至0-1之间。
```cpp
cv::Mat img = cv::imread(image_file); // 读取原始图像
cv::resize(img, img, cv::Size(input_width, input_height)); // 调整大小
img.convertTo(img, CV_32F, 1.0 / 255.0); // 归一化
```
这段代码说明了如何准备一张用于预测的新图象作为网络输入的一部分过程[^1]。
#### 执行推理
准备好输入张量之后就可以调用ONNX Runtime执行实际推断工作:
```cpp
auto allocator_info = Ort::MemoryInfo::CreateCpu(OrtArenaAllocator, OrtMemTypeDefault);
// 准备输入Tensor
float* float_input_data = new float[input_tensor_size];
for (int i = 0; i < input_tensor_size; ++i){
float_input_data[i] = ... ; // 将预处理后的数据填充到这里
}
Ort::Value input_tensor = Ort::Value::CreateTensor<float>(allocator_info,
float_input_data,
input_tensor_size,
input_node_dims.data(),
num_of_dimensions);
// 获取输出名称
char** output_names = {"output"};
size_t num_output_nodes = 1;
// 运行推理
auto output_tensors = session.Run(
Ort::RunOptions{nullptr},
&input_name,
&input_tensor,
1,
output_names,
static_cast<int64_t>(num_output_nodes));
delete[] float_input_data;
```
此部分描述了构建输入张量并将之传递给ONNX Runtime引擎来获取结果的过程。
#### 后处理
最后一步是从模型返回的结果中提取有用的信息,比如边界框坐标、类别标签及其置信度得分等,并将其转化为易于理解的形式展示出来。
```cpp
const float* prediction_ptr = output_tensors[0].GetTensorMutableData<float>();
// 解析prediction_ptr中的检测结果...
```
通过解析得到的数据可以进一步绘制矩形框标注目标物体位置或将识别出来的对象信息保存下来供后续分析使用。
阅读全文