センサーと機械学習をつかったジェスチャー認識
機械学習を活用する場面として、回帰予測・異常検知・予知保全がよく挙げられます。ビルや工場などの設備に機械学習を適用することで、人が気づかないような軽微な変化を察知し、管理システムに通知します。また、設備のパラメータチューニングなどにも、機械学習が使用されることが増えてきました。
今回は、これらとは異なる観点から機械学習を活用する例として「センサー値の境界値プログラミングの置き換え」を紹介します。
境界値判定プログラミングの難しさ
プログラミング経験者ならば、IF-THEN-ELSE文のコードを1度は書いたことがあるのではないでしょうか。
例えば、サイコロを振って4以上が出ればアタリ、4未満はハズレをプログラミングする場合、1以上3以下、4以上6以下で処理を振り分けます。サイコロには6つの目しかないため記載するIF-THEN-ELSE文も単純です。
では、センサーから取得したデータを境界区分する場合はどうでしょうか。
一般的に、センサーデータには多くのノイズやブレが含まれます。ノイズを正しく除去し、取得した値をベースにIF-THEN-ELSEで処理を振り分けるのは困難です。これに対処するための今回の作戦は、人が観測データを分析してアルゴリズムを考慮するのではなく、機械学習モデルに観測データを統計的分析(学習)させ、その予測値で処理を振り分ける方法です。
エッジAI・機械学習ライブラリ「Ekkono SDK」
機械学習エンジンには、2022年9月26日付コラム「MPCによる空調制御デモ 」でご紹介した、Ekkono社(スウェーデン)のEkkono SDK を使用します。Ekkono SDKは、機械学習アルゴリズムをライブラリ形式で提供する、商用ベースの機械学習開発キットです。数学や統計学の専門知識がなくても、エンジニアレベルで機械学習を利用した製品を開発できます。今回Ekkono SDKを使用する理由は、以下の3つです。
1.超軽量実装
Arm® Cortex®-M0レベルのマイコンでも動作可能な超軽量実装です。クラウドなどへの接続は不要で、エッジデバイス内で予測を実現します。
今回はInfineon Technologies社製の32bitマイコン PSoC 6 (Arm Cortex-M4)を利用しましたが、通信機能などを利用することなく、マイコン上でジェスチャー予測をわずか1ms程で行うことができました。
2.豊富なライブラリ
組込み用のCライブラリのほか、WindowsやLinuxで利用できるPythonや.NETのライブラリ、検証用ツールも用意されています。WindowsやLinuxで試行錯誤的な検証がともなう機械学習のモデルを調整することで、モデル開発の負担を軽減します。
今回の対応ではWindows+Python環境でPoCを行い、評価結果が良好なモデルをC言語変換し、実機に搭載しました。
3.データセットの操作支援
提供APIを使用することで、データセットをベースとした任意の説明変数の作成(ラグ、デルタ値など)を支援します。モデルを作成する際、多くの時間はデータセットの準備と説明変数の適切な設定に費やされますが、提供APIを使用することでデータセット処理が簡単になります。
今回の対応も、Ekkonoのデータセット操作支援APIでさまざまな説明変数を作成/調整し、より評価結果の良いモデルを短期間で作成することができました。
ジェスチャーデモの紹介
今回行うジェスチャー認識には、以下の環境を使用しました。黒色プレートには上・下・左・右・周囲の5つの静電センサーが配置されており、手の近づき具合に応じてそれぞれのセンサーの値が変化します。
Infineon Technologies社製:
- PSoC® 62S2 Wi-Fi BT Pioneer Kit(CY8CKIT-062S2-43012)
- CY8CKIT-024 CapSense Proximity Shield
例えば、左から右に手を動かすと、左のセンサーが先に反応し、上下センサー、右センサーの順で値が上がっていくと考えられます。そのようなプログラミングは一見簡単なように思えますが、実際のセンサーの値は以下のように複雑で、人や動かし方の癖によっても形が変わります。
上の図は、2msごとに各センサー値を取得してグラフにしたものです。すべて手を左から右へ動かした時のものですが、かなり形が異なることが分かります。
この5つのセンサーデータから「右」と判定する場合、どの数値に着目してコードを記載すればいいのかさえ分かりません。そこで、これらデータをそのまま機械学習モデルに学習させてみました。
準備したデータセット | 上下左右それぞれ700件分のデータを取得 |
---|---|
使用モデルアルゴリズム | MLP(Multilayer Perceptron) |
学習 | データセットに正解データを追加し事前学習(教師あり学習)を実施 |
正答率 | 381/407 件 (93%) |
このモデルをPSoCボードへ展開し、ジェスチャーが実施されるたびにセンサーデータをモデルに渡し、上、下、左、右どの操作か予測します。その予測値を踏まえて、処理(LED表示)を切り替えるように実装しました。
以下は、実際に動いている様子です。無事、期待したような動作をしてくれていて、反応時間も良好です。いろいろな人に試してもらいましたが、正答率も高いと概ね高評価で、製品への応用も問題なさそうです。
- モデルサイズ:約16KB(C言語化時)
- モデルを含めたEkkono SDKのROMサイズ:約25KB
- 推論時間: 約1ms
まとめ
思いつきで作成したデモですが、Ekkono SDKの利用により短時間で効果的なものを作ることができました。ロジックプログラミングによる試行錯誤や、機械学習を自前でインプリメントするのに比べ、飛躍的な負担軽減とも言えると思います。また、新たに斜めや丸を描くジェスチャー判定を追加する際は、モデルの更新により対応することが可能となり、実機のコーディングは最小限に抑えることが可能になります。
今回使用したEkkono SDKは、小さな環境で動作し、その場で即時予測を行えるので、これまでとは異なる観点から機械学習を活用することが可能になります。
エッジデバイスで「データ取得 → 予測 → 予測に基づく処理」を完結できることは、従来の組込み機器に機械学習を搭載できることを意味しており、モーター・家電・ウェアラブルデバイスなど、今後さまざまな場面での活用が期待されます。
Ekkono SDKについての詳細は、以下のボタンよりお気軽にお問い合わせください。
このコラムの著者
株式会社ユビキタスAI
企画室 主席研究員
吉田 一茂​(よしだ かずしげ)
マイクロソフトの開発部門で25年間エンジニアを経験。言語・アプリケーション・OS開発をはじめ、組込からクラウドまで幅広いプログラミングをカバーする。帰国にあたりユビキタスAIに入社、企画室にて新規事業アイデアの立案やPoC作成、組織にわたる社内支援などを担当している。
より詳しい技術や関連製品について知りたい方へ
本コラムに関係する技術や関連する製品について知りたい方は、お気軽にご相談ください。