12
14

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 5 years have passed since last update.

kerasモデルからedgeTPUモデルへの変換方法

Last updated at Posted at 2019-07-21

目的

Coral USBアクセラレータを用いて推論を高速化しようと。
すると、kerasで特定のタスク用に転移学習(transfer learning)したモデルをCoralのedgetpu用に変換させる必要があります。

※コードは十分検証していますが、素人ですので誤りや説明に過不足がありましたら、ご指摘いただきますと幸いです。

手順

  1. keras(tensorflow)モデルを量子化(8bit)のtensorflow-lite(tflite)形式のモデルに変換。
  2. tfliteモデルを専用コンパイラでedgetpuモデルに変換。

試したこと

@iwatake2222 さんの以下の記事の方法(tflite_convertツール使用)ではうまくできませんでした。
Deep Learningアプリケーション開発 (7) TensorFlow Lite with Python on Raspberry Pi and Edge TPU
最終的にedgetpuモデルの変換までできましたが、推論の結果がみんな全部同じ値となってしまいました(自分があまり理解できず、パラメータの調整が下手くそだっただけかもしれません)。

解決策

tensorflow 2.0(Beta版)のTFLiteConverter.from_keras_model_fileのAPIを使用して、tfliteモデルに変換してから、edgetpuモデルに変換するとうまくいきました。

tfliteモデルへの変換

converter = tf.compat.v1.lite.TFLiteConverter.from_keras_model_file(kerasモデルパスの指定)
converter.representative_dataset = representative_dataset_gen  ← 量子化のキャリブレーション用のデータを生成する関数
converter.target_spec.supported_ops = [tf.lite.OpsSet.TFLITE_BUILTINS_INT8]
converter.inference_input_type = tf.uint8
converter.inference_output_type = tf.uint8
converter.optimizations = [tf.lite.Optimize.DEFAULT]
tflite_model = converter.convert()

量子化のキャリブレーション用のデータを生成する関数。

def representative_dataset_gen():
    for i in range(サンプル数):
        yield [サンプルデータ[i: i + 1]]

ファイルに書き出します。

with open(model_name + '.tflite', 'wb') as o_:
    o_.write(tflite_model)

edgetpuモデルへの変換

edgetpu_compiler tfliteモデルパスの指定

※edgetpuのインストールが必要。

サンプルコード

githubにアップしています(google colab用)。
https://github.com/seeouy/edgetpu_model_converter

※サンプルコードには、fashion_mnistのカスタムモデルを作成していますが、すでにトレーニング済みのモデルがある場合は、読み飛ばしてください。

精度の劣化

基本的に、edgetpuモデルは量子化(重み等の情報を通常の32ビットから8ビットに落とす)が必要なため、オリジナルモデルと比べると若干精度(accuracy)が劣ります。

検証

サンプルコードのモデルを用いて、オリジナルのkerasモデルおよびedgetpuモデルに変換した後の精度を評価しました。

モデル accuracy
オリジナル 0.6538
edgetpu(サンプル数=100) 0.6535
edgetpu(サンプル数=1000) 0.6537

以上の結果から、サンプル数を増やせば、オリジナルのaccuracyに近づけることができると考えられます。

※サンプル数とは、量子化のキャリブレーション用のデータを生成するときのサンプル数のこと。

参考

12
14
2

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
12
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?