MATLAB ユーザーコミュニティー

MATLAB & Simulink ユーザーコミュニティー向け日本語ブログ

TensorFlow & PyTorch と MATLAB

※この投稿は 2022 年 10 月 4 日に Deep Learning (Sivylla Paraskevopoulou) に投稿されたものの抄訳です。

三井化学、TensorFlowとMATLABを使用してAI・自動化技術を現場展開 など TensorFlow™ や PyTorch® と MATLAB を連携するケースも増えてきました。今回はディープラーニングの他のフレームワークとの連携について R2022b での新機能と関連するサンプルを紹介します。
R2022b 以前のモデル変換のサポートは、ONNX™ からのインポートとエクスポート、TensorFlow からのインポートのみでしたが、R2022b からは TensorFlow に Python® コードとしてモデルをエクスポートできるようになり、PyTorch からモデルをインポートできるようになりました。(画像分類からサポート開始)

Export to TensorFlow

まずは TensorFlow へのネットワークの出力について。
Deep Learning Toolbox Converter for TensorFlow Models の Support Package に TensorFlow へ出力する機能が追加されました。この新しい関数 exportNetworkToTensorFlow をおススメする理由は以下の通りです。
  1. ネットワークやレイヤグラフ(畳み込み、LSTMなど)を直接 TensorFlow に書き出すことができる
  2. ネットワークを出力して、TensorFlow のモデルとして読み込み予測に使用(サンプル:Export Network to TensorFlow and Classify Image
  3. 学習前のネットワークを出力し、それを TensorFlow モデルとして読み込みして学習(サンプル:Export Untrained Layer Graph to TensorFlow
  4. 出力されたモデルは、SavedModel や HDF5 形式など、TensorFlow の標準的な形式で保存可能
  5. 多くの MATLAB のネットワーク層は TensorFlow に変換可能(対応している層のリスト:Layers Supported for Export to TensorFlow
ここでは、ネットワークを TensorFlow に出力、TensorFlow モデルとして読み込みし、SavedModel 形式で保存する簡単なワークフローを紹介します。

MATLAB側の作業

事前学習済みネットワークを読み込むサンプル(Pretrained Deep Neural Networks)では、事前学習されたネットワークを読み込む方法が紹介されています。
net = darknet19;
ネットワーク net を TensorFlow に出力します。exportNetworkToTensorFlow 関数は、TensorFlow モデルを Python パッケージ DarkNet19 として保存する関数です。
exportNetworkToTensorFlow(net, “DarkNet19”)
DarkNet19 パッケージには4つのファイルが含まれています。
  • _init_.py:DarkNet19 フォルダを Python パッケージとして定義するもの
  • model.pyファイル:学習していない TensorFlow-Keras モデルを定義するコードが含まれています
  • TensorFlow モデルを読み込み、HDF5 または SavedModel 形式で保存する方法を説明するREADME.txtファイル
  • モデルの重みを HDF5 形式で格納したweights.h5 ファイル
package_diagram3.png
図: 出力された TensorFlow モデルは、Python パッケージである DarkNet19 に保存される

Python 側の作業

DarkNet19 パッケージから、出力された TensorFlow モデルを読み込みます。
model = DarkNet19.load_model()
エクスポートされたモデルを SavedModel 形式で保存します。
model.save(“DarkNet19_savedmodel”)

Import from PyTorch

次に PyTorch からのネットワークの読み込みについて。
R2022b で Deep Learning Toolbox Converter for PyTorch Models の Support Package が導入されました。この最初のリリースでは、画像分類モデルのインポートをサポートしています。他のモデルタイプのサポートは、将来のリリースで追加される予定です。PyTorch モデルをインポートするには、importNetworkFromPyTorch 関数を使用します。インポートする PyTorch モデルは、事前に学習・トレースされていることを確認してください。
ここでは、PyTorch から画像分類モデルをインポートし初期化する方法を紹介します。

Python 側の作業

TorchVision library から事前学習された画像分類モデルをロードします。
Import torch
from torchvision import models
model = models.mnasnet1_0(pretrained=True)
PyTorch のモデルをトレースします。トレースする方法については Torch documentation: Tracing a function を参照してください。
X = torch.rand(1,3,224,224)
traced_model = torch.jit.trace(model.forward,X)
PyTorchのモデルを保存します。
traced_model.save(“traced_mnasnet1_0.pt”)

MATLAB 側の作業

importNetworkFromPyTorch 関数を使用して、PyTorch モデルを MATLAB にインポートします。この関数は、入力層を持たない初期化されていない dlnetwork オブジェクトとしてモデルをインポートします。
net = importNetworkFromPyTorch(“traced_mnasnet1_0.pt”);
インポートしたネットワークの入力サイズを指定し、画像入力レイヤーを作成します。次に、インポートしたネットワークに画像入力層を追加し、addInputLayer 関数(これも R2022b の新機能)を使ってネットワークを初期化します。
InputSize = [224 224 3];
InputLayer = imageInputLayer(InputSize,Normalization=“none”);
net = addInputLayer(net,InputLayer,Initialize=true);
上記のコードで、PyTorch と MATLAB の入力次元の順序が異なることにお気づきかもしれません。入力の次元についての詳細は Input Dimension Ordering for Deep Learning Platforms をご覧ください。PyTorch モデルのインポート方法、インポートしたモデルの初期化方法、インポートしたモデルで予測や学習などを実行する方法については、importNetworkTFromPyTorch のドキュメントページの Examples に詳細があります。

相互運用に関する機能まとめ

今回紹介した Support Package により、MATLAB の Deep Learning Toolbox と TensorFlow、Pytorch、ONNX 間での相互運用がスムーズになり、オープンソースで利用可能なモデルを活用することはもちろん、様々なフレームワークの良いところ取りをした開発が可能になります。
詳細については以下のページも確認してみてください。
|
  • print

Comments

To leave a comment, please click here to sign in to your MathWorks Account or create a new one.