SlideShare una empresa de Scribd logo
1 de 49
Descargar para leer sin conexión
組み込み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な人は絵でわかる。が、
keras/TensorFlow/Pandas/Python/…
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-11277
50945.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ハッカソン予定

Más contenido relacionado

Más de Yuki Kikuchi

組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ組み込みAI LT @ 2018/07/20 上越テックミートアップ
組み込みAI LT @ 2018/07/20 上越テックミートアップ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
 

Más de Yuki Kikuchi (9)

組み込み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