环境 win10 onnxruntime 1.15.1
在使用yolov5 进行推理部署时,一直报错Ort::Exception: 读取内存冲突等
,后分析发现,是声明的 Ort相关变量都是局部变量,需要修改成全局变量,如下所示,我是在.h文件中声明的。
Env env = Env(ORT_LOGGING_LEVEL_ERROR, “yolov5s”);
Ort::Session* ort_session = nullptr;
SessionOptions sessionOptions = SessionOptions();
vector<const char* > input_names;
vector<const char* > output_names;
vector<vector<int64_t>> input_node_dims; // >=1 outputs
vector<vector<int64_t>> output_node_dims; // >=1 outputs
std::vector In_AllocatedStringPtr;
std::vector Out_AllocatedStringPtr;
还有一个问题就是 onnxruntime 在1.12版本以后 不能使用GetInputName,需要改成GetInputNameAllocated,并且 需要使用
.h内
std::vector<AllocatedStringPtr> In_AllocatedStringPtr;
std::vector<AllocatedStringPtr> Out_AllocatedStringPtr; 来获取相关信息,
.cpp内
AllocatorWithDefaultOptions allocator;
In_AllocatedStringPtr.push_back(ort_session->GetInputNameAllocated(i, allocator));
input_names.push_back(In_AllocatedStringPtr.at(i).get());
AllocatorWithDefaultOptions allocator;
Out_AllocatedStringPtr.push_back(ort_session->GetOutputNameAllocated(i, allocator));
output_names.push_back(Out_AllocatedStringPtr.at(i).get());