Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.

2018 08 18_python_ml_restart_embedded_ai

59 vues

Publié le

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

Publié dans : Périphériques & matériel
  • Login to see the comments

  • Soyez le premier à aimer ceci

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. keras/TensorFlow/Pandas/Python/… 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-11277 50945.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ハッカソン予定

×