"ModelGenがNull" UWP(C#,Visual Studio2019)でopset≧10,format version≧6のonnxモデルを読み込むときの対処
環境
Windows10 2004 OSビルド19041,1052
onnx opset = 11
onnx format version = 6
Visual Studio 2019
問題
Pytorchで作成したonnxをVisual Studio(C#)で動かすチュートリアルを試していた.
こちらのWindows-Machine-Learning-master\Samples\Tutorial Samples\MLNET and Windows ML
が今回の主人公である.
実行すると, NullReferenceExceptionを頂戴したときのおはなし.
調べると読み込んだはずのModelがNullとなっている.
理由はonnxを作成したときのformat versionとopsetの違いである.
NugetのライブラリやOSのバージョンによっては対応していないopsetとformat versionがある.
こちらのエラーメッセージもvisual studio2019のコンソールに表示される筈.
WinRT Failed to load model with error: Unknown model file format version.
解決策
NugetパッケージでMicrosoft.AI.MachineLearning 1.8.0を入れて,
MainPagexaml.csとMNIST.cs(モデルのラッパーファイル)の両方で,
using Windows.AI.MachineLearningをコメントアウトし,
using Microsoft.AI.MachineLearning;を入れる.
Windows.AIとMicrosoft.AIは各種変数の名前が同じなので競合します.
ですのでwindowsの方を消しましょう.
補足
onnxの各バージョンの確認をするにはこちらのNetronを使うのが手っ取り早い github.com
モデルを読み込んだら赤丸でopsetとformat versionをチェックできる
確認欄は下図のかんじ.
こちらのformat versionと,Importsのai.onnx v○○の○○がopsetに相当している.
MLNET and Windows ML にあるonnxモデルは となっており,opset=9,format version = 6で,windows.AIでは読み込めない.
UWPの知見と人材が少なすぎて泣けてくる.