Windows ML モデルを使用してアプリに統合する

このガイドでは、Windows ML API を使用してモデルを Windows アプリに統合する方法について説明します。 別の方法として、Windows ML の自動コード ジェネレーターを使用する場合は、mlgen を確認してください。

重要な API:Windows.AI.MachineLearning

次に挙げる Windows ML の基本的な構成要素について説明します。

  • モデル
  • セッション
  • デバイス
  • バインド

これらを使用して、Windows ML でモデルの読み込み、バインド、評価を行います。

また、GitHub のサンプル アプリを参照して、エンド ツー エンドの Windows ML コード例を確認することもお勧めします。

次の動画では、これらの API の動作を短いデモで紹介します。


C++ での WinML API の使用

WinML API は C++/Cx と C++/WinRT の両方で使用できますが、C++/WinRT バージョンを使用することをお勧めします。C++ のコーディングがより自然にでき、開発作業のほとんどを、開発を先に進めるために注力できるためです。 C++/WinRT API を使用する個々の状況に応じて、以下の手順に従ってください。

  • Windows 1803 以前を対象とする場合は、「チュートリアル:既存の WinML アプリを NuGet パッケージに移植する」を参照してください。
  • 新しい C++ アプリケーションを作成する場合は、「チュートリアル: Windows Machine Learning のデスクトップ アプリケーションの作成 (C++)」を参照し、「モデルを読み込む」までのステップを実行します。
  • (C++/WinRT 用にまだ設定されていない) 既存の C++ アプリケーションがある場合は、次の手順に従って、C++/WinRT 用にアプリケーションを設定します。
    1. 最新バージョンの Visual Studio 2019 (任意のエディション) がインストールされていることを確認します。
    2. Windows 10 向け SDK バージョン 1803 以降が用意されていることを確認します。
    3. Visual Studio Marketplace から C++/WinRT Visual Studio 拡張機能 (VSIX) をダウンロードしてインストールします。
    4. プロジェクトの .vcxproj ファイルに <CppWinRTEnabled>true</CppWinRTEnabled> プロパティを追加します。
      <Project ...>
          <PropertyGroup Label="Globals">
              <CppWinRTEnabled>true</CppWinRTEnabled>
      ...
      
    5. C++/WinRT には C++17 標準の機能が必要なため、プロジェクト プロパティの [C/C++] > [言語] > [C++ 言語標準] > [ISO C++17 標準 (/std:c++17)] を設定します。
    6. [準拠モード: はい (/permissive-)] をプロジェクト プロパティで設定します。
    7. 注意すべきもう 1 つのプロジェクト プロパティは、[C/C++] > [全般] > [警告をエラーとして扱う] です。 これを好みに合わせて [はい (/WX)] または [いいえ (/WX-)] に設定します。 場合によっては、cppwinrt.exe ツールによって生成されたソース ファイルは、それらに実装を追加するまで警告を生成します。
    8. また、VSIX は、C++/WinRT の投影された型の Visual Studio ネイティブのデバッグの視覚化 (NatVis) を提供し、C# デバッグと同様のエクスペリエンスを実現します。 Natvis はデバッグ ビルドで自動で行われます。 シンボル WINRT_NATVIS を定義することで、リリース ビルドを選択できます。
    9. これで、プロジェクトが C++/WinRT 用に設定されました。 詳細については、「C++/WinRT」を参照してください。

Note

Windows ML に関するヘルプについては、次のリソースを参照してください。

  • Windows ML に関する技術的な質問をしたり、質問に回答したりするには、Stack Overflowwindows-machine-learning タグを使用してください。
  • バグを報告するには、GitHub で問題を提出してください。