Slide 1

Slide 1 text

PyTorchモデルの組み込み変換 機械学習の社会実装勉強会第22回 Henry 2023/4/29

Slide 2

Slide 2 text

Pytorchモデルを変換するモチベーション ■ モデル開発においては、Pytorchのエコシステムが活発 ■ モデルデプロイ、特にエッジデバイスにおいては、Tensorflow のエコシステムが活発 ■ Pytorchでモデルを学習して、Tensorflowモデルに変換しデプ ロイすることが考えられます ■ 今日はこの流れの基本と注意点について紹介 2

Slide 3

Slide 3 text

Pytorch ⇛ Tensorflow ■ 一回だけの変換ではできない ■ エッジではTF Liteモデルが多いので、実は以下のアプローチ になる ● Pytorch ⇛ ONNX ⇛ Tensorflow ⇛ TF Lite ■ 一つずつ見ていきます 3

Slide 4

Slide 4 text

Pytorch ⇛ ONNX ■ Open Neural Network Exchange (ONNX) は共通になろうと するニューラルネット記述方式 ● https://onnx.ai/ ■ pytorch_modelにモデルをロード ● 例えば pytorch_model = timm.create_model('mobilenetv2_100') ■ torchに内蔵された関数で変換できる ● torch.onnx.export(model=pytorch_model, args=torch.ones((1, 3, 224, 224)), f='./model.onnx', input_names=['input'], output_names=['output']) 4

Slide 5

Slide 5 text

ONNX ⇛ Tensorflow ■ ONNXライブラリに内蔵された関数で変換できる ■ モデルロード ● onnx_model = onnx.load('./model.onnx') ■ モデルチェック ● onnx.checker.check_model(onnx_model) ■ モデル変換 ● from onnx_tf.backend import prepare prepare(onnx_model).export_graph('./model.tf') 5

Slide 6

Slide 6 text

Tensorflow ⇛ TF Lite ■ Tensorflowに内蔵される関数で変換できる ■ 変換準備 ● converter = tf.lite.TFLiteConverter.from_saved_model('./model.tf') ■ 変換実行 ● tflite_f32_model = converter.convert() ■ 変換書き出し ● with open('./model.tflite', 'wb') as f: f.write(tflite_f32_model) 6

Slide 7

Slide 7 text

Netronでモデル構造を可視化 ■ ニューラルネットの構造と入出力の形を可視化するツール ● https://github.com/lutzroeder/netron ● パッケージ版とブラウザ版がある ■ 生成されたTF Liteモデルを渡すと ● 至るところでTranspose! 7

Slide 8

Slide 8 text

ライブラリのNCHWとNHWC ■ Pytorchを含むほとんどのライブラリは Batchsize, Channel , Height, WidthのNCHW形式を取る ■ 残念ながらTensorflowがNHWC形式 ■ 先のやり方では、ONNXをTensorflowへの変換では、NCHW の痕跡はまだ残っているので、計算の前後などでTranspose を入れてデータの軸を調整しないといけない 8

Slide 9

Slide 9 text

パラメータの軸を変換する ■ 以下のツールを使えば、NCHW形式のONNXモデルをきれい にNHWC形式のTensorflowモデルに変換できる ● https://github.com/PINTO0309/onnx2tf ■ 名の通り、ONNX ⇛ Tensorlflowなので、全体の変換手順が Pytorch ⇛ ONNX ⇛ Tensorflow ⇛ TF Liteのままで変わらな い 9

Slide 10

Slide 10 text

変換結果 ■ Transpose層がちゃんと消えて、入力もNHWCに ■ バッチサイズ1の推論スピードも速くなる ● 改善前の10回平均:11.19 e-3秒 (±0.28 e-3秒) ● 改善後の10回平均: 7.82 e-3秒 (±0.14 e-3秒) 10

Slide 11

Slide 11 text

まとめ ■ モデル変換の基本 ■ NCHWとNHWCの違いと注意 11