Nano 33 BLE SenseでEdge Impulse
i
このチュートリアルは、すでに製品ライフサイクルの終了(EOL)を迎えた製品を対象としています。

Edge Impulseを使って、音声内のキーワードを認識するようボードを学習させる方法を学びます。


Author:José BagurLast revision:2023/06/21

はじめに

このチュートリアルでは、Arduino Nano 33 BLE SenseとArduino Cloudを用い、Edge Impulseを使って、音声内のキーワードを認識する簡単な人工ニューラルネットワークを実行します。Nano 33 BLE Sense上の内蔵デジタルマイクであるMP32DT05を使い、周囲の音声を収集し、キーワードを認識したときに、内蔵RGB LEDを点灯させます。

目的

このチュートリアルの目的は、以下の通りです。

  • 機械学習の基本を学びます。
  • Arduino Nano 33 BLE SenseボードとEdge Impulseを使います。
  • 音声内のキーワードを認識できる簡単な人工ニューラルネットワークを実行します。

必要なハードウェアとソフトウェア

機械学習の基本

機械学習には、区別する必要のある3つの重要な概念があり、それらがどのように関連するのかを理解する必要があります。これらの概念は、人工知能人工知能と機械学習、ディープラーニングです。これらの概念の詳細を見ていきましょう。

人工知能とは何か?

人工知能(Artificial Intelligence: AI)は、ものごとを賢くする科学だと定義できます。コンピューターが人間の作業を実行すること、あるいは、簡単に言えば、機械による人間の知能を指す、広い用語です。1950年代からAIは存在しますが、今日どのようになっているでしょうか? 答えは機械学習です。

機械学習とは何か?

機械学習(Machine Learning: ML)は、AIを実現するための一つのアプローチです。コンピューターコンピューターに学習する能力を与えるための統計的な技術を使うコンピューターサイエンスの分野です。この学習は、どのような形にせよ、コンピューターには明示的にプログラムされていないデータに基づいたものです。データに基づいた学習で、過去の観察に基づき物事を予測するよう、コンピューターはトレーニングされます。

従来のプログラミングでは、データとプログラムの相互作用の結果コンピューターの出力は生成されていました。機械学習では、コンピューターの出力とデータの相互作用の結果プログラムが生成されます。

ディープラーニングとは何か?

ディープラーニング(Deep Learning: DL)は、MLを実装する一つの技術です。DLは、データから学ぶのに、いわゆる、人工ニューラルネットワークを使います。人工ニューラルネットワーク(Artificial Neural Networks: ANN)は、人間の脳に基づいたアルゴリズムで、情報処理の数学モデルを使います。

簡単に言えば、MLは、コンピューターがデータから学習して、現実世界の過程を表現する数学モデルを生成することです。MLでは、学習が重要ですが、どのようにして、コンピューターがデータから学習しモデルを生成するのでしょうか? MLシステムが学習する方法を見ていきましょう。

MLシステムが学習する方法

MLシステムの学習には、教師あり学習と教師梨学習という、2つの主な方法があります。両者の違いを見ていきましょう。

  • 教師あり学習: この学習方法では、学習データはラベル付けされます。入力データとラベルと呼ばれる提供された既知のデータとを結びつけます。この学習方法の例は、癌を早期に発見するための、放射線画像の分類です。
  • 教師なし学習: この学習方法では、学習データはラベル付けされません。データの固有パターンを発見していきます。この学習方法の例は、詐欺を防ぐための異常なクレジットカード取引に対するフラグ付けのような、異常検知です。

このチュートリアルでは、MLシステムもしくはモデルを生成するのに、教師あり学習を使います。ここまでで、MLシステムがどのように学習するのかについて説明しました。MLシステムの出力を見ていきましょう。

ML出力の分類

