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::Session

博客讲述了在使用ONNX模型进行推理时遇到的ORT_RUNTIME_EXCEPTION异常问题。作者在排查过程中发现,当Env对象作为局部变量而Session对象为全局变量时,初始化Session会导致异常。解决方案是将Env对象设为全局变量或者在头文件中定义空的Env对象。这个问题的解决对于遇到类似问题的开发者有参考价值。
最低0.47元/天 解锁文章
2877





