gpt4 book ai didi

c# - 无法使 ONNX 模型的输入列名称起作用

转载 作者:太空宇宙 更新时间:2023-11-03 16:58:38 25 4
gpt4 key购买 nike

我正在使用 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);

我收到以下错误:

Could not find input column 'data' Parameter name: inputSchema

这清楚地说它找不到数据的输入列,尽管我清楚地看到那是 Netron 中的名称,如您所见:

enter image description here

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

Parameter name: Input tensor, image, does not exist in the ONNX model. Available input names are [data]. Actual value was image.

最佳答案

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

这是我来自微软官方文档的代码:

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 被声明为常量字符串,在文档中有提示用 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);

关于c# - 无法使 ONNX 模型的输入列名称起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57264865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com