MLシステムは、典型的には、以下の出力を生成するのに使われます。

  • 回帰(Regression): この種類の出力は、連続値を予測するのに使われます。例えば、株価の予測です。
  • 分類(Classification): この種類の出力は、クラスあるいはラベルを付与するのに使われます。例えば、画像に、猫や犬といったラベルを付与することです。
  • クラスタリング(Clustering): この種類の出力は、データの構成や構造を発見するのに使われ、基本的には、オブジェクト間の類似性・非類似性に基づいた、オブジェクトの集合です。例えば、動植物の異なる種の分類があります。
  • 系列予測(Sequence prediction): この種類の出力は、過去に観測した何かのシンボルの順序に基づき、次のシンボルを予測することです。例えば、消費者によって購買された製品の順序です。

ここまで、MLの基本を学習しました。Arduino Nano 33 BLE Senseボードを使い、音声内のキーワードを認識できる簡単なANNを実行しましょう。これには、Edge Impulseを使います。

Edge Impulseの設定

エッジデバイスは、2つのネットワーク境界でデータフローを制御するハードウェアです。エッジデバイスは、基本的には、ネットワークの入出力点として動作します。Edge Impulseは、エッジデバイス上の主要な開発プラットフォームの一つで、世界中の開発者やデバイスメーカーが、エッジデバイス上でMLモデルを使い、実世界の問題を解決するのが目的です。Arduino Cloudを使い、MLシステムあるいはモデルを作り、Nano 33 BLE Senseボードに展開しましょう。

まずは、Arduinoプラットフォーム経由で、Edge Impulseアカウントを作成し、speech_recognitionという新規プロジェクトを作成しましょう。

次に、音声検出用MLモデルの学習に必要なデータを取得するのに利用するNano 33 BLE Senseボードを、Edge Impulseアカウントに設定します。PCに以下のソフトウェアをインストールします。

PCにソフトウェアをインストールし正常に実行できれば、Nano 33 BLE SenseをEdge Impulseに接続します。接続するための正しいファームウェアがボードにインストールされていません。ボードをEdge Impulseに接続するためには、ファームウェアの更新が必要です。

  1. 最新のNano 33 BLE Sense board Edge Impulseファームウェアをダウンロードします。ファイルを、PCの既知の場所で、unzipします。
  2. 利用しているPCのOS用のフラッシュスクリプトを開きます(flash_windows.batあるいは、flash_mac.command、flash_linux.sh)。
  3. ファームウェアのフラッシュが完了するのを待ち、ボードのリセットボタンを押し、ボードを起動します。

次に、コマンドプロンプトかターミナルを開き、実行します。

1
$ edge-impulse-daemon

Edge Impulseアカウントにログインするウィザードが起動し、プロジェクトを選びます。

注意: Googleのような別のサービスにログインしてEdge Impulseのアカウントを作った場合は、アカウントに対するパスワードがないため、エラーが発生します。解決するには、“Forgot your password?“をくりっくして、アカウントのパスワードをリセットし、指示に従います。

アカウントに複数のプロジェクトがあり、プロジェクト間を移動したい場合は、以下を実行します。

1
$ edge-impulse-daemon --clean

まだプロジェクトを作っていなければ、他のプラットフォームで新しいプロジェクトが自動的に作られ、それを見つけられないかもしれません。speech_recognitionというプロジェクトを作成したことを確認してください。

次に、Edge Impulseアカウントで、左側のメニューのDevicesに移ります。Nano 33 BLE Senseボードの名前がIDとともに表示されます。ボードがEdge Impulseに正しく接続されていれば、緑の点が表示されます。

注意: コマンドプロンプトやターミナルが閉じられると、ボードとEdge Impulseアカウント間の接続が閉じられることに注意してください。

データセットの作成とキュレーション

モデル用のデータ収集を開始する準備ができました。音声内のキーワードを認識させるMLモデルを学習させましょう。認識させるキーワードは、redとgreen、yellowです。

最初のステップは、MLモデルに認識させるキーワードの代表的なデータセットを作成することです。Edge Impulseで、左側のメニューのData acquisitionから、Record new dataに進みます。Deviceオプションで、設定したデバイスを選んでください。Sensorオプションで、built-in microphoneを選びます。sample length(in milliseconds)を2500にし、 Frequency (in Hz)は、16000のままにしておきます。

