CoreML 模型:将 imageType 模型输入转换为 multiArray

CoreML model: Convert imageType model input to multiArray

我使用 PyTorch 训练了一个简单的多类分类器,我想将其转换为 CoreML 模型格式。它已转换,但有一个问题。

我已经进行了非常详尽的搜索,但最常见的问题与 mlmodel 的输入有关,只是关于如何将 mlmodel 的输入格式从 MLMultiArray 更改为 UIImage 因为它们必须使用图像。但是,如果我的模型需要一个 UIImage 作为输入,而我有多数组类型的数据,我该如何更改模型的输入以使其需要多数组数据?

转换后得到的模型输入规范:

input {
  name: "input"
  type {
    imageType {
      width: 3
      height: 150
      colorSpace: GRAYSCALE
    }
  }
}

我想要的模型输入规范:

input {
  name: "input"
  type {
      multiArrayType {
        shape: 3
        shape: 1
        shape: 150
        dataType: DOUBLE
    }
  }
}

任何帮助将不胜感激。谢谢!

通常当您转换模型时,您会得到一个 MLMultiArray 除非您指定您希望它是一个图像。不确定你是如何转换模型的,但你可能会说你不希望输入是图像(即不要为转换器指定 image_input_names 参数)。

如果您无法访问原始模型,您可以更改 mlmodel 文件,执行如下操作(可能有拼写错误):

import coremltools
mlmodel = coremltools.models.MLModel("YourModel.mlmodel")
spec = mlmodel._spec
spec.description.input[0].type.multiArrayType.shape.extend([3, 1, 150])
coremltools.util.save_spec(spec, "YourNewModel.mlmodel")