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/

Arata Furukawa

June 09, 2018
Tweet

More Decks by Arata Furukawa

Other Decks in Technology

Transcript

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

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

    View full-size slide

  9. © DMM.com LLC
    分クッキング
    以下の実行方法は今後変更される可能性があります。
    最新の情報は公式ドキュメントを参照してください。

    View full-size slide

  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

    View full-size slide

  11. © DMM.com LLC
    コーディング
    モデルを実行する、
    プログラムを実装する
    モデルを読み込んで、 インタプリタに
    データを入力して実行するだけです。

    View full-size slide

  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
    が必要なのでネイティブコンパイルするなら
    にしてください。 は必須。

    View full-size slide

  13. © DMM.com LLC
    実行したいモデルの変換
    tf.contrib.lite.toco_convertで、
    の を モデル に変換する
    SavedModel
    (Protocol Buffers)
    TFLite Model
    (FlatBuffers)
    TFLiteモデルはFlatBuffers形式。
    読み込みのフットプリントが小さい。

    View full-size slide

  14. © DMM.com LLC
    完成!
    いざ実行!
    のビルド
    実行ファイルのビルド
    モデルデータの準備

    View full-size slide

  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

    View full-size slide

  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'])

    View full-size slide

  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%
    実行結果

    View full-size slide

  18. © DMM.com LLC
    結論
    ラズパイで は
    簡単に動かせる
    ので、みんなもディープラーニングしよう
    プログラムはGitHubで公開しています。
    https://github.com/maru-labo/doodle/tree/master/examples/tensorflow_lite_rpi

    View full-size slide

  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.

    View full-size slide