SpresenseのNeural Network Consoleを使ってみた

# 概要
Spresense活用コンテストに向けての作品作りの一環で、SonyのサービスであるNeural Network Console（以降NNCと呼ぶ）がGUIでAIモデルを構築することができると聞いたので、実際に使ってみます。



# 必要な環境
- Windows 11 PC

# 環境構築
NNCにはクラウド版とWindows版の２種類があります。クラウド版も使用時間１０時間は無料で使うことができますが、それ以降は１時間ごとに１０００円近い利用料金を支払わないといけません。さらにNeural Network Console クラウド版は2024年12月25日に終了する予定です。一方で、Windows版は無料で使うことができるのでじっさいにつかってみます


## Windows版インストールファイルのダウンロード
以下のリンクからインストール用のexeファイルをダウンロードします。ダウンロード容量が2.3 GB近くあり、ダウンロード完了するのに15～20分近く時間がかかるので辛抱強く待ちましょう
https://techhub.developer.sony.com/ja/neural-network-console#NNC%20W%20JA

##　ファイルの解凍
exeファイルがダウンロードし、ダブルクリックを押すと7-zipによるファイルの解凍がはじまります。ここでの注意点は解凍中にできるフォルダが解凍すると、そのフォルダがどこにも表示されません。（自分だけの場合もあるので、解決策があれば教えてほしいです）そのため解凍中にクイックアクセスにピン止めするとフォルダにアクセスできるようになります。

## Neural Network Consoleの起動とアカウントの登録
解凍後のneural_network_console.exeファイルをダブルクリックで起動すると、ブラウザが立ち上がります。アカウント登録の選択画面が表示されるので、Googleアカウントでサインインするかソニーアカウントを作成してサインインします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/a002ca40-7ffe-551c-bcdc-009cf14c6a6b.png" width="400" style="height:auto;">
サインインの後に、自分のメールアドレスなどを入力し、利用規則に同意するとアカウントが有効化されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/6c012700-2ad0-82d3-753d-fd1d17baef8c.png" width="400" style="height:auto;">

次のような画面が表示されたらアカウントは登録されたのでタブを閉じます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/0eea3e0c-8f0c-6dc5-c3cb-b2aaa29034f3.png" width="500" style="height:auto;">

Neural Network Consoleの画面に戻ると、使用許諾契約書の画面が表示されるので「同意」と「適用」をクリックします。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/bcf940eb-e016-287c-ef41-71b849acfd14.png" width="500" style="height:auto;">




# Neural Network Console のサンプルプロジェクトで学習してみる
以下の公式チュートリアルを参考にして、モデルの構築から評価まで行いたいと思います。
NNCの強みは、GUI操作でAIモデルを構築することができ、そのモデルをSpresenseに組み込めることです。従来のAIモデルの構築というと、PythonだとまずはPython用の環境構築を行い、データセットを読みこむためのプログラムを作成し、そこからデータセットの加工やらコーディングをしてモデル構築を行うなど手順が煩雑でプログラミングに疎い人にとって、使いこなすまでに時間がかかるなどがありました。NNCではデータセットさえあればもでるをこうちくすることができます。また構築されたAIモデルをPCで実行する際にもPCの性能に依存する場合も多く、せっかく構築したモデルを他の環境で実行すると処理速度が遅いなどの問題もありました。しかし、NNCではSoresenseの組み込みマイコンでも最適に実行できるようにモデル構築を行うことができます。


https://x.gd/4M0xV

1. Neural Network Consoleを起動する
neural_network_console.exeを起動します。

2. サンプルプロジェクトの起動とデータセットのダウンロード。
アプリ画面の上部に01_logistic_regression.sdcprojがあるので、こちらを選択します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/50fc2857-a468-703e-df3b-093af480514a.png" width="500" style="height:auto;">

このプロジェクトで使用するデータセットをダウンロードするか聞かれるので「OK」をクリックします。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/f1451598-978d-4915-0df1-a0464fca7093.png" width="500" style="height:auto;">

データセットが読みこまれたか確認するために上のメニューバーにある「データセット」をクリックします。
画面中央に手書きで書かれた数字の画像が表示されるので、正常にデータセットが読みこまれていることを確認することができます。今回は学習用と検証用データセット両方が用意されているので、左の「Training」「Validation」からデータを確認することができます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/cec03def-46df-ccb0-2cf3-9d283517d8cd.png" width="500" style="height:auto;">


データセットを学習します。「編集」から「学習」ボタンをクリックすると、ニューラルネットワークを使ったデータセットの学習が開始されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/84fd889f-db6b-9eed-b818-b04cb0be8658.png" width="500" style="height:auto;">


- 学習が開始されると、画面中央に学習曲線が表示され、リアルタイムで学習状態を認識することができます。学習曲線の縦軸は誤差、横軸のEpochは学習の繰り返し回数を表しています。今回の設定では、学習回数が100回に達すると自動的に学習が終了するようになっています。
- 青い実線は予測値と実際の値の差を示す損失(Cost)、赤の実線は訓練データにおける誤差(Traning Erro), 赤い点線は検証データにおける誤差(Validation Error)をそれぞれ表しています。
- 今回の学習のように、学習回数が増えるにしたがって、誤差とコストが減少していればモデルが徐々に最適化されていると考えることができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/8fc66975-2c56-c51c-359f-b6e3ce9e2292.png)


評価
「学習」から「実行」をクリックするとモデルの評価が開始されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/e3077fe1-c7f2-9eb6-f394-79e53ded21fa.png)

評価用データセットを入力データとして学習モデル（ニューラルネットワークによる推定を行った結果を表として表示されます。参考サイトによると1_logistic_regression.sdcproj におけるy’は、yが1である（入力画像が9である）確率を示しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/9ffd5957-6a1c-77b7-ef65-ca9e674e73ca.png)

出力結果のタブの横にある「混合行列」を選択すると、評価データセット全体の推定結果の精度などの評価結果を見ることができます。今回の例では。評価データセットの「９」と「４」を95.2％の精度で分類できたと言えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3925972/7e9e87fd-aebd-90f8-b258-14ebcdc26f2a.png)


<img src="" width="" style="height:auto;">