news 2026/8/27 18:53:51

ONNX 运行时报错 ORT_RUNTIME_EXCEPTION Ort::Exception 未经处理的异常

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ONNX 运行时报错 ORT_RUNTIME_EXCEPTION Ort::Exception 未经处理的异常

1.运行报错

前段时候推理时遇到一个非常奇怪的bug,ONNX模型在运行时会报ORT_RUNTIME_EXCEPTION的异常:

2.错误排查

继续运行,断点看到是在Session.Run()的时候报错。

断点逐语句跟踪没有更多详情的信息,重新看了好几遍代码后都没有看出任何问题。于是去看其他能正常推理的代码, 参数和流程都一致,不知道哪里导致的问题。

只能推断Session对象是全局变量,类的构造函数中初始化后,在其它地方调用Session.Run()方法引起。

// <summary> /// ONNX模型的初始化。 /// </summary> /// <param name="modelFile">模型文件的绝对路径,可空,如果为空则从当前目录查找,默认文件名是model.onnx。</param> /// <param name="threadNum">启用线程数</param> ONNXDetect::ONNXDetect(std::string modelName, int threadNum) { string modelPathStr; if (!FindModel(modelName, modelPathStr)) throw exception("未找到模型文件"); ////初始化环境 Ort::SessionOptions sessionOptions; sessionOptions.SetIntraOpNumThreads(threadNum); ////启用所有可能的优化。 sessionOptions.SetGraphOptimizationLevel(GraphOptimizationLevel::ORT_ENABLE_ALL); env=Ort::Env(ORT_LOGGING_LEVEL_ERROR, "test"); //string 转 wchart_t; wchar_t* wc = new wchar_t[modelPathStr.size()]; //wc指向的内存区域存储这wchar_t类型的 string。 swprintf(wc, modelPathStr.size() + 1, L"%S", modelPathStr.c_str()); //注意大写 //初始化session对象。 session = new Ort::Session(env, wc, sessionOptions); } ///运行推理 vector<Value> ONNXDetect::Detect(Mat src) { //预处理。 PreProcessRBC(src, inputData); array<int64_t, 4> input_shape{ 1, 3, inputHeight, inputWidth }; MemoryInfo allocator_info = MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU); Value input = Value::CreateTensor<float>(allocator_info, inputData.data(), inputData.size(), input_shape.data(), input_shape.size()); //运行推理 vector<Value> output = session->Run(RunOptions{ nullptr }, inputNames, &input, inputBatch, outputNames, outputBatch); return output; }

花了点时间终于逐步对比排查发现是初始化Session的变量Env对象的问题:

不知为何,如果env设置为局部变量,Session对象为全局变量,env初始化Session就会异常

3.解决方法

方法1:Env对象的的初始化在这里是局部变量,需要把这个对象设置为全局变量

方法2:不把这个对象设置为全局变量,只在头文件.h中定义一个空的Env对象,也能正常运行。

希望对遇到相同问题的人有帮助。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/27 18:48:24

Android 封装 Http 请求工具

Android 封装 Http 请求工具 工具类 import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.util.Map;/*** http 请求工具**…

作者头像 李华
网站建设 2026/8/27 18:48:20

Android开发 GradientDrawable详解

前言 GradientDrawable 支持渐变色的Drawable&#xff0c;与shapeDrawable在画型上是类似的&#xff0c;多了支持渐变色。代码上的GradientDrawable比在xml里的shape下gradient属性强大的多&#xff0c;因为shape下gradient属性只支持三色阶渐变&#xff0c;而GradientDrawable…

作者头像 李华
网站建设 2026/8/27 18:44:30

Go 编译过程全景

Go 编译过程全景一、从 go build 到可执行文件&#xff1a;一张全景图 你敲下 go build&#xff0c;几秒钟后一个静态二进制文件就出现了。但在这几秒钟里发生了什么&#xff1f;Go 编译器&#xff08;gc&#xff0c;注意不是 GC 垃圾回收&#xff0c;而是 Go Compiler 的缩写&…

作者头像 李华
网站建设 2026/8/27 18:41:47

基于DEAP数据集的脑电情绪识别:从特征工程到深度学习实战

简介&#xff1a;脑机接口&#xff08;BCI&#xff09;与情感计算是人工智能与神经科学交叉的前沿领域&#xff0c;其核心目标之一是让机器理解人类情绪。实现这一目标的关键在于从生理信号中提取有效的情绪表征&#xff0c;其中脑电图&#xff08;EEG&#xff09;因其高时间分…

作者头像 李华
网站建设 2026/8/27 18:40:29

鸿蒙开发入门:快速修复命令行调试开发指导

快速修复命令行调试开发指导 当前阶段&#xff0c;HarmonyOS为开发者提供了命令行的调试开发工具可供使用。比如&#xff0c;包名为com.ohos.quickfix的示例应用&#xff0c;版本号为1000000。该应用的当前版本运行中有某问题需要修复&#xff0c;此时&#xff0c;开发者可参考…

作者头像 李华