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

More Related Content

More from Yuki Kikuchi

25t Press operation with embedded system
25t Press operation with embedded system25t Press operation with embedded system
25t Press operation with embedded system
Yuki Kikuchi
 
ZenStateMachine テンプレート
ZenStateMachine テンプレートZenStateMachine テンプレート
ZenStateMachine テンプレート
Yuki Kikuchi
 
StateMachineテンプレート
StateMachineテンプレートStateMachineテンプレート
StateMachineテンプレート
Yuki Kikuchi
 
2018 07 29_embed_ai
2018 07 29_embed_ai2018 07 29_embed_ai
2018 07 29_embed_ai
Yuki Kikuchi
 
組み込みxAI
組み込みxAI組み込みxAI
組み込みxAI
Yuki Kikuchi
 
組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ
Yuki Kikuchi
 
Facility monitor
Facility monitorFacility monitor
Facility monitor
Yuki Kikuchi
 
Facility monitor
Facility monitorFacility monitor
Facility monitor
Yuki Kikuchi
 
LoRAの見通しって?
LoRAの見通しって?LoRAの見通しって?
LoRAの見通しって?
Yuki Kikuchi
 
アクセシブルな開発のすすめ
アクセシブルな開発のすすめアクセシブルな開発のすすめ
アクセシブルな開発のすすめ
Yuki Kikuchi
 
製造業のIoTやってみよう
製造業のIoTやってみよう製造業のIoTやってみよう
製造業のIoTやってみよう
Yuki Kikuchi
 
LPWA 調べて見た
LPWA 調べて見たLPWA 調べて見た
LPWA 調べて見た
Yuki Kikuchi
 
Iotlt紹介資料 (新潟 用)
Iotlt紹介資料 (新潟 用)Iotlt紹介資料 (新潟 用)
Iotlt紹介資料 (新潟 用)
Yuki Kikuchi
 

More from Yuki Kikuchi (13)

25t Press operation with embedded system
25t Press operation with embedded system25t Press operation with embedded system
25t Press operation with embedded system
 
ZenStateMachine テンプレート
ZenStateMachine テンプレートZenStateMachine テンプレート
ZenStateMachine テンプレート
 
StateMachineテンプレート
StateMachineテンプレートStateMachineテンプレート
StateMachineテンプレート
 
2018 07 29_embed_ai
2018 07 29_embed_ai2018 07 29_embed_ai
2018 07 29_embed_ai
 
組み込みxAI
組み込みxAI組み込みxAI
組み込みxAI
 
組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ
 
Facility monitor
Facility monitorFacility monitor
Facility monitor
 
Facility monitor
Facility monitorFacility monitor
Facility monitor
 
LoRAの見通しって?
LoRAの見通しって?LoRAの見通しって?
LoRAの見通しって?
 
アクセシブルな開発のすすめ
アクセシブルな開発のすすめアクセシブルな開発のすすめ
アクセシブルな開発のすすめ
 
製造業のIoTやってみよう
製造業のIoTやってみよう製造業のIoTやってみよう
製造業のIoTやってみよう
 
LPWA 調べて見た
LPWA 調べて見たLPWA 調べて見た
LPWA 調べて見た
 
Iotlt紹介資料 (新潟 用)
Iotlt紹介資料 (新潟 用)Iotlt紹介資料 (新潟 用)
Iotlt紹介資料 (新潟 用)
 

2018 08 18_python_ml_restart_embedded_ai

Editor's Notes

  1. と思い込んでいました。Python機械学習コミュニティーに聞いたり、大学に聞いたり、オンライン学習もしたけど、どうもピンとこなくて具体的な実装に進めませんでしたが、教師あり学習済みモデルを使った実装については、前回から大きな進展があったのでここでご報告します。
  2. さんざん悩みましたが、ARM MPUをつかった場合、結果5行で教師あり学習結果を組み込み機器内で利用できる話です。 100MHz程度のARM Cortex M4を使った例でいうと、この計算は 1msもかからないはずです。
  3. 具体的につかえ(そうな)ソースコードやハードウェア(ここ大事)が書いてあって、いかにもできそうな気がした。
  4. ラズパイはLinux 1GHzが走ってるのでここでいう組み込みの範疇外。
  5. こんな絵を見せられても、頭で理解はするが、面白くない。(組み込みの世界からは遠い目)
  6. 典型的なAIのエンジニアはこんなツールを使って、問題を解決しようとします。 一方、組み込みエンジニアは、全く違うツールを使うので、話が噛み合わない。
  7. 辰岡博士は、医療系の信号の処理などにAIを使われているようです。株式会社ですが、一人企業で気さくにお話ししていただけました。
  8. 前回のPython機械学習勉強会ではまだ発表されてなかった内容です。
  9. まだ読んでないのでわからないけれど、Compute Library には TensorFlowの学習済みモデルからパラメータを抽出するスクリプト(Sep.29, 2017)などが提供されています。
  10. (デバッグ終わってるだろうし <= あとではまったポイント)
  11. ARMの例でいうと、まず、どのようなデータ(重み・バイアスの配列)を必要としているのか調べます。あまり良い解説は無いのですが、
  12. ARM社のComputing Libraryを見ると TensorFlowのパラメータを抽出するpython コードがありますが、自前でつくっても簡単です。float, Q15, Q12 , Q7など各種フォーマットへの変換も必要になる場合が多いので自前の方がメンテナンスしやすいかもしれません。