Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

2018 08 18_python_ml_restart_embedded_ai

74 views

Published on

組み込み機器(特にARM)への学習済み機械学習モデル実装のポイント

Published in: Devices & Hardware
  • Be the first to comment

  • Be the first to like this

2018 08 18_python_ml_restart_embedded_ai

  1. 1. 組み込みAI 2018/8/18 @yukilab222 菊地
  2. 2. GPUの無いような 組み込み機器でAIなんか (ベンダに頼まないと)無理
  3. 3. void main( void ){ q15_t input[7]; q15 result[2]; float32_t out[2]; while(1){ …… input[0] = x1; input[1] = x2; arm_nn_mult_q15(input, input, input+2, 15, 2); arm_nn_mult_q15(input, input+1, input+4, 15, 1); input[5] = arm_sin_q15(x1); input[6] = arm_sin_q15(x2); predict(input, result); arm_q15_to_float(result, out, 2); printf(“A: %f B: %f”, out[0], out[1]); } } void predict(q15_t *input_vector, q15_t *ret){ q15_t out_l1[6], out_l2[2]; arm_fully_connected_q15(input_vector, weight_l1, 6, 0, 15, bias_l1, out_l1, NULL); arm_nn_activations_direct_q15(out_l1, 6, 1, ARM_TANH); arm_fully_connected_q15(out_l1, weight_l2, 2, 0, 15, bias_l2, out_l2, NULL); arm_nn_activations_direct_q15(out_l2, 2, 1, ARM_TANH); arm_softmax_q15(out_l2, 2, ret); } Q15: 16ビット符号付固定小数点 - 1から (1 - 2-15)まで表現できる Q12だと -8から(8 - 2-12)まで
  4. 4. 自己紹介 • IoTフルスタックフリーランス (2012 - ) • AIの勉強中・業務応用開発は現在進行形 • IoTLT新潟 • Prototype Cafe - シェアオフィス兼open IoT作業所運営 • 海で遊ぶのが好きで、東京から新潟へ移住。仕事は変わらず • LINE BOOT AWARDS 2018支援中
  5. 5. 前回まで
  6. 6. Python + 機械学習 所感 (私には) 言ってることがよくわからないし、 役に立つ様な気がしない
  7. 7. C言語+機械学習 所感 (私には) なぜか、ピンとこなくて積ん読
  8. 8. 入門 機械学習による異常検知 (私には) なぜか、ピンとこなくて積ん読
  9. 9. 全く前に進めず (_ _);;
  10. 10. 変化のきっかけ
  11. 11. 本棚に現れた神
  12. 12. たとえばこれくらいのハード ウェアでもできることもある ARM Cortex-M4F 96MHz FPU付き $20 GPUの乗っている携帯は組み込み屋にとってエッジ(いぢれる)ではない・・ (遠い目//)
  13. 13. (多分典型的な)AIな人は絵でわかる。が、
  14. 14. bit, register, asm, C,時々ライブラリ 。 気になるのは実行速度とメモリ容量 1bitの深みをきにしないData Scientist (disってるわけではない) 1bitの意味がものすごく重要で知らなけれならない組み込み人
  15. 15. キーワード 機械学習の説明 1bitに到るまでの実装の説明 python 機械学習 してる X C言語 機械学習 してる X ギャップ ギャップ ギャップ C言語 組み込み ここがなかった! 必要!
  16. 16. mbed動くようなMPUでも NeuralNetwork 動かせるんじ ゃん!
  17. 17. あまりに感動したので著者 (東京)に会ってきました
  18. 18. そして
  19. 19. ARM Trillium Project
  20. 20. ARM Project Trillium • 2018/4、ARMによる人工知能系のプロジェクト発表。 • 数10MHz 以上で動くARM MPU で NNが使える。 • https://community.arm.com/processors/b/blog/posts/ai- project- trillium?_ga=2.21501691.1996547401.1532581007- 1127750945.1528858773 展示会でみただろうに、というツッコミは想定範囲内。いいえ、私は見てません。
  21. 21. これでも使える。
  22. 22. • 専用のチップソリューション • 汎用のチップソリューション(ライブラリ https://github.com/ARM-software/ComputeLibrary など) https://www.arm.com/solutions/artificial-intelligence
  23. 23. ARM NN video • http://connect.linaro.org/resource/hkg18/hkg18-312/
  24. 24. !!!
  25. 25. ここまでのまとめ • 効果なGPUをつかわずとも、小型・省電力・低価格デバ イスで実装することができる。携帯型のデバイスで処理 が可能になる。
  26. 26. 学習済みモデルを組み 込み機器に適用する
  27. 27. (普通の)教師あり学習プロジェクト 教師データ (画像など情報量多) AIモデル (例えばkerasを使っ たNN構造の定義) CPU/GPU 学習させる 学習済みモデル (hd5ファイル等 ) (kerasなどで)読 み込んで予測などに 使う CPU/GPU 学習は時間がかかって、計算 量もすごく多くて重たい 時間はそれほどでもないが、 計算量はあってやっぱり重たい
  28. 28. 組み込みへの教師あり機械学習適用例 (制約:CPU弱、クロック遅い。FPUやGPUがない場合もある。ROMもRAM も少なめ) 教師データ (信号など情報量少) AIモデル (例えばkerasを使っ たNN構造の定義) CPU/GPU 学習させる 学習済みモデル (hd5ファイル等 ) (kerasなどの)モ デルを参照して、C言 語などでモデル作っ て実行 MPU/FPU学習済みモデル C言語で扱える 様に変換 モデル(推論計算式) ROM 学習済みモデル (重み・バイアス値) ROMでいいかも モデルの使う変数 RAM
  29. 29. MPU/DSP (GPUないとき) • GPUのない組み込みMPUでも、DSP やFPU積んでいれば それを利用する。(しないと計算が数倍-10倍以上遅い) • MPUのベンダがDSP/FPUを利用するライブラリを提供して いれば使う。
  30. 30. そこそこ高機能なMPUとい えばR社を除くとARM
  31. 31. ARM CMSIS-DSP/NN ライブラリ • https://github.com/ARM-software/CMSIS_5 あたりを見る といいと思います。 • CPUによる実装も書いてあります。FPUがある場合は FPUを使った高速な演算をしてくれます。
  32. 32. 組み込み機器内のモデル • (C言語で書くとして) 組み込み機器の中にモデル(推定部分のみ)を作 ります。 • 行列の乗算・加算です。CPUでもできますが、FPUやGPUがあれば高速 。それらを効率的に支えるライブラリがあればベスト • 何をどう乗算して、加算するかはモデルのソースコード (Keras,TensorFlowのソース)や参考資料(ARM CMSIS, ComputeLibraryの ソースコード・サンプル・document)をみないとわからない
  33. 33. 入力 重み(kernel) レイヤ出力 h5ファイルから抜き出した重み行列中の並びは縦です! GRUを使う場合は、 kerasを使った場合update -> reset->output(new)の 順に配列が続きます。 重み(kernel) レイヤ出力 重み(kernel) レイヤ出力
  34. 34. AI/機械学習を組み込 む時の注意ポイント
  35. 35. 開発 • できるだけ(ARMなどの)ライブラリを使い石を効率的に使う。 • CMSIS-5サポートしてなくても大丈夫。多少工夫すればソースコードの一部 だけでも利用できるようになります。 • ARM CMSIS-NNのよい説明資料はありません。(たぶん)関数レベルで良い ですがソースコードを読みこなす必要があります。 • ARM FPU/DSPのアセンブラ命令理解必須 • Kerasの奥底のpythonコード読む必要に狩られると思います。読む際に機械 学習の計算についての知識が必要です。 • テスト駆動開発をお勧めします。ARMのライブラリコードがまちがっている 場合がありました。 • 開発(くりかえし)のプロセスについてPM認識必要 • 目標値はあっても良いが、100点を目指さないこと。 • 古典的な計算手法をあれこれ試し、できないばあいにのみ機械学習を使うの が良いかもしれません。(学習コストが高いため)
  36. 36. メモリ使用量と計算速度 • メモリたくさん必要っていうけど? => ROM? RAM? なんのメ モリかによります。ざっくりいってニューロンが少なければ少 なくなります。 • C言語でやるよりDSP/FPU(あればGPU)使えば非常に早くなり ます。 • 各社より出ている計算ライブラリを使用すると高速です。(バ グある場合もあり)
  37. 37. デバッグ手法 • Keras/TensorFlowの組み合わせでは値のトレースができま せん。同等の計算をするコードをpythonなどで別に実装して 、組み込み内の変数の動きと比較することで、デバッグでき るようになります。 • ARMのCMSIS-NNには DSP/FPUあり版(cortex M4など)と なし版(corex M0, M3など)の双方のコードが含まれていま す。 DSPのコードを読むのは大変なのでDSPなし版(== pure C)実装をみて理解/動作させるとデバッグが容易です。 • DSP/FPUを利用する場合、デバッグや実装に際しARMのア センブラについての知識を深める必要があります。
  38. 38. プロジェクトの特性 • 繰り返し開発:メモリと計算速度の制限があり、現実的に ほしい速度ででなんでもできるわけではありません。メモ リに入らなかったり、遅すぎる場合はモデルや入力feature の見直しから必要になります。 このため、繰り返し繰り返 し実装・評価するスタイルの開発日程を組む必要がありま す。 • データ準備が大切:トレーニングに必要な時間やデータを 準備する時間も馬鹿になりません。 • デバッグ後も、PCで評価した結果が実機上で実現できない 場合、トレーニングデータが適切か疑う必要があります。
  39. 39. まとめ • 使ってるMPUじゃとってもAI処理なんて無理、と思って ましたができます! • 一人でできない(ですよね、大概)場合、AIのエンジニア と組み込みハード・ソフトエンジニアがすり寄る必要あ り • 年末から来年にかけてエッジAIチップが出て安くなってき たらそれを使えば良いだけになり、この実装は無駄にな る・・? MPU / FPGA / GPU /他HWの戦いの年です。
  40. 40. 参考&謝辞 • インターフェース誌 2018/6月号 辰岡さんの記事 • 辰岡さん(東京) • Blincamの Sumanthさん (新潟市 Prototype Cafeにいます) • Python プロフェッショナルプログラミング 第3版 • ARMのAI戦略 : http://eetimes.jp/ee/articles/1803/23/news070_2.html
  41. 41. LINE BOOT AWARDS 2018 @LINE_DEV @linebootawards https://www.line-community.me/awards/
  42. 42. LINEからclovaを含むAPI 協賛企業からもAPI https://www.line-community.me/awards/apis
  43. 43. 個人/法人や年齢、居住国など問わず参加が可能 Messaging APIを使用したLINEアカウント and/or Clova Extentions Kitを使用したClova Skillを組み込んだ実装サービ スを対象とし、 審査時点で各規約を満たした上で公開され ていることが条件
  44. 44. 評価軸 LOVED BY USERS ユーザーに継続的かつ日常的に愛されるサービスであること。そのサ ービスを通じて、LINEやClova自体がよりユーザーに愛される存在にな るようなサービスであること。 LINE AS A PLATFORM 既存サービスの拡張・転用だけではなく、LINEやClovaの特徴やユーザ ー接点を活かし、双方向かつ能動的な新たなコミュニケーションを生 み出すサービスであること。 QUALITY 様々なAPIやサービス等を組み合わせ、単純な”機能”ではなく”サービス ”と呼べる完成度があり、ビジョンだけではなく、サービス実現までの 道筋が見えること。
  45. 45. 関連イベント https://linedev.connpass.com/ こんなとこにいていいのか(汗)
  46. 46. • IoTLT新潟(というか・・私?)は、企画のためのアイデ ィアソンやAPIハンズオンを各地で催す予定です。 関連イベント https://linedev.connpass.com/
  47. 47. ありがとうございました @yukilab222 8/25 LINE APIハンズオン 9月に#linebootawardsハッカソン予定

×