使用第一个 MLModel MLMultiArray 输出作为第二个 MLModel MLMultiArray 输入

Use first MLModel MLMultiArray output as second MLModel MLMultiArray Input

我有两个CoreMLMLMModels(由.pb转换而来)。
第一个模型输出一个Float32 3 × 512 × 512MLMultiArray,基本上描述了一个图像
第二个模型输入是 Float32 1 × 360 × 640 × 3 MLMultiArray,它也是一张图像,但大小不同。

我知道理论上我可以将第二个模型输入转换为图像,然后将第一个模型输出转换为图像(post-预测),调整它的大小,然后喂给第二个模型,但是感觉效率不是很高,已经有明显的模型延迟,所以我在努力提高性能。

是否可以“调整大小”/“重塑”/“转置”第一个模型输出以匹配第二个模型输入? 我正在使用 https://github.com/hollance/CoreMLHelpers (由惊人的 Matthijs Hollemans) 帮手,但我真的不明白如何在不损坏数据并尽可能保持数据高效的情况下做到这一点。

谢谢!

不必 将它们转换为图像。使用 MLMultiArrays 代替图像的一些选项:

  • 您可以从第一个模型中取出 512x512 的输出并切掉一部分使其成为 360x512,然后填充另一个维度使其成为 360x640。但这可能不是你想要的。如果是,您必须自己编写代码。

  • 您还可以手动将 512x512 输出调整为 360x640。为此,您需要自己实现合适的大小调整选项(可能是双线性插值)或转换数据,以便您可以使用 OpenCV 或 vImage 框架。

  • 让模型做上面的事情。将 ResizeBilinearLayer 添加到模型,然后添加 PermuteLayer 或 TransposeLayer 以更改维度的顺序。现在图像将调整为 360x640 像素,第一个模型的输出为 1x360x640x3。如果您将这些操作添加到原始模型,然后让 coremltools 将它们转换为适当的 Core ML 层,这是最简单的。