Upgrade to Pro — share decks privately, control downloads, hide ads and more …

みんなラズパイでTensorFlow Liteしよう?

みんなラズパイでTensorFlow Liteしよう?

TensorFlow Liteはラズパイで3分ならぬ1分で動かせます、という話。

この資料は「IoT縛りの勉強会!IoTLT × IoT ALGYAN(あるじゃん) 夏の大LT祭り!」で使用したものです。
https://iotlt.connpass.com/event/85076/

D745b61e4ca7584109de26b112442e56?s=128

Arata Furukawa

June 09, 2018
Tweet

Transcript

  1. © DMM.com LLC みんなラズパイで しよう? 合同会社 2018/06/09 縛りの勉強会! 夏の大 祭り!

    古川新
  2. © DMM.com LLC 古川新 自己紹介 合同会社DMM.com CTO室所属 同 AI部で機械学習エンジニアもしています Blog:

    http://ornew.net/
  3. © DMM.com LLC え ラズパイ持ってるのに 動いてないの ?

  4. © DMM.com LLC なんでラズパイで動かすの? で集めたビッグなデータをどう活用してますか? サーバで予測をするのが本当に最適解? ラズパイの演算リソース、持て余してるんじゃない? ラズパイでデータ集めて、 ラズパイで予測してもいいんじゃないの? 時間がないので、以降は動かす前提で話します(丸投げSorryです)

  5. © DMM.com LLC そもそもラズパイで 動くの?

  6. © DMM.com LLC どうやって動かすの 方法①   パッケージを  ラズパイ向けに ソースから自分で ビルドする

     難易度高い 方法②   を使う
  7. © DMM.com LLC って何? 一言で 、 、ラズパイで動く リソース成約のある環境に最適化された 軽い

  8. © DMM.com LLC こういうやつ とは このスライドは約 秒で スキップされます Android™, iOS™,

    Raspberry Pi™でTensorFlowモデルを動作 させることを目的としたインタプリタエンジン。 Pythonランタイムを必要とせず、各アーキテクチャ向けにネイ ティブコンパイルされた TFLiteインタプリタにより、 推論を省メモリで高速実行する。微調整を主目的としたパラ メータの学習にも対応している。 AndroidではNNAPI(Android Neural Network API)による ハードウェアクセラレーションにも対応している。 3月はじめくらいにRaspberry Piのサポートが追加された。 もう3ヶ月経つのに日本ではあんまり話題になってない。かなしい。
  9. © DMM.com LLC 分クッキング 以下の実行方法は今後変更される可能性があります。 最新の情報は公式ドキュメントを参照してください。

  10. © DMM.com LLC クロスコンパイル MacBook Pro 2015上のUbuntuコンテナで1分くらい をラズパイ 向けにコンパイルします。 ができます。

    $ sudo apt-get update $ sudo apt-get install crossbuild-essential-armhf $ git clone https://github.com/tensorflow/tensorflow.git $ cd tensorflow $ ./tensorflow/contrib/lite/download_dependencies.sh $ ./tensorflow/contrib/lite/build_rpi_lib.sh
  11. © DMM.com LLC コーディング モデルを実行する、 プログラムを実装する モデルを読み込んで、 インタプリタに データを入力して実行するだけです。

  12. © DMM.com LLC ビルド ネイティブコンパイルは下記参考。 $ cd ~ $ git

    clone https://github.com/tensorflow/tensorflow.git $ git clone https://github.com/google/flatbuffers.git $ gcc-6 main.cpp \ > -I$HOME/tensorflow \ > -I$HOME/flatbuffers/include \ > --std=c++11 \ > -L. -ltensorflow-lite \ > -lstdc++ -lpthread -ldl -lm が必要なのでネイティブコンパイルするなら にしてください。 は必須。
  13. © DMM.com LLC 実行したいモデルの変換 tf.contrib.lite.toco_convertで、 の を モデル に変換する SavedModel

    (Protocol Buffers) TFLite Model (FlatBuffers) TFLiteモデルはFlatBuffers形式。 読み込みのフットプリントが小さい。
  14. © DMM.com LLC 完成! いざ実行! のビルド 実行ファイルのビルド モデルデータの準備

  15. © DMM.com LLC 実行エラーでました エラー例 Didn't find custom op for

    name 'ArgMax' with version 1 Didn't find custom op for name 'VariableV2' with version 1 Didn't find custom op for name 'ReorderAxes' with version 1 Registration failed. 一部のオペレーションはビルトインされていない オペレーション対応状況はここ↓ https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/lite/g3doc/tf_ops_compatibility.md
  16. © DMM.com LLC 大体はフリーズすれば 変換前にフリーズすればだいたい解決する。 任意のカスタムオペレーションは実装可能だが、めんどくさい。 推論だけが目的であれば、フリーズするといい。 とかは 側で処理書いたほうが早い。   フリーズ方法

    グラフ定義をtf.graph_util.convert_variables_to_constantsで変換する frozen_graph_def = tf.graph_util.convert_variables_to_constants( sess, sess.graph_def, ['probabilities'])
  17. © DMM.com LLC フリーズしてリトライ 実行できた 魚です Inference time: 0.000000(ms) apple:

    0.02% bed: 0.00% cat: 0.00% dog: 0.00% eye: 0.01% fish: 99.96% grass: 0.00% hand: 0.00% ice creame: 0.00% jacket: 0.00% 実行結果
  18. © DMM.com LLC 結論 ラズパイで は 簡単に動かせる ので、みんなもディープラーニングしよう プログラムはGitHubで公開しています。 https://github.com/maru-labo/doodle/tree/master/examples/tensorflow_lite_rpi

  19. © DMM.com LLC ご清聴ありがとうございました。 Attribution - Android is a trademark

    of Google LLC. - TensorFlow is trademark of Google Inc. - iOS is trademark of Apple Inc. - Raspberry Pi is a trademark of the Raspberry Pi Foundation.