次に、Labelに、redと入力し、Start samplingボタンをクリックします。これで、Nano 33 BLE Senseボードの内蔵マイクで1500ミリ秒間のサンプリングを開始します。この間、redというキーワードを発話します。この際、マイクを近づけてください。最低でも50のサンプルを録音してください。greenとyellowについて、これを繰り返します。収集したデータ(録音したサンプル)と、録音した個々のサンプルのグラフがEdge Impulseに表示されます。

最初のサンプルを録音した後に、音声を聞き、録音が明瞭で、背景雑音がないことを確認することができます。

また、完全に静かで何も言わずに、さらに50個のサンプルを録音し、noiseというラベルをつけます。このサンプルは、MLモデルがキーワードを何も話していないことを認識するにに役立ちます。全部で、4つの異なるラベルで、約8分間のデータ収集を行います。

これは、Edge Impulseでの非常に基本的なデータ収集です。より強固なモデルを学習するには、以下の推奨に従ってください。

  1. 録音するサンプルは、1秒から3秒としてください。
  2. 各サンプルには、一つのキーワードだけを含めてください。
  3. 最低50サンプル集めてください。100サンプルがよく、1000サンプルを超えると最高です。サンプルが多いほどいい結果が得られます。
  4. サンプルにはさまざまな種類の発音や、アクセント、抑揚を含めてください。

Impulseの作成

データサンプルがすべてそろったので、impulseを設計していきます。impulseは、簡単に言えば、MLモデルのトレーニング方法で、MLを入力データに対してよりよく適合させるために実行されるアクションを定義する場所で、データ分類用アルゴリズムを定義する学習ブロックです。左側のメニューのImpulse Designに移り、Add a processing blockをクリックします。Audio (MFCC)を追加し、Add learning blockを選択し、Classification (Keras)を追加します。各ブロックの全ての設定をデフォルト値のままにしてください。Save impulseをクリックします。

Impulse特徴量の生成

入力データから特徴量を生成します。特徴量は、収集したデータに固有のプロパティを表すもので、音声内でキーワードを認識する分類アルゴリズムで利用されます。まだ、デフォルトの設定とパラメータを変更しないでください。

Save parametersをクリックし、その後、Generate featuresタブに移動し、Generate featuresボタンをクリックしてください。この操作は、データセットの大きさに王子て完了するのにしばらく時間がかかります。操作が終わると、取得した結果を確認できます。

右側に、データセットの特徴量が表現されます。

MLモデルのトレーニング

データセットを使う準備ができたので、左側のメニューのNN Classifierに移動しましょう。設定はデフォルトのままにしておいてください。

MLモデルをトレーニングするために、Start trainingをクリックしてください。データセットの大きさによって実行に時間がかかります。完了すると、検証段階でどの程度モデルが機能したのかを示す統計パラメータが表示されます。各パラメータの精度が高く、100%に近い値が表示されるはずです。統計パラメータの結果が、100%と離れていて悪ければ、データセットを見て、代表的でない結果を取り除くことで修正できます。

MLモデルの仕様

MLモデルができたので、エッジデバイスでテストしてみましょう。トレーニングしたMLはマイクロコントローラーのような組込みハードウェアでの利用に既に最適化されています。MLモデルをNano 33 BLE Senseボードにデプロイすることは簡単で、左側のメニューのDeploymentをクリックするだけです。

Create libraryセクションで、Arduino libraryをクリックし、下側の、Buildボタンをクリックします。これにより、トレーニングしたMLモデルを持つArduinoボード用に、Edge Impulseを生成するプロセスを開始します。生成プロセスが完了したら、生成したライブラリのダウンロードがブラウザで開始されます。

Edge Impulseで生成したArduinoライブラリを開きます。コマンドプロンプトかターミナルを閉じて、Edge Impulseをボードから切断してください。Arduino IDEを開き、スケッチに移動し、ライブラリをインクルードを選択し、.ZIP形式のライブラリをインストール…をクリックします。ダウンロードフォルダに行き、Edge Impulseにより生成された.ZIPファイルを選択します。開くをクリックします。ライブラリがインストールされ、使用できるようになり、テストできます。

