CoreML - 如何将 InceptionV3 的图像预处理为 MultiArray <Double, 3>?

Posted

技术标签:

【中文标题】CoreML - 如何将 InceptionV3 的图像预处理为 MultiArray <Double, 3>?【英文标题】:CoreML - How to Preprocess Image for InceptionV3 into MultiArray <Double, 3>? 【发布时间】:2018-01-15 13:28:47 【问题描述】:

我使用 Keras(2.0.4) 和 Tensorflow(1.1.0) 重新训练和微调了 Inception_v3。当我使用 coremltools 将 Keras 模型转换为 MLmodel 时,我得到一个需要输入 MultiArray 的模型。 如果我知道它要求 [Height, Width, RGB] = (299,299,3),这是有道理的。但我不知道如何将 CVPixelBuffer 转换为该格式。

有人可以帮我了解需要进行哪些预处理才能使我重新训练的 incpetion 模型在 coreml 中工作吗?或者我需要在转换中做什么才能接受 CVPixelBuffer?

【问题讨论】:

【参考方案1】:

我重新训练了 InceptionV3,但又回去查看我的代码。我没有在 keras 中将输入形状设置为 299,299。我在预处理中强制我所有的照片都是那个大小。结果是 Model-JSON 不包含输入维度,而是包含以下值:[null, null, null, 3] 并且转换为 CoreML 无法知道输入维度应该是 299、299。我能够保存模型权重,保存模型的 json 字符串,编辑 json 以获得正确的输入 [null, 299, 299, 3],将编辑后的 ​​json 字符串加载为新模型,加载权重和 viola ! coreML 模型现在可以正确接受图像

【讨论】:

【参考方案2】:

这是一个很好的问题。似乎像素缓冲区几乎总是在 BGRA 中,并且在开始时不会崩溃,类预测得很好,但问题是值和向量是不同的,我敢打赌 coreml 不会将 BGRA 转换为 RGB 并且通道的顺序错误.我不再找到任何方法来快速为像素缓冲区进行转换,请让我知道它是否存在。

【讨论】:

以上是关于CoreML - 如何将 InceptionV3 的图像预处理为 MultiArray <Double, 3>?的主要内容,如果未能解决你的问题,请参考以下文章

tf.keras 模型到 coreml 模型,不支持 BatchNormalization

结合 CoreML 和 ARKit

如何将 CoreML 模型转换为 TensorFlow 模型?

如何将 Turi Create 创建的 CoreML 模型转换为 Keras?

如何将 CoreML 模型添加到 Swift 包中?

如何在将图像提供给 CoreML 模型之前对其进行预处理?