问题标签 [windows-machine-learning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
82 浏览

machine-learning - WinML 术语中的“半浮点支持”如何转化为 DX 功能?

对于一个项目,我们使用 WinML 使用全卷积网络进行推理。我们查询平台上的所有适配器,并将 d3d12 设备显式传递给学习会话。出于性能原因,我们将权重转换为半浮点格式,我们发现某些 GPU 不支持它。创建学习会话时实际上有两种情况:

  • 对于某些 GPU(Intel HD 4600),WinML 会抛出异常,指出设备不支持半浮点格式。对我来说,这不清楚需要什么,据我了解,WinML 不会强制使用在 Nvidia Pascal 及更高版本和 AMD Polaris 及更高版本中发现的特殊 ALU,所以我怀疑这种支持只涉及纹理或缓冲区格式。据我所知,每个 dx11 gpu 都支持 r16f 纹理格式,所以不清楚这里的确切要求是什么,以及是否有预先查询它的方法。目前,我们尝试使用另一个可用设备重新创建会话,如果没有,则回退到 cpu,但这并不是一个真正干净的方法。
  • 对于其他一些 GPU(Nvidia Kepler 代),会发生“未知异常”。它没有明确说不支持半浮点格式,我不知道发生了什么。

任何帮助/见解将不胜感激。问候,文森特

0 投票
2 回答
404 浏览

c# - 在 Windows ML 中将 Image 转换为 TensorFloat(用于转换后的 Keras 模型)

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

但我需要使用 Keras 模型。

因此,我将这个Keras 模型从 Keras 示例转换为 ONNX,该示例也在 MNIST 数据集上使用 python 中的 winmltools 进行了训练:

当我在 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 的方法。

谢谢!

0 投票
1 回答
404 浏览

tensorflow - GPU 上的 WinML 推理时间比 Tensorflow python 慢 3 倍

我尝试在 WinML 中使用在 python 上训练的 tensorflow 模型。我成功地将 protobuf 转换为 onnx。获得以下性能结果:

  • WinML 43s
  • OnnxRuntime 10s
  • TensorFlow 12s

对 CPU 的推断大约需要 86 秒。

在性能工具上,与其他工具相比,WinML 似乎没有正确使用 GPU。WinML 似乎使用 DirectML 作为后端(我们在 Nvidia GPU 分析器上观察到 DML 前缀)。是否可以将 Cuda 推理引擎与 WinML 一起使用?有没有人观察到类似的结果,WinML 在 GPU 上异常缓慢?

0 投票
1 回答
335 浏览

c# - 如何将 VideoFrame 或 ImageFeatureValue 调整为特定大小以匹配输入形状要求?

我的目标是使用 tinyYolov3 模型通过 HoloLens 实时进行物体检测。我想将模型作为 ONNX 文件直接合并到项目中,并计算 HoloLens 本身内部的预测。为此,我计划使用 Windows.media 和 Windows.AI.MachineLearning 库作为相机和我的预测之间的管道。

按照本教程,我能够将帧捕获为VideoFrame ,并且可以将它们转换为ImageFeatureValue以匹配我的输入类型要求。我现在的问题是关于形状要求。Yolo 模型需要一个 3x416x416 帧作为输入,我在网上找不到任何关于调整 VideoFrame 或 ImageFeatureValue 大小的文档。

非常感谢您的帮助。

0 投票
1 回答
203 浏览

c# - 在 Windows ML (UWP) 中张量 0-1 像素范围内的图像

我想在 UWP 应用程序中使用预训练的MobileNet,它期望像素范围为 0-1 的图像与 Windows ML。

问题是,ImageFeatureValue 只支持 0-255 的范围。

所以我需要更换 ImageFeatureValue ,它也可以调整图像大小,但能够使用像素范围 0-1。

在 GitHub 上找到了这种方法

问题是 WritableBitmap 在 UWP 应用程序中不提供 GetBitmapContext().Pixels(仅在 .NET 中)。

我还没有找到另一种将 SoftwareBitmap / WritableBitmap 转换为像素数组的方法。

我怎么能做到这一点?

我认为,TensorFoat 可以像这样从数组中创建:

这个对吗?

谢谢!

0 投票
2 回答
512 浏览

uwp - 无法在 Windows build 19041 上的 UWP 项目中加载 onnx 模型,但它适用于 Windows build 18363

我收到 ArgumentException 消息“无法加载模型并出现错误:未知的模型文件格式版本。” 当尝试在 Windows 构建 19041 上调用 LearningModel.LoadFromStreamAsync(stream) 时。它适用于构建 18363 上的相同文件。ONNX opset 7。

有没有办法避免它?

0 投票
1 回答
475 浏览

c# - 自定义 Vision ONNX 模型停止使用 Windows 10 ML

我已经使用 Custom Vision ai 训练了一个模型。将模型导出为 ONNX 文件。

在我的 C# .net 核心控制台应用程序中,我引用了 windows 10 sdk,如下所述: 从控制台应用程序访问 windows ml

然后我创建一个屏幕截图并将其转换为 SoftwareBitmap -> VideoFrame,最后转换为基于示例的 ImageFeatureValue: Using Image as Tensor input for ONNX models

最后,我将张量绑定到我的 onnx 模型:

这一个月工作得很好!几天后它停止工作。似乎 ONNX 绑定在自定义视觉 AI 中发生了变化。如果将旧模型与新模型进行比较:

旧型号

名称:数据
类型:float32[None,3,224,224]
表示:图像(Bgr8)
BGR 格式的图像。它是一个 [N, C, H, W]-张量。
沿 C 轴的第 1/2/3 个切片分别是蓝色、绿色和红色通道。 旧 ONNX 模型的输入

新模式

名称:数据
类型:float32[None,3,224,224]
表示:图像(Bgr8,Linear,NominalRange_0_255)
BGR 格式的图像。它是一个 [N, C, H, W]-张量。
沿C轴的1st/2nd/3rd切片分别为蓝色、绿色和红色通道,分别
在此处输入图像描述

问题

随着新 ONNX 模型的当前更改,输入绑定失败并出现错误: 模型变量数据,需要 Float[-1,3,224,224,],但尝试使用不兼容的类型 Image[1174x729] 进行绑定。

那么如何在c#中体现模型输入的变化???

0 投票
1 回答
36 浏览

windows-container - EvaluateAsync(),在 2 个不同的会话上序列化评估

我想让 2 个评估在我创建的 2 个不同的设备(和 2 个不同的会话)上并行运行,为此我正在使用 EvaluateAsync()

代码:

预期行为:

只有一个评估调用(假设只有 auto eval_1= session.EvaluateAsync(binding, L""(); 在记录的时间之间),我知道持续时间是 10 毫秒。

如果 EvaluateAsyn 是真正异步的,我希望有 2 次调用,那么时间应该是 2 次调用中的最大值,但是,它需要两倍的时间,即 20 毫秒来执行。

0 投票
3 回答
998 浏览

windows-runtime - Inference of onnx model (opset11) in Windows 10 c++?

In order to use my custom TF model through WinML, I converted it to onnx using the tf2onnx converter. The conversion finally worked using opset 11. Unfortunately I cannot load the model in the WinRT c++ library, therefore I am confused about the opset support: According to the Release Notes, the latest WinML release in May supports opset 11. I updated my VS2019 and downloaded the latest Windows 10 SDK, does the c++ API already include the latest onnx support? Or is there any alternative way to use my model in WinML c++?

0 投票
1 回答
337 浏览

visual-studio - 无法从 NuGet 包打开 microsoft.ai.machinelearning.h

我正在 VS 2019 中开发一个项目,并尝试使用最新的 winrt/c++ 机器学习 api。因此,我进行了以下步骤:

  1. 为特定项目安装 Microsoft.AI.MachineLearning 1.4.0 NuGet 包
  2. 构建项目
  3. 添加#include "winrt/Microsoft.AI.MachineLearning.h" 可惜没有找到头源文件。我究竟做错了什么?