21
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

pytorchのモデルをtfliteに変換する

Posted at

はじめに

エッジでのDeep Learningを考えた時、tfliteに変換することが必要です。
というわけで、
PyTorchで学習したモデルをTFLiteモデルに変換して使う - qiita
ほぼこれですが、僕のマシンでは動かない部分があったので置いておきます。

元記事では
pytorch -> onnx -> keras -> tflite
という手順で変換を行なっていますが、本記事では

pytorch -> onnx -> tensorflow(.pbファイル) -> tflite
という手順での変換を行いました。

使うモデル

エッジでStyle Transferしたいですよね。
というわけで、軽くて動きそうなのでpytorch/examples/tree/master/fast_neural_style - githubを変換します。

Style Transfer(画風変換)

Style Transferとは、その名の通りイラストなどを含む画像の、画風を変換するというタスクです。
このタスクでは、画像というのが『内容(content)』と『スタイル(style)』の組み合わせであると考え、内容をそのままにしたままスタイルのみを変換する、ということを考えます。
以下の画像の例では、一番上の元の画像の内容を保ったまま、各行の左のスタイル画像のスタイルを転写しています。

スクリーンショット 2019-12-07 0.18.41.png

画像元

また、以下の画像では左の、荒いスケッチを入力するだけで右の写真のような画像を生成する、ということが研究レベルではできています。
(大事なことなので二度言いますが、右の画像は現実のものではなく、左のスケッチから生成したものです)
スクリーンショット 2019-12-07 0.23.14.png
元動画リンク

余談ですが、一時期話題になった、SNOWの顔画像の年齢を変更する機能なども、画風変換です。

モデルの変換

実行環境

  • onnx-tf == 1.5.0
  • onnx-coreml == 1.0
  • tensorflow == 1.15.0
  • torch == 1.3.0
  • torchvision == 0.4.2

※pytorchですが、動かなかった場合はpyTorchは1.1系、torchvisionは0.3系でトライしていただければと思います

※tensorflowは1.15以外だと動作ができているのは確認してません。
1.14でもそれ以下でもダメでしたし、2.0のベータ版でもエラーでした。

PyTorch -> onnx

onnx tutorialを参考にしました。

$ pip install torchvision onnx-coreml
$ git clone https://github.com/pytorch/examples
$ cd examples/fast_neural_style
$ ./download_saved_models.sh
$ convert -size 250x540 xc:white png24:dummy.jpg
$ python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/mosaic.pth --cuda 0 --export_onnx ./saved_models/mosaic.onnx

onnx -> tensorflow

onnx-tensorflowを利用します。

$ onnx-tf convert -i /path/to/mosaic.onnx -o /path/to/mosaic.pb

tensorflow -> tflite

import tensorflow as tf

input_arrays = ["image_array"]
output_arrays = ["converted_array"]
converter = tf.lite.TFLiteConverter.from_frozen_graph(
    save_path,
    input_arrays,
    output_arrays
)
tflite_model = converter.convert()

これによりmosaic.tfliteを得ることができました。

21
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?