社員ブログ

印刷

学習済のニューラルネットワークを組込装置で動かす(その1)

動機

最近、機械学習の応用が凄い勢いで進んでいます。
こうした中で、弊社では、社内活動として私がAI関連技術の調査を担当することになりました。
担当するからには、実際に動作する面白いものを作りたいと考えています。
特に、組込装置でニューラルネットワークを動作させてみたい...と思いました。

調べたところ、ルネサス社のe-AIという製品がありました。
これは、ひとことで言えば「学習済のニューラルネットワークをC言語に変換するトランスレーター」です。
「おおこれは便利だ!」と思いましたが、それと同時に
「こういうツールを自分でも作ってみたい」
という気持ちが沸いてきました。(自分はツールを作るのが大好きなのです...!)

ということで、不定期連載で開発記事を書いてみます。

なお、もし良いものができた暁には無償で公開する予定です。

想定する読者

主な読者として、機械学習や組込ソフト開発に関連する用語を既に知っている技術者を想定しています。
例えば「TensorFlow」「Keras」といった機械学習フレームワークの名称や、
「教師あり学習」「教師なし学習」といった用語を、特に補足説明なく使う予定ですがご了承ください。
WikiPedia等へのリンクは可能な限り付けますので、興味ある方は、そこから辿ってみてください。

本連載の予定

成果物のイメージ

本連載では、以下のようなツール(図中の橙色部分)の完成を目標にします。
グラフ

  • 学習済のニューラルネットワークをC言語に変換する
  • OSなしの小規模な組込装置でも動作可能なC言語を生成できる
  • 主要な機械学習フレームワークに対応する
連載各回のイメージ

本連載の各回は、おおまかに以下のようになる予定です。

  • 【第1回】事前調査
  • 【第2回】学習済モデル読込機能の作成
  • 【第3回】C言語変換機能の作成
  • 【第4回】動作検証

さて第1回の今回は、目標のひとつ「主要な機械学習フレームワークに対応する」を実現するにあたって、
以下の調査を実施しました。

  • 【事前調査1】機械学習フレームワークの動向調査
  • 【事前調査2】学習済モデル保存ファイル形式の動向調査

【事前調査1】機械学習フレームワークの動向調査

機械学習フレームワークの主要なものを知るためここを見ました。
また、この記事が「ぱっと理解」できて助かりました。
他もいろいろ見ましたが、現在はTensorFlowが1番人気のようです。
グラフ
(上図は記事[Deep Learning Framework Power Scores 2018]より引用)

さて、どの機械学習フレームワークを使っても、実際やることは似ています。

  1. ニューラルネットワークのグラフ構造を定義する
  2. 反復的な学習により、ニューロン間の結合強度を最適化する(ここまで学習フェーズ)
  3. 学習が済んだら、未知の入力情報を与えて推論させる(推論フェーズ)

ここで「ニューラルネットワークのグラフ構造」「(学習済の状態における)ニューロン間の結合強度」
合わせたものを指して「学習済モデル」と呼ぶようです。

学習済モデルをエクスポートする際のファイル形式は、機械学習フレームワーク毎にまちまちですが、
それだと不都合が多いので、最近は共通のファイル形式が策定されてきています。
本連載で開発するツールは、共通のファイル形式をサポートすることで、
主要な機械学習フレームワークに対応できることになるはずです。
ただし、共通のファイル形式は複数の規格が提唱されている状況で、
その中から今後普及するであろうものを上手に選ぶ必要があります。

【事前調査2】学習済モデル保存ファイル形式の動向調査

学習済モデルをファイルに保存する場合の形式について、動向を調査しました。
ほぼONNXNNEFかの2択のようですが、
現在はONNXが圧倒的に有利な状況のようです。

機械学習フレームワークONNX形式NNEF形式
Caffe Export/Import
Caffe2 Export/Import
PyTorch Export
Cognitive Toolkit (CNTK) Export/Import
Apache MXNet Export/Import
Chainer Export
TensorFlow Export/Import Export/Import
Apple CoreML Export/Import
SciKit-Learn Export
ML.NET Export
Menoh Import

(情報ソースはgithubonnx/tutorialsKhronosGroup/NNEF-Toolsです)

事前調査結果のまとめ

  • 機械学習フレームワークの1番人気はTensorFlow
  • 学習済モデル保存ファイル形式の1番人気はONNX
  • ONNXをサポートすることで、主要な機械学習フレームワークに対応できそう

という結論になりました。

さて、次回は【第2回】学習済モデル読込機能の作成を予定しています。
不定期連載ですので、いつになるかは不明です。果たしてうまくいくのでしょうか...?

Written by 澤田

PAGE TOP