onnxruntime c++,如何获取人类可读的输入名称

问题描述 投票:0回答:1

当使用 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中,如何获取人类可读的输入名称

c++ onnx onnxruntime
1个回答
0
投票

我尝试以下代码

    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();

工作

© www.soinside.com 2019 - 2024. All rights reserved.