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 をおススメする理由は以下の通りです。
- ネットワークやレイヤグラフ(畳み込み、LSTMなど)を直接 TensorFlow に書き出すことができる
- ネットワークを出力して、TensorFlow のモデルとして読み込み予測に使用(サンプル:Export Network to TensorFlow and Classify Image)
- 学習前のネットワークを出力し、それを TensorFlow モデルとして読み込みして学習(サンプル:Export Untrained Layer Graph to TensorFlow)
- 出力されたモデルは、SavedModel や HDF5 形式など、TensorFlow の標準的な形式で保存可能
- 多くの 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 ファイル
図: 出力された 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 間での相互運用がスムーズになり、オープンソースで利用可能なモデルを活用することはもちろん、様々なフレームワークの良いところ取りをした開発が可能になります。
詳細については以下のページも確認してみてください。
- Deep Learning Import and Export:利用可能なすべてのインポートおよびエクスポート関数(およびそのドキュメント)
- Interoperability Between Deep Learning Toolbox, TensorFlow, PyTorch, and ONNX:ネットワークのインポートとエクスポートの方法
- Tips on Importing Models from TensorFlow, PyTorch, and ONNX:モデルのインポートに関するよくある質問と回答
- MATLAB Deep Learning Model Hub:MATLAB のモデルリポジトリ(適切なネットワークが見つかるかもしれません)
- Importing Models from TensorFlow, PyTorch, and ONNX:インポートに関するヒントやダウンロードできるサンプル(TensorFlow からのインポートにフォーカス)
- Category:
- 機能と使い方
Comments
To leave a comment, please click here to sign in to your MathWorks Account or create a new one.