TensorFlow、PyTorch、および ONNX からモデルをインポートする際のヒント
このトピックでは、TensorFlow™、PyTorch®、または ONNX™ からモデルを MATLAB® ネットワークとしてインポートする際によくある問題を克服する方法に関するヒントを提供します。このトピックの各セクションを個別に読むことができます。Deep Learning Toolbox™ のインポート関数およびエクスポート関数の概要については、Interoperability Between Deep Learning Toolbox, TensorFlow, PyTorch, and ONNXを参照してください。
Deep Learning Toolbox のインポート関数
次の表は、Deep Learning Toolbox のインポート ツールの一覧です。これらのツールを使用して、TensorFlow、PyTorch、および ONNX からネットワークをインポートします。
ヒント
ディープ ネットワーク デザイナー アプリを使用して、TensorFlow ネットワークおよび PyTorch ネットワークをインポートできます。インポート時に、アプリは注意が必要な問題の詳細を含むインポート レポートを表示します。
インポート アプリやインポート関数を使用するには、関連するサポート パッケージが必要です。サポート パッケージがインストールされていない場合、ソフトウェアによって、アドオン エクスプローラーの対応するサポート パッケージへのダウンロード リンクが表示されます。推奨される方法は、実行しているバージョンの MATLAB の既定の場所にサポート パッケージをダウンロードすることです。File Exchange からサポート パッケージを直接ダウンロードすることもできます。
問題の検出
外部プラットフォームからネットワークをインポートする場合、ネットワークが使用可能になる前に何らかの対応が必要になることがあります。ディープ ネットワーク デザイナー アプリを使用してネットワークをインポートした場合、インポート後にアプリによってインポート レポートが生成されます。このレポートには、完成させる必要があるプレースホルダー層がネットワークにあるかどうかなどの問題が表示されます。ディープ ネットワーク デザイナー は、TensorFlow モデルおよび PyTorch モデルのインポートをサポートしています。

自動生成されるカスタム層
ディープ ネットワーク デザイナー アプリと
importNetworkFromTensorFlow、importNetworkFromPyTorch、およびimportNetworkFromONNXの各関数は、ソフトウェアが同等の組み込み MATLAB 関数または層に変換できない TensorFlow 層、PyTorch 層、または ONNX 層をインポートするときに、カスタム層またはプレースホルダー関数を含むカスタム層を自動的に生成できます。ディープ ネットワーク デザイナー アプリと
importNetworkFromTensorFlow、importNetworkFromPyTorch、およびimportNetworkFromONNXの各関数は、次の手順を順番に試して、外部プラットフォームの層を MATLAB にインポートします。ソフトウェアは、外部層を組み込み MATLAB 層としてインポートします。
ソフトウェアは、外部層を組み込み MATLAB 関数としてインポートします (TensorFlow および PyTorch のみ)。
ソフトウェアは、外部層をカスタム層としてインポートします。
ソフトウェアは、プレースホルダー関数をもつカスタム層として外部層をインポートします。
カスタム層の生成の詳細については、各関数の Algorithms セクション (アルゴリズム (TensorFlow)、アルゴリズム (PyTorch)、およびアルゴリズム (ONNX)) を参照してください。
入力次元の順序
Deep Learning Toolbox、TensorFlow、PyTorch、および ONNX では、入力データの次元の順序が異なります。次の表は、さまざまな入力タイプについて、プラットフォーム間の入力次元の順序を比較したものです。
| 入力タイプ | 次元の順序 | |||
|---|---|---|---|---|
| MATLAB | TensorFlow | PyTorch | ONNX | |
| 特徴 | CN | NC | NC | NC |
| 2 次元イメージ | HWCN | NHWC | NCHW | NCHW |
| 3 次元イメージ | HWDCN | NHWDC | NCDHW | NCHWD |
| ベクトル シーケンス | CSN | NSC | SNC | NSC |
| 2 次元イメージ シーケンス | HWCSN | NSWHC | NCSHW | NSCHW |
| 3 次元イメージ シーケンス | HWDCSN | NSWHDC | NCSDHW | NSCHWD |
表内の変数名:
N — 観測値の数
C — 特徴またはチャネルの数
H — イメージの高さ
W — イメージの幅
D — イメージの奥行き
S — シーケンス長
dlnetwork での予測のためのデータ形式
ディープ ネットワーク デザイナー アプリと importNetworkFromTensorFlow 関数は、初期化された dlnetwork オブジェクトとして TensorFlow ネットワークをインポートします。例については、TensorFlow ネットワークのインポートとイメージの分類を参照してください。ネットワークの入力サイズが固定でない場合、ソフトウェアは入力層のない未初期化の dlnetwork オブジェクトとしてモデルをインポートします。このネットワークを初期化する方法の例については、TensorFlow ネットワークのインポートと初期化を参照してください。
ディープ ネットワーク デザイナー アプリと importNetworkFromPyTorch 関数は、未初期化または初期化済みの dlnetworkオブジェクトとして PyTorch ネットワークをインポートします。インポートしたネットワークが初期化されていない場合は、ネットワークを使用する前に、次のいずれかを実行します。
ディープ ネットワーク デザイナー アプリで、入力層を追加します。エクスポートすると、アプリによってネットワークが初期化されます。あるいは、インポートしたネットワークに入力層を追加し、
addInputLayer関数を使用してネットワークを初期化します。例については、PyTorch からのネットワークのインポートと入力層の追加を参照してください。適切なデータ形式で
dlarrayオブジェクトを定義し、initialize関数を使用してネットワークを初期化します。例については、PyTorch からのネットワークのインポートと初期化を参照してください。
PyTorch ネットワークは、名前と値の引数 PyTorchInputSizes を使用し、初期化された dlnetwork オブジェクトとしてインポートできます。例については、PyTorchInputSizes を使用した PyTorch からのネットワークのインポートを参照してください。
importNetworkFromONNX 関数は、初期化された dlnetwork オブジェクトとして ONNX ネットワークをインポートします。例については、ONNX ネットワークのインポートとイメージの分類を参照してください。
dlnetwork オブジェクトを使用して予測するには、入力データを適切なデータ形式の dlarray オブジェクトに変換しなければなりません。例については、TensorFlow ネットワークのインポートとイメージの分類を参照してください。次の表を使用して、各入力タイプと層に適したデータ形式を選択します。
| 入力タイプ | 入力層 ** | 入力形式 * |
|---|---|---|
| 特徴 | featureInputLayer | CB |
| 2 次元イメージ | imageInputLayer | SSCB |
| 3 次元イメージ | image3dInputLayer | SSSCB |
| ベクトル シーケンス | sequenceInputLayer | CBT |
| 2 次元イメージ シーケンス | sequenceInputLayer | SSCBT |
| 3 次元イメージ シーケンス | sequenceInputLayer | SSSCBT |
* Deep Learning Toolbox では、各データ形式は次のラベルのいずれかでなければなりません。
S— 空間C— チャネルB— バッチ観測値T— 時間またはシーケンスU— 指定なし
** dlnetwork オブジェクトには入力層は必要ありません。ネットワークは、入力データ形式から入力層のタイプを推定できます。
データ形式の詳細については、dlarray を参照してください。
入力データの前処理
事前学習済みのネットワークを新しいイメージの予測または転移学習に使用するには、インポートされたモデルの学習に使用されたイメージと同じ方法でイメージを前処理しなければなりません。最も一般的な前処理ステップは、イメージのサイズ変更、イメージの平均値の減算、イメージの BGR 形式から RGB 形式への変換です。
学習および予測用のイメージの前処理の詳細については、イメージの深層学習向け前処理を参照してください。
参考
ディープ ネットワーク デザイナー | importNetworkFromONNX | importNetworkFromPyTorch | importNetworkFromTensorFlow | dlarray