首页 > 解决方案 > Coremltools:如何从输入图像中减去图像的平均值?

问题描述

我正在使用 swift 来运行我的模型,该模型是从 keras 转换而来的,不幸的是,在 swift 上运行时结果非常糟糕,所以我考虑可能会在我的预处理中运行一些东西。然后我发现 coremltools 可以在以下代码中使用特定值(如 255 和 -1)缩放和减去输入:

coremltools.converters.keras.convert(model,image_scale=255,red_bias=-1,green_bias=-1,blue_bias=-1) 

但是,如果我需要从图像中减去输入图像的平均值并进行归一化,我该怎么办?我应该使用 coremltools 还是 swift?

标签: averagenormalizationmeansubtractioncoreml

解决方案


我不确定是否有一种简单的方法可以做到这一点,但 Core ML 模型确实支持从输入图像中减去平均图像的“NeuralNetworkMeanImage”操作。这是模型的“NeuralNetworkPreprocessing”部分的一部分。

当您使用image_scalered_bias时,NeuralNetworkPreprocessing 使用 NeuralNetworkImageScaler 操作。但是您想改用 NeuralNetworkMeanImage 操作。

似乎不允许coremltools.converters.keras.convert()您选择这种平均图像操作。因此解决方案是编写一个新脚本来加载转换后的 mlmodel 并用 NeuralNetworkMeanImage 替换预处理操作。这需要熟悉 protobuf 格式。


推荐阅读