【问题标题】:CoreML model: Convert imageType model input to multiArrayCoreML 模型:将 imageType 模型输入转换为 multiArray
【发布时间】:2023-03-03 16:55:01
【问题描述】:

使用 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
    }
  }
}

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

【问题讨论】:

    标签: ios swift multidimensional-array coreml coremltools


    【解决方案1】:

    通常,当您转换模型时,您会得到一个 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")
    

    【讨论】:

    • 谢谢@matthijs-hollemans!这就像一个魅力.. :) 任何想法,我怎样才能得到一个多阵列形状(3,1,1)来表示为多阵列形状(3)。这是我的输出。
    • 关于转换,我也认为需要指定它,但我使用 MMdnn 从源框架 PyTorch 转换到目标框架 CoreML,这给了我这个带有这些输入和输出的模型。我之所以使用它,是因为 MMdnn 似乎适用于更广泛的社区。​​span>
    • spec.description 中,您可以删除您不想要的shape 位。例如,del spec.description.output[0].type.multiArrayType.shape[-1] 删除最后一个维度。
    猜你喜欢
    • 2017-12-10
    • 2017-11-23
    • 2017-12-09
    • 2020-08-25
    • 2018-09-12
    • 2019-10-18
    • 2020-01-24
    • 2017-11-12
    • 2018-06-14
    相关资源
    最近更新 更多