Custom Vision の WinML モデル Export を利用した ユニバーサル Windows アプリ の開発


[English Ver]
Cognitive Services Custom Vision Service は 画像分類 および 物体認識を行う ML (機械学習) モデル を数枚の写真から作成できるサービスです。作成した ML モデルは Web API として利用できるだけでなく、アプリ等で利用できる形でダウンロードすることも可能です。これにより、Web API ではなく、ローカルの環境で (=インターネット接続なしで) Custom Vision を利用できることになります。

ONNX 形式で定義された WinML を利用すると、ユニバーサル Windows  アプリ (UWP: Universal Windows App) に MLモデルによる分析機能を簡単に追加することが可能です。

Custom Vision Service を用いて WinML フォーマットの ML モデルを作成するには、Custom Vision Service の新規 Project 作成で、"compact" タイプの Domain を選択する必要があります。作成済みの Project でも、設定で Domain Type を compact に変更し、再度 Train を行うことでモデルを再作成可能です。

"compact" タイプのモデルを作成、学習が完了すると、"export" ボタンから ML モデルをダウンロード可能になります。"WinML" を選択すると、"*.onnx" という形式のファイルがダウンロードできます。

Visual Studio 2017 に加えて  Visual Studio Tools for AI (無償) をインストールすると、 Visual Studio プロジェクトに ONNX ファイルを追加するだけで、それを利用するためのライブラリが自動で作成されます。Custom Vision Service 上の認識番号でクラスが作成させているため、名前を変更してみると分かりやすくなります。

自動作成されたライブラリは Windows.AI.MachineLearning というライブラリを使用ししており、LearningModel を作成して (CreateXXXXXModel)、EvaluateAsync メソッドで投入された ModelInput を判定して、ModeOutput を出力します。この ModelInput は Video Frame 型になります。

"FruitDetection.onnx" という名前の ONNX モデルを呼び出すサンプルコードはこちら;

private async Task EvaluateVideoFrameAsync(VideoFrame inputFrame)
{
    if (inputFrame != null)
    {
        try
        {
            // Get ONNX file
            string modelPath
                = Path.Combine(Windows.ApplicationModel.Package.Current.InstalledLocation.Path, "FruitDetection.onnx");
            var modelFile = await StorageFile.GetFileFromPathAsync(modelPath);

            // Create WinML Model
            var model = new FruitDetectionModel();
            var learninModel = await model.CreateFruitDetectionModel(modelFile);

            // Set image(VideoFrame)
            var input = new FruitDetectionModelInput
            {
                data = inputFrame
            };

            // Detect image
            var output = await learninModel.EvaluateAsync(input);

            ResultText.Text = output.classLabel[0];
            ResultText.Visibility = Visibility.Visible;
        }
        catch(Exception ex)
        {
        }
    }
}

FruitDetection.onnx は Custom Vision Service から以下のようにフルーツの種類を判別するモデルです。

こちらを利用して、以下のようにローカルの写真を選択して判別を行う UWP アプリ (ソースコード) を作成できます。

Comments (0)

Skip to main content