ファイルを選択し、スケッチ例を選び、カスタムライブラリのスケッチ例に移動します。“speech_detection Inferencing"というスケッチ例があるはずです。nano_ble_33_sense_microphone_continuousを選択します。Edge ImpulseでトレーニングしたMLモデルをテストするためのコードが開かれます。これをコンパイルして、Nano 33 BLE Senseボードにアップロードします。Arduino 33 BLE Senseボードを選択し、そのボードが接続されているポートを選択してください。

シリアルモニタを開くと、MLモードが動作しているのがわかります。正常動作していることを確認するには、画面のキーワードラベル(greenとnoise、red、yellow)の後に、予測値が表示されていることを確認します。MLモデルが、音声中にgreenやnoise、red、yellowを検出すると、予測出力の一つ、すなわち、確率が上昇し、1に近づきます。

プログラムの修正と内蔵RGB LEDの利用

音声にキーワードを検出したら、Nano 33 BLE Senseの内蔵RGB LEDを点滅させるにはどうすればいいでしょうか? 例えば、音声からredというキーワードが検出されたときに、ボードの内蔵RGB LEDの赤を点灯したければ、redクラス(2番目のインデックス)が0.8以上の確率を生成していることを確認します。以下の画像はこのプログラム実装を表しています。他のキーワードでも同じことを試してください。setup()関数でボードのRGB LEDを設定してください。

おめでとうございます。簡単なANNを実装し、Edge Impulseを使い、Arduino Nano 33 BLE Senseで音声キーワードを認識する、簡単なANNを実装することができました。

トラブルシュート

Windowsで作業していると、以下のエラーが発生するかもしれません。

1
fork/exec C:\Users\MYUSER\AppData\Local\Arduino15\packages\arduino\tools\arm-none-eabi-gcc\7-2017q4/bin/arm-none-eabi-g++.exe: The filename or extension is too long.

このエラーは、ネストしたライブラリに関係していて、Windowsが扱える以上のパスを生成したときに発生します。この記事を参照して修正してください。

おわりに

機械学習の基本を学びました。また、Edge Impulseで音声内のキーワードを認識する簡単なANNを作成し、Arduino Nano 33 BLE Senseボードにデプロイしました。この簡単なANNは、音声内のredとgreen、yellowというキーワードを認識したら、Arduino Nano 33 BLE Senseの内蔵LEDを点灯します。

現在、MLは我々の周囲にあふれています。ソーシャルメディアからナビゲーション用の地図まで、MLは生活のあらゆる場面で、活用されています。さらに詳しくしりたければ、以下のリンクを参照してください。

  • Edge Impulse: Edge Impulseのドキュメントサイトで、ユーザーガイドやチュートリアル、APIドキュメントがあります。
  • [Introduction to Embedded Machine Learning](Introduction to Embedded Machine Learning): Courseraのオンラインコースで、Shawn HymelとAlexander Fred-Ojalaが、MLシステムの基本や組込みシステムでの決定や予測のためのMLの使い方、MLモデルをマイクロコントローラーにデプロイする方法を教えます。このチュートリアルは、Edge ImpulseとArduinoでのShawnの作業に基づいています。
  • The Future of ML is Tiny and Bright: ハーバード大学とGoogle TensorFlowにより提供される、このすばらしいプロフェッショナル認定プログラムでは、Tiny Machine Learning(TinyML)という発展する分野や、その実世界での応用、変革的な技術の将来での可能性について学びます。
  • Training a Custom Machine Learning Model for Portenta H7: Sebastian Romeroが、Edge Impulseでカスタムマシンラーニングモデルの訓練方法と、Portenta Vision Shieldを使った実行方法を教えます。このチュートリアルは、Edge ImpulseとPortenta H7SebastianでのSebastianの作業に基づいています。

オリジナルのページ

https://docs.arduino.cc/tutorials/nano-33-ble-sense/edge-impulse/

最終更新日

August 1, 2026

inserted by FC2 system