トップ > 【Unity】ML.NETの機械学習モデルをUnityに組み込む方法を紹介します!
更新日 2023/7/30
2023/7/30
ビルド前の確認を追記しました。mlnetファイルが見つからない、モデルビルダーが生成したコードが利用できないなどの問題が発生した場合はこの項目をご覧下さい。

【Unity】ML.NETの機械学習モデルをUnityに組み込む方法を紹介します!

ML.NETを利用して機械学習モデルをUnityに組み込む方法を紹介します。今回はML.NETのチュートリアルをUnity上で再現してみたいと思います。


チュートリアルの概要

ローカルビジネスレビューサイトYelpのレビューを元にML.NETの機械学習モデルで学習して任意のレビューが肯定的なのか、あるいは否定的なのかを推測するチュートリアルとなっています。

レビューデータは UCI Machine Learning Repository からダウンロードできます。

MLNET_Tutorial_DownloadData MLNET_Tutorial_DownloadData2

sentiment_labelled_sentences.zipファイルを解凍してyelp_labelled.txtを学習データとして使います。中身は各レビューに対して1と0が割り振られていて1が肯定的なレビュー、0が否定的なレビューとなっています。

Wow... Loved this place.1
Crust is not good.0
Not tasty and the texture was just nasty.0
Stopped by during the late May bank holiday off Rick Steve recommendation and loved it.1
The selection on the menu was great and so were the prices.1

1000個のレビューを学習したモデルが任意のレビューを推測することになります。


機械学習モデルの作成

Visual Studioで機械学習モデルをプロジェクトに追加して動的リンクライブラリ(DLL)を作成します。このDLLをUnityへインポートして使います。


ML.NETモジュールをインストールする

Visual Studio Installerを起動してML.NET Model Builderモジュールをインストールします。

MLNET_Tutorial_VisualStudioInstaller

クラスライブラリプロジェクトを作成する

クラスライブラリ(.NET Framework)を選択します。

MLNET_Tutorial_CreateProject

フレームワークには .NET Framework 4.x 番台を使います。今回は4.7.2を利用します。

MLNET_Tutorial_ProjectFramework

機械学習モデルの追加

プロジェクトへ機械学習モデルを追加します。

MLNET_Tutorial_AddMachineLearningModel

SentimentModel.mbconfigという名前で作成します。

MLNET_Tutorial_AddMachineLearningModel2

データ分類シナリオを選択

シナリオタブでデータ分類シナリオを選択します。

MLNET_Tutorial_Scenario

トレーニング環境の選択

環境タブでトレーニングの環境にローカル(CPU)を選択します。

MLNET_Tutorial_TrainingEnvironment

サンプルデータの追加

データタブで入力に先程ダウンロードしておいたYelpのレビューデータを設定し、予測する列(ラベル)にcol1を選択します。

MLNET_Tutorial_AddData

トレーニングする

トレーニングタブでトレーニングする時間を60秒にしてトレーニングを開始します。

MLNET_Tutorial_Training

60秒待って正しくトレーニングが終了したことを確認します。

MLNET_Tutorial_TrainingResult

トレーニング結果の評価

評価タブでcol0に任意のレビューをコピーして予測ボタンを押して結果を確認して下さい。

MLNET_Tutorial_Evaluate

モデルの使用

使用タブでコードスニペットをコピーします。コピーしたコードはUnityのスクリプトで使います。

MLNET_Tutorial_Consume

ビルド前の確認

SentimentModel.mbconfig内のSentimentModel.mlnetのプロパティ「出力ディレクトリにコピー」「新しい場合はコピーする」になっていることを確認して下さい。「コピーしない」になっている場合はビルドディレクトリーにmlnetファイルが生成されないので注意して下さい。

MLNET_Tutorial_Confirm1

SentimentModel.mbconfig内のSentimentModel.consumption.csとSentimentModel.training.csのプロパティ「ビルドアクション」「コンパイル」になっていることを確認して下さい。「なし」になっている場合はDLLの中にモデルビルダーが生成したプログラムコードがビルドされませんので注意して下さい。

MLNET_Tutorial_Confirm2

ビルド設定

アクティブな構成をReleaseにしてプロジェクトの設定のビルド項目の対象プラットフォームをx64にします。

MLNET_Tutorial_BuildSettings

機械学習モデルのビルド

ビルドしてbin/ReleaseにDLLとSentimentModel.mlnetが生成されたことを確認して下さい。

MLNET_Tutorial_DLL MLNET_Tutorial_SentimentModelData

次の章ではこれらのデータをUnityへ組み込む方法を紹介します。


ビルドした機械学習モデルをUnityへ組み込む

ビルドした機械学習モデル(DLL)をUnityへ組み込みます。


プロジェクトの作成

適当なUnityプロジェクトを作成します。

MLNET_Tutorial_UnityProject

DLLの追加

Assets以下へビルドした全てのDLLをコピーします。

MLNET_Tutorial_ImportDLL

Newtonsoft.Json.dllで競合エラーが発生します。

MLNET_Tutorial_DLL_Error

パッケージマネージャーを開いてVersion Controlを削除します。

MLNET_Tutorial_RemoveVersionControl

DLL関係でエラーが出力されないことを確認して下さい。


機械学習データをコピーする

SentimentModel.mlnetファイルをプロジェクトのルートへコピーします。

MLNET_Tutorial_SentimentModelCopy

スクリプトの作成

先程コピーしておいたコードスニペットをStartメソッドへ貼り付けます。result.PredicatedLabelに推測結果が格納されていますので1の場合は肯定的、0の場合は否定的とログ表示します。

using MyMLApp;
using UnityEngine;

public class MLTest : MonoBehaviour
{
void Start()
{
//Load sample data
var sampleData = new SentimentModel.ModelInput()
{
Col0 = @"Crust is not good.",
};

//Load model and predict output
var result = SentimentModel.Predict(sampleData);

Debug.Log(sampleData.Col0 + (result.PredictedLabel == 1 ? "は肯定的です" : "は否定的です"));
}
}

シーンの作成

適当なゲームオブジェクトを作成して先ほどのスクリプトを追加します。

MLNET_Tutorial_UnityScene

シーンの実行

実行して Crust is not good. は否定的なレビューであることを確認します。

MLNET_Tutorial_NegativeResult

続いてレビュー文から not を消してもう一度実行して下さい。

MLNET_Tutorial_PositiveResult

Crust is good. は肯定的なレビューになることを確認します。


まとめ

UnityにML.NETを組み込む方法を紹介しました。ML.NETは多くのライブラリに依存しているためUnityにインポートするとライブラリの競合が発生する場合があります。今回はVersion Controlを削除することでNewtonsoft.Json.dllの競合を回避しましたが、他にも色々なパッケージを利用すると競合を回避できない状況に陥ることがあります。ですので無理にUnityへインポートするのではなく、機械学習用のサーバーを立てて通信する方法をオススメします。


機械学習ライブラリML.NETをUnityに組み込む方法を紹介しました。
今やAIをはじめ機械学習プログラム全盛期なのでどんどん活用していきましょう。


関連ページ


Copyright ©2022 - 2024 うにぉらぼ