エッジAIによる植物の状態監視 SpresenseとNeural Network Consoleを活用した教師なし学習


AIの実証実験として、観葉植物の状態をエッジAIにて監視し、普段と異なる状態(水不足など)になった際にLINE BOTにて通知するシステムを作成しました。

エッジAIを稼働させるデバイスにはSONYのSpresenseとNeural Network Consoleを活用し、観葉植物の正常な状態の写真を「教師なし学習」により作成した学習モデルを利用しています。

エッジAIとは

「AI」は説明不要なほど一般的に知られる言葉になりました。もう、20年以上前のことになりますが私の大学卒業論文は「ネオコグニトロン」という一種のAIを使った、手書き数字の文字認識をテーマにしました。当時は1000枚程度の画像を用いて学習するだけでも、かなり時間が掛かっていましたが、最近はコンピューターの性能が高くなったので、高度な学習が短時間で行えるようになりました。

さて、「エッジAI」について記載する前に、「エッジ」の対義語である「クラウド」型のAIについてですが、クラウド型のAIについては動作をイメージしやすいのではないでしょうか。
例えば、スマートフォンで何かの画像を撮影するとインターネットで撮影した画像が送信されて、何を撮影した画像かクラウドのAIで解析・判定して結果が表示さる、といった動作になります。
対して、エッジ型のAIの場合には、クラウドサーバーと通信することなく全ての解析・判定処理を手元のデバイス内にて行います。そのため、インターネットが利用できない環境でも解析を行うことができる、通信が不要なため高速に解析できるなどの利点があります。

弊社ではLPWA通信という、低速ですが長距離(数km)の通信が可能な通信規格を利用するデバイスを開発しており、このようなデバイスの場合にはクラウドとの通信が不要なエッジAIが適しています。エッジにて解析・判定を行い、その結果のみをクラウドにLPWA通信にて送信するという動作になります。

また、AIに学習させる方法として「教師あり学習」と「教師なし学習」があります。おそらく「教師あり学習」が行われることが多いと思うのですが、教師(人)が分類した画像などを使ってAIが判定に使う「学習モデル」を作成します。そのため、複数の結果を判定するなど高度な判定が可能になります。この画像は犬、この画像は猫など、1つずつ指定する作業が必要です。
一方、「教師なし学習」では人は分類を行いません。ある1つの状態(正常)を学習させ、正常状態とどの程度乖離しているかを評価することで異常を検出します。異常時の学習データを用意する必要がなく学習データを準備する手間が省けますが、高度な分類はできません。

エッジデバイスに活用するSpresenseとは

SpresenseはSONYが開発している低消費電力の小型コンピューターで、乾電池で動作させることも可能です。Arduino IDEでの開発も可能であり、チュートリアルが充実しています。ただ、WifiなどRaspberry PiやM5Stackなどには標準で搭載されている機能が別モジュール(Add-On)になっているため、必要に応じて別途購入する必要があります。
今回は下記の拡張ボード等を利用します。

  • Spresense 拡張ボード
  • Spresenseカメラボード
  • Sigfox Add-onボード(LPWA通信)
  • Mic&LCD KIT for SPRESENSE

Neural Network Consoleとは

Neural Network Consoleは、こちらもSONYが提供しているAI開発ツールです。クラウド版は有料なのですが、Windows用のソフトは無料でダウンロードして利用することが可能です。今回はSpresenseにて利用する学習モデルを作成するために利用しますので、Windows版で問題ありません。

学習モデルの作成

今回のエッジAIは、観葉植物を定点観測して通常時(正常時)と異なる状態(異常時)を判定します。この観葉植物は水やりが必要な状態になると、葉がかなり垂れ下がり外見から判定しやすいため、水分が十分な状態(正常時)と水やりが必要な状態(異常時)を判定させます。

SpresenseにカメラやAdd-Onボードなどを装着したデバイスがこちらです。

観葉植物を判定するのと同じ環境にした状態で、学習用の写真をSpresenseを使って撮影します。今回は、水分が十分な状態(正常時)の観葉植物を回転テーブルで回転させながら、写真を60枚程度撮影しました。「教師なし学習」のため、水やりが必要な状態(異常時)の写真は撮影しません。
撮影画像の解像度はかなり小さく、28×28 pxです。320x240px程度で撮影した画像をクロップ・縮小しグレースケールに変換します。このような小さな画像でも判定できることが驚きです。人が見ても、通常時と異常時の差は判別できません。

撮影した画像をNeural Network Consoleの入力とし、学習モデルを構築します。Spresenseでは大きなサイズの学習モデルは利用できない(メモリ容量のため)ある程度のサイズに収まるようNeural Network Consoleのパラメータ調整が必要です。
今回の学習モデルは300KB程度で、完成したモデルファイルをWindows PCからmicroSDカードに書き込み、それをSpresenseで読み込んで動作させます。

エッジAIによる判定

Spresenseを起動するとカメラにて撮影した画像を判定し、その結果をリアルタイムにモニタに表示します。

「33」というのは画像の明るさの指標、「0.0543」が判定結果を数値化したものです。
判定結果が「0.063」以上を「異常状態」と認識し、画面に「DRY!!」と表示されます。通常時は「FINE!!」表示です。
なお、照明が消えた状態ですと判定結果が異常になるため、暗い場合には判定を行わない処理も加えています。

判定結果の通知(LINE BOT)

Spresenseの判定結果はLPWA通信のSigfoxにて30分ごとに送信します。Sigfoxは年間のランニングコストが1000円程度ですし、消費電力も少ないです。ただ、1日の送信回数に上限がありUplink 140回、Downlink 4回に限定されます。

Sigfox Cloudに送信されたデータ

Sigfoxにて受信したデータは、なるべくプログラミングをしない(ローコード)方法で、LINEを使って通知します。

利用するサービスはこちら。

  • Sigfox Cloud
  • Heroku (Node-RED:ローコード開発)
  • Firebase(Firestore:データベース)
  • LINE BOT(LINE Messaging API)

Sigfoxに送信されたデータはHerokuのNode-REDにて受信し、Firestore(データベース)に格納されます。
それと同時に過去3回のデータを判定し、3回とも異常判定の場合にLINE BOTを使って異常を通知します。(判定ミス対策)

Heroku、 Firebase、LINE BOTには無料枠があるため、今回のような小規模システムであればランニングコスト0円で運用可能です。

Node-REDはノードという部品をマウスで繋いでいくことでプログラムできます。LINEへの通知は異常を検知すると登録している画像が送られてきます。こちらから「元気?」と送信すると、エッジAIの判定数値を1000倍した数値(上図では56)が返されるため、植物の状態を「想像」することができます。

今後の取り組み

異常通知までできたので、今度は水やりを行うようLINEで指示すると観葉植物に給水される仕組みを、LPWA通信の「LoRa」を使って実現する予定です。

<追加しました>