在 Windows ML 中将图像转换为 TensorFloat(对于转换后的 Keras 模型)

Convert Image to TensorFloat in Windows ML (For converted Keras model)

我按照 this 官方教程创建了一个可以使用预训练模型检测手写数字的 UWP 应用程序。

但我需要使用 Keras 模型。

所以我将 this Keras 模型从 Keras 示例转换为 ONNX:

onnx_model = winmltools.convert_keras(model, 7, name='mnist')   
print(onnx_model.graph.input)   
winmltools.save_model(onnx_model, "mnist_tf.onnx")`

当我在 Visual Studio 中导入此代码时,mlgen 会为输入生成此代码:

public TensorFloat conv2d_1_input; // shape(-1,28,28,1)

但教程中的原始模型是:

public ImageFeatureValue Input3; // BitmapPixelFormat: Gray8, BitmapAlphaMode: Premultiplied, width: 28, height: 28

如何将 ImageFeatureValue 转换为 TensorFloat?

我还需要导入图像文件,但我只找到了同样使用 ImageFeatureValue 而不是 TensorFloat 的方法。

谢谢!

我只想修改 Visual Studio 中 mlgen 工具生成的代码以匹配教程示例的代码!我偶尔发现 mlgen 工具会输出一些用于格式化模型的奇怪代码...

你有几个选择。

  1. 您可以修改生成的代码以接受 ImageFeatureValue 作为 mnistInput。请注意,只要形状兼容,ImageFeatureValue 就可以被 Bind 调用接受并转换为 TensorFloat。
  2. 您可以使用WinMLDashboard tool to add Image Denotation and image metadata的模型。我没有看到您链接到的 Keras 模型,但我假设它没有教程中的 mnist 模型所具有的任何图像元数据。像这样将“Type denotation”设置为“Image”:

以及此的元数据:

其中标称范围为 0-255。教程中的模型就是这样设置的。