**********************************************************************
セッションs2b
テーマ:組込み向けDeep learning フレームワーク コキュートスの紹介
講師:夏谷実(株式会社パソナテック)
日時:2017/8/25 9:00-10:10
参加人数:約40名
**********************************************************************

アジェンダ
・自己紹介
・業界動向
・開発の経緯
・コキュートスの紹介
・パソナテックのサービスの紹介


・自己紹介
TFUG KANSAI
最近は半導体関連の仕事が多い
「ぱたへね」というブログを書いている

・業界志向
エッジでのDeep learning
日本なりのプラットフォーム戦略→ハードウェアで勝負する

・開発の経緯
量子化されたデータを扱う専用プロセッサを作ろう→Cのリファレンスモデルが必要
さらにDarknetは影響を植えている
これらをもとにコキュートスを創ろう

開発現場の苦悩
1:ツールの問題
・価格
・使いたいNNがサポートしていない
・ブラックボックス、自分たちでカスタマイズできない
・モデルの圧縮などの最新手法がサポートされていない

2:ボードの問題
・ツールが使いたいCPUをサポートされていない
・ファイルシステムやメモリ管理が必須
・センサーが特殊

3:人材の問題
・DeepLearning、Python,組込みC、ボードに精通したメンバーがいない
・研究所とのコミュニケーションギャップ
・外部に出すと自社にノウハウがたまらない
・DeepLearningがわからない社内の組込み人材を有効活用したい


・コキュートスの紹介

コキュートスとは:嘆きの川
電力が足りずに少ない資源で頑張って動作させることが動機で名づけられた

開発の現状
1:MNIST CNN
2:VGG16
3:Tiny-YOLO

KerasからCソースを半自動生成する。今のところ学習はしない
Kerasの方で学習する

コキュートスのネット対応方法
1:MNIST CNN
2:VGG16
3:YOLO
4:SSD

コキュートスが出力するCソースの特徴
特徴1:どんなpoorな環境でも動くCソース
・実行に必要なメモリ容量が明確
・ブラックボックスを作らない
・必要なライブラリーを最小にする
特徴2:C言語ができれば参加OKなフレームワークを目指す
・組込み機器でのデバックのしやすさ
・C++は使わない
・関数ポインタ、ポインタのポインタは使わない

コキュートスはデータをnumpy形式でやり取りする
np.loadで簡単に読み込めたり、numpyの統計情報やmatplotlibによる可視化が簡単、デバック時に非常に役に立つ。

kerasで特定の層の出力を取り出すことについて説明
numpyのフォーマットについて説明
numpyを使ったデバック→図で可視化しながらデバック

・データの型を変更する
コキュートスの型の変換方法:C++のテンプレート関数の仕組みを、コキュートスの内部に実装
C++テンプレート関数の恩恵を受けながらもCのソースを出力することができる

・レイヤーの出力の量子化方法について説明
領域提案時の問題点(Tiny-YOLO使用)
計算した領域が大きくなりすぎたり、中央によりすぎたりする問題が発生する→これらに対応することが今後の課題

・まとめ
コキュートスとは
・学習済みのKerasから組込みCソースを生成する
・どんな組込み機器でも実装できる
・開発が簡単


・AI分野に関するパソナテックのサービスについて説明


・質疑応答
Q:固定少数を使用したのは、領域計算をしたいから?バイナリネットを使えばメモリが小さくて早い処理ができるが?
A:遊びの要素が大きい。固定少数でやって早くなるのが見たかった。FPGAではなくCPUやDSPがターゲットであり、バイナリにしたからといって早くなるとは限らない。
 この辺りが課題になってくる。

以上