SonyのDNNフレームワーク"NNabla"を調べてみた
SonyがNNablaというDeepLearningフレームワークを公開しました*1。
興味があったので、ドキュメントとソースを読みながら、全体を眺めてみました。
よく見ると標準でBinaryConnectのサポートやBinary Neural Network(BNN)のサンプルがあったり、興味深いです。
NNablaのコンセプト
公式サイトに記載のあるコア・コンセプトのようなもの
- Write less do more
- コードを直感的に短く書ける
- Dynamic computation graph support
- ChainerやPytorchのような動的なモデル構築
- Run anywhere
- 色々なプラットフォームで動くように開発
- Device ready
- ライブラリのコアはC++11で書かれているので、組み込み機器にも乗せられる
- Easy to add a new function
- 少ないコーディングで機能追加できるよう、うまいこと設計してる
- Multi-target device acceleration as plugin
NNablaを使っているプロダクト
NNablaは、ソニーグループのプロダクトでも使われていると記載がある
- Real Estate Price Estimate
- ソニー不動産株式会社の不動産の成約価格推定でNNablaをつかってる
- https://sony-fudosan.com/tech/ret1.html
- Gesture Sensitivity
- Image Recognition (Handwriting Symbol Recognition)
- 最近話題のSony Digital Paper “DPT-RP1"でも使われている
- 手書きしたマークの検索でNNablaを使用しているぽい
- http://www.sony.jp/digital-paper/products/DPT-RP1/feature_1.html#L2_170
Xperia EarとDPT-RP1は、想像だけどデバイス側でNNablaが動いてるんだろうな。
すでに組み込み製品でも実用的に動いているなら、ライブラリを導入する側として安心。
そしてDPT-RP1ほしい…
ドキュメントとTutorial
ドキュメントが丁寧な印象。大企業っぽい(?)
特に入門向けのTutorialやサンプルコードは以下
- Tutorial
- https://nnabla.readthedocs.io/en/latest/python/tutorial.html
- 動かしながらNNablaの機能を一巡りできるNotebookになってる
- Notebookのパスは、 nnabla/tutorial
- 私のCPU OnlyなmacBook(中身はubuntu)でもサクサク動いた
- Example
- https://github.com/sony/nnabla/tree/master/examples
- Binary Neural NetworkでMNISTを認識するサンプルもある。あとで詳しく読もう
その他、まとめきれなかったこと
眠いのでまた後日ブログ書きますが、特に印象に残ったことは以下。
- Binary Neural Networkの部品を標準でサポートしてるってアツい
- VariableやFunctionなど、概念がChainerに似ていて私はとっつきやすい
- 記述量少ないけど、抽象化されすぎてなくて適度な印象
- ドキュメントが丁寧な印象
- コアはC++11で書かれていて、CythonでラップしてPython APIを提供している
- DataIterator
- 静的 or 動的なモデル構築両方に対応
- 基本静的で、動的に構築する場合は、Auto-forward modeを有効にするっぽい。
- グローバルな状態を管理して、ごにょごにょしてる
- 名前空間
- LoggerモジュールやMonitorモジュールが地味に嬉しい。Utility系もそこそこ充実
- Extensions
- パラメータなどグローバルに状態をもつものをいるので、注意
今後
やってみたいこと、しらべたいこと