当使用 onnxruntime-1.16.3 时,我使用以下代码
#include <iostream>
#include <onnxruntime_cxx_api.h>
int main() {
// Path to the ONNX model
const char *model_path = "/home/roroco/Downloads/mix/test_ai/resnet18-v1-7.onnx";
// Create an ONNX Runtime environment
Ort::Env env(ORT_LOGGING_LEVEL_WARNING, "ONNXExample");
// Create a session options object
Ort::SessionOptions session_options;
// Create an ONNX Runtime session
Ort::Session session(env, model_path, session_options);
// Get the input count of the model
size_t input_count = session.GetInputCount();
Ort::AllocatorWithDefaultOptions allocator;
// Print the input names
for (size_t i = 0; i < input_count; ++i) {
// char *input_name = session.GetInputName(i, allocator);
char *input_name = session.GetInputNameAllocated(i, allocator).get();
std::cout << "Input name " << i << ": " << input_name << std::endl;
}
return 0;
}
输出输入名称0:���UUU
当我切换到onnxruntime 1.12并使用
session.GetInputName(i, allocator)
时,它可以真正输入名称“data”
在新的onnxruntime中,如何获取人类可读的输入名称
我尝试以下代码
std::string input_name = session.GetInputNameAllocated(i, allocator).get();
auto input_name2 = session.GetInputNameAllocated(i, allocator).get();
std::cout << "input_name:" << input_name << std::endl;
std::cout << "input_name2:" << input_name2 << std::endl;
输出是:
input_name:data
input_name2:
所以我猜 session.GetInputNameAllocation(i, allocator) 返回 ptr,并且 ptr 在 std::cout 之前被释放
所以使用
std::string input_name = session.GetInputNameAllocated(i, allocator).get();
工作