【问题标题】:Can't get input column name of ONNX model to work无法使 ONNX 模型的输入列名工作
【发布时间】:2019-07-30 05:31:29
【问题描述】:

我正在使用 ML.NET 导入 ONNX 模型来进行对象检测。作为记录,我从 Microsoft 的 CustomVision.ai 站点导出了模型。

我在 Netron 中检查了模型文件,它清楚地显示输入节点被命名为“data”,输出节点被命名为“model_outputs0”。

但是,当我尝试运行这行代码来应用 ONNX 模型时

var pipeline = mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { "model_outputs0" }, inputColumnNames: new[] { "data" }, gpuDeviceId: 0, fallbackToCpu: true);
// Fit scoring pipeline
var model = pipeline.Fit(data);

我收到以下错误:

找不到输入列“数据”参数名称:inputSchema

这清楚地表明它找不到数据的输入列,即使我清楚地看到这是 Netron 中的名称,如您所见:

现在,这是我真的不明白的部分。当我尝试其他输出名称时,它有一个不同的错误,基本上告诉我它实际上应该是数据:

参数名称:输入张量,image,ONNX模型中不存在。 可用的输入名称是 [data]。实际值为图像。

【问题讨论】:

  • 嗨,这个问题有解决方案吗?一直面临同样的问题。

标签: c# .net ml.net onnx


【解决方案1】:

我遇到了同样的问题并看到了这篇文章。经过一段时间的努力,我现在发现对我来说,将这个输入列放到其他附加函数中是可行的——让我在这里展示一下

这是我在微软官方文档中的代码:

var pipeline = mlContext.Transforms.LoadImages(outputColumnName: "image", imageFolder: "", inputColumnName: nameof(ImageNetData.ImagePath))
            .Append(mlContext.Transforms.ResizeImages(outputColumnName: "image", imageWidth: ImageNetSettings.imageWidth, imageHeight: ImageNetSettings.imageHeight, inputColumnName: "image"))
            .Append(mlContext.Transforms.ExtractPixels(outputColumnName: "image"))
            .Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput }));

ModelInput 和 ModelOutput 被声明为 const 字符串,并且在文档中提示使用 Netron 查找值来替换它。但也有 .ResizeImages() 和 .LoadImages() 和 .ExtractPixels() - 这里是 outputColumnName。对我来说,它可以使用 ModelInput 值来配置它——对我来说那是“数据”——我在 customvision.ai 导出了 ONNX

所以现在我遇到了另一个问题,但我认为这对我有用。所以给它一个机会

要清楚我更改的代码

var pipeline = mlContext.Transforms.LoadImages(outputColumnName: "data", imageFolder: "", inputColumnName: nameof(ImageNetData.ImagePath))
            .Append(mlContext.Transforms.ResizeImages(outputColumnName: "data", imageWidth: ImageNetSettings.imageWidth, imageHeight: ImageNetSettings.imageHeight, inputColumnName: "data"))
            .Append(mlContext.Transforms.ExtractPixels(outputColumnName: "data"))
            .Append(mlContext.Transforms.ApplyOnnxModel(modelFile: modelLocation, outputColumnNames: new[] { TinyYoloModelSettings.ModelOutput }, inputColumnNames: new[] { TinyYoloModelSettings.ModelInput }));

        var model = pipeline.Fit(data);

【讨论】:

    【解决方案2】:

    同样的问题: System.ArgumentOutOfRangeException:找不到输入列“数据” 参数名称:inputSchema

    模型是从 CustomVision.ai 导出的

    Netron 将输入参数名称显示为“数据”

    【讨论】:

    • 有人解决了吗?我有同样的问题。模型使用 keras2onnx 导出,将输入参数名称显示为“input_1”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-06
    • 2020-10-22
    • 2019-11-10
    • 2021-09-01
    • 2023-03-09
    • 2021-11-11
    相关资源
    最近更新 更多