我正在使用ML.NET导入ONNX模型进行对象检测。作为记录,我从Microsoft的CustomVision.ai网站导出了模型。
我在Netron中检查了模型文件,它清楚地显示了输入节点被命名为“数据”,输出被命名为“ 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);
我收到以下错误:
找不到输入列'data'参数名称:inputSchema
显然,它无法找到数据的输入列,尽管我清楚地看到它是Netron中的名称,如您所见:
现在,这是我真的不了解的部分。当我尝试其他输出名称时,它有一个不同的错误,基本上告诉我它实际上应该是数据:
参数名称:输入张量(图像)在ONNX模型中不存在。 可用的输入名称为[data]。实际值为图片。
答案 0 :(得分:0)
我遇到了同样的问题并看到了这篇文章。经过一段时间的努力,我现在发现对我来说,将这个输入列放入其他 Append 函数是有效的 - 让我在这里展示
这是我在微软官方文档中的代码:
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);
答案 1 :(得分:-1)
同一问题: System.ArgumentOutOfRangeException:找不到输入列“数据” 参数名称:inputSchema
模型是CustomVision.ai的导出项
Netron将输入参数名称显示为“数据”