Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

© 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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

© 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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

© 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.