Neural Network Libraries (Nnabla) で作った AI を SPRESENSE で動かす! [AI]
今回は、前回 Neural Network Libraries (Nnabla) で作った AI (Auto Encoder) を SPRESENSE で動かしてみたいと思います!そもそも Nnabla を使ったのは、これが目的ですからね。
SPRESENSEに動かすのはここで紹介したコードに次のコードを追記します。
■ Import に nnabla.util.save を追加
ネットワークをメディアに出力するためのユーティリティです。コードの冒頭に追加してください。
■ ネットワークをメディアに出力する
NNP というファイルを一旦出力します。フォーマットの詳細はよくわかりませんが、このチュートリアルを参考にしました。次のコードをPythonコードの最後に追加してください。
次にSPRESENSE が読み込めるようにここで保存したNNPデータを変換します。
■ NNPファイルをNNBに変換する
SPRESENSE で読み込めるようにするには "NNB" という形式に変換しなければなりません。コマンドラインアプリを使って変換することができます。詳しくはこちらを参照してください。
■ "sindet.nnb" を SDカードにコピーして SPRESENSE に差し込む
"sindet.nnb" というファイルが生成されるので、それをSDカードにコピーして、SPRESENSEの拡張ボードのSDカードスロットに差し込みましょう。
■ テスト用の Arduino スケッチを SPRESENSE に書き込みを動作確認をする
Arduino IDE を使って、テスト用の Arduino スケッチを書き込みます。SPRESENSE のコードも Python で書けると楽だなと思いましたが、 CircuitPython では まだ DNNRT ライブラリはサポートされていないみたいですね…。もう少し待ちましょう。
結果を見てみましょう!
おお、いい感じに出ました!うまくいきましたね。これで、Neural Network Libraries で作った AI も SPRESENSE で動かすことができるようになりました!😆
(^^)/~
SPRESENSEに動かすのはここで紹介したコードに次のコードを追記します。
■ Import に nnabla.util.save を追加
ネットワークをメディアに出力するためのユーティリティです。コードの冒頭に追加してください。
import nnabla.utils.save as Save
■ ネットワークをメディアに出力する
NNP というファイルを一旦出力します。フォーマットの詳細はよくわかりませんが、このチュートリアルを参考にしました。次のコードをPythonコードの最後に追加してください。
## save the model contents = { 'networks' : [ {'name': 'sindet' ,'batch_size': batch_size ,'outputs': {'result': result} ,'names' : {'input': input_data} } ] , 'executors' : [ {'name': 'runtime' ,'network': 'sindet' ,'data': ['input'] ,'output': ['result'] } ] } Save.save('sindet.nnp', contents)
次にSPRESENSE が読み込めるようにここで保存したNNPデータを変換します。
■ NNPファイルをNNBに変換する
SPRESENSE で読み込めるようにするには "NNB" という形式に変換しなければなりません。コマンドラインアプリを使って変換することができます。詳しくはこちらを参照してください。
$ nnabla_cli convert -b 1 sindet.nnp sindet.nnb [nnabla][INFO]: Initializing CPU extension... NNabla command line interface (Version:1.7.0, Build:200401213820) Importing sindet.nnp Expanding sindet.
■ "sindet.nnb" を SDカードにコピーして SPRESENSE に差し込む
"sindet.nnb" というファイルが生成されるので、それをSDカードにコピーして、SPRESENSEの拡張ボードのSDカードスロットに差し込みましょう。
■ テスト用の Arduino スケッチを SPRESENSE に書き込みを動作確認をする
Arduino IDE を使って、テスト用の Arduino スケッチを書き込みます。SPRESENSE のコードも Python で書けると楽だなと思いましたが、 CircuitPython では まだ DNNRT ライブラリはサポートされていないみたいですね…。もう少し待ちましょう。
#include <SDHCI.h> #include <DNNRT.h> #include <math.h> DNNRT dnnrt; SDClass SD; float input_data[64]; float output_data[64]; void setup() { int ret; Serial.begin(115200); SD.begin(); File nnbfile = SD.open("sindet.nnb"); if (!nnbfile) { Serial.println("nnb not found"); return; } ret = dnnrt.begin(nnbfile); if (ret < 0) { Serial.println("DNNRT initialization failure: " + String(ret)); return; } DNNVariable input(64); float *d = input.data(); for (int i = 0; i < 64; ++i) { d[i] = input_data[i] = sin(i/10.0) + float(random(-3, 4))/10.0; } dnnrt.inputVariable(input, 0); dnnrt.forward(); DNNVariable output = dnnrt.outputVariable(0); Serial.print("sin,"); Serial.print("input,"); Serial.println("output"); for (int i = 0; i < 64; ++i) { Serial.print(String(sin(i/10.0)) + ","); Serial.print(String(input_data[i]) + ","); Serial.println(String(output[i])); } dnnrt.end(); } void loop() { // put your main code here, to run repeatedly: }
結果を見てみましょう!
おお、いい感じに出ました!うまくいきましたね。これで、Neural Network Libraries で作った AI も SPRESENSE で動かすことができるようになりました!😆
(^^)/~
ソニー開発のNeural Network Console入門【増補改訂・クラウド対応版】--数式なし、コーディングなしのディープラーニング
- 出版社/メーカー: リックテレコム
- 発売日: 2018/11/14
- メディア: 単行本(ソフトカバー)
SONY SPRESENSE メインボード CXD5602PWBMAIN1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
SONY SPRESENSE 拡張ボード CXD5602PWBEXT1
- 出版社/メーカー: スプレッセンス(Spresense)
- メディア: Tools & Hardware
コメント 0