今回の初心者講座では、シングルボードコンピュータ「SPRESENSE」をセンサーハブとして扱い、SPRESENSEの周辺環境の情報を採取。「Neural Network Console」で構築したディープニューラルネットワーク(DNN)のモデルにより情報を分析する方法を紹介します。ここではSPRESENSEに搭載されたハイレゾオーディオ入力を活用し、環境音を採取。Neural Network Consoleで音声分類を実行します。なお録音には、4chのアナログマイクを搭載したAPS学習ボードを利用します(図1)。
本初心者講座を通してDNNに関する知識を順序だてて習得いただけるよう、まず今回、第19回では、SPRESENSEにより環境音を録音し、音声分類に不可欠な学習用データと検証用データを生成する方法について解説します。また、最後にPC上で動作するNeural Network Consoleによって生成した推論モデルをエッジ・デバイスへ統合するために解決すべき課題を整理します。次回、第20回の初心者講座では推論モデルを最適化し、エッジデバイス上へと移植。SPRESENSE×Neural Network Consoleによりスマート・エッジを実現する方法を紹介します。
目次
ディープニューラルネットワークを活用した音声識別システムを開発しよう
DNNを活用した音声識別システムは、大きく5つのブロックから構成されます。環境音をSPRESENSE内部に取り込む「録音機能(図2①、図3①)」、音声データを波形データへと変換する「WAV to CSV変換機能(図2②、図3②)」、学習用データと検証用データを基に「推論モデルを構築する機能(図2④)」、そして「DNNRT機能により推論モデルを実行し波形を分析する機能(図3④)」です。
SPRESENSE×Neural Network Cosoleにより推論モデルを生成するフローを図2に示します。まず、SPRESENSE SDKに同梱されているサンプルプログラムaudio_recorderをベースとした「録音機能」により62秒間(60秒間+予備)のWAV形式音声データを生成します。次に、録音データを0.25秒間隔、長さ0.5秒に切り出した波形データを「WAV to CSV変換機能」により生成します。最後に波形データにラベルを付け(図2③の「River」「Fire」「Wind」など)、音声分類を行うDNNの学習に利用し、推論モデルを生成します。
SPRESENSE×Neural Network Cosoleにより音声分類を行うフローを図3に示します。推論モデルを生成するフローにとてもよく似ています。まず「録音機能」により3秒間(0.5秒間+予備)のWAV形式音声データを生成します。次に、長さ0.5秒分の波形データを「WAV to CSV変換機能」により生成します。生成された1つの波形データをDNNRT機能により実行した推論モデルの入力とし、音声分類を実行。結果としてエッジ単体で録音から分類までを実現することができます。詳細な実装については、次回、第20回にて紹介いたします。
Neural Network Consoleで扱う学習用データを準備する
さて、音声分類システムを実現するために不可欠な学習用データを準備していきましょう。
学習用データの構造
Neural Network Consoleでは、学習用データと検証用データをCSV形式のファイルにより管理します。学習用データセットを定義するCSVファイル(図4①)は、波形ファイルへのファイルパスを示す列と、波形を分析した結果、期待する出力を示す列から構成されます(図4②)。図4②の1行目は入力列の名前「x:image」と出力列の名前「y:label」を定義しており、2行目は波形「./00/0.csv」の推論結果が「1」であることを定義しています(図4③、④)。波形ファイルは、各サンプリング値を列挙します(図4⑤)。
SPRESENSEのオーディオ機能を使って学習用の波形データを採取する
学習用データを構成する波形データを生成する方法を図5に示します。波形データを生成する際は、データとデータの継ぎ目にある情報が失われないよう、0.25秒間隔で切り出した長さ0.5秒分の波形データを準備し、すべての波形データが別の波形データとオーバーラップするようにデータを構築します。録音処理のみで完全にオーバーラップしたWAV形式のファイルを生成することは難しいことから、まず連続した62秒間(60秒間+予備)の録音を実行し、1個のWAV形式のファイルを生成した後、240個のCSV形式の波形データを切り出します。
生成した240個の波形データのうち、前半220個を学習用データに、後半220個を検証用データとして利用します(図5)。
サンプルプロジェクトから音声分類モデルを構築する
今回は、Neural Network Consoleスターターガイド(音声分類編)にて解説されている「wav_keyboard_sound」をベースとして音声分類のできるDNNを開発しました。「wav_keyboard_sound」はキーボードの打鍵音から、キーボードに使われているメカニカルスイッチの種類を特定するDNNです(図6)。
NeuralNetworkConsole クラウド版スターターガイド(音声分類編) – page 18
Neural Network Consoleを起動しMore Sample Projectから「wav_keyboard_sound」をダウンロードし、プロジェクトを開くと図7のモデルが表示されます。本モデルは、①入力として11025点でサンプリングされた音声データに対して、②コンボリューションをと呼ばれる畳み込み演算を行うサブモジュールを複数回適用し、③十分に波形パターンを絞り、④最終的に入力データが4種類のいずれのパターンであるかの確率を出力するDNNです。
wav_keyboard_soundを参考に開発した、SPRESENSEにより録音した0.5秒間 48kHzサンプリングの音声データを分類するDNNを図8に示します。図8のモデルは、①入力として24456点(0.5秒間、48kHz、モノラル)の音声データに対して、②コンボリューションを行うサブモジュールを複数回適用し、③十分に波形パターンを絞り、④最終的に8種類のいずれのパターンであるかを特定します。音声の内容が「弱い風」「強い風」「雨」「炎」「川」「1kHzのサイン波」「鈴虫」「(未使用)」のいずれである確率が高いかを出力します。
モデルの学習を行い、推論モデルを生成する
最後に、SPRESENSEによって生成した学習用データをモデルの学習(Train)に利用すると、図9に示す学習曲線のように推論モデルが収束していきます(学習曲線の意味については第18回をご参照ください)。
学習後、検証(Evaluate)を実行すると、各波形に対して期待する出力を得られることを確認できます(図10)。
SPRESENSE上で推論モデルを実行するには
SPRESENSE上に推論モデルを統合するためには、DNNRT機能が推論モデルを実行するために必要とするメモリ量を1.5MB以下に抑えなければなりません。DNNRT機能が推論モデルの実行に必要とするメモリ量は、DNNを構成する各処理の入出力データ量の最大値です。第18回にて解説したオートエンコーダーの場合、DNNRT機能は16×64×4byte=4096byteのメモリ領域を必要とします。(図11)。
今回構築した音声分類DNNの場合、DNNRT機能は24570×1×16×4byteの1572480byteを必要とします(図12)。このサイズのメモリ量を組み込みシステム上に確保することは現実的でないことから、PCでなくエッジで推論モデルを実行するためには、モデルを最適化し、メモリの消費量を削減しなければなりません。今回の初心者講座を通して、録音したデータから結果を導出できることまでは確認できましたので、次回の初心者講座では、推論モデルを最適化し、エッジ上で録音から推論まで完結するシステムを実現する方法について紹介してたいと思います。
まとめ
今回は、SPRESENSEに搭載されたハイレゾオーディオ機能を使ってディープニューラルネットワークの学習用データを生成、Neural Network Consoleのモデルの学習を実施し、推論モデルが正常に機能することを紹介しました。
次回は、モデルの最適化を行い、推論モデルをエッジデバイス上で実行、エッジで完結するスマートシステムを実現する方法を解説いたします。ご期待ください。
こちらも是非
“もっと見る” マルチコア|SPRESENSE編
SPRESENSE×Neural Network Console:第4回|推論モデルを最適化し、エッジAIによるオリジナルの音声識別システムを構築する
今回の初心者講座では、SPRESENSEの「ハイレゾオーディオ入力」と「DNNRT機能」により「Neural Network Console」で生成したディープニューラルネットワーク(DNN)の推論モデルを統合。エッジ単体で完結するオリジナルの音声識別システムを構築する技法を解説いたします。
SPRESENSE×Neural Network Console:第2回|異常検知に活用できるニューラルネットワークで波形の扱い方を学ぶ
SPRESENSEのDNNRT機能が扱うことのできるデータは画像だけでなく、産業分野を中心に人気が高まっている「異常検知・故障予知」に活用できる加速度センサーや大気圧センサーなどから収集した波形データも解析することができます。さらにSPRESENSEに内蔵されたハイレゾオーディオ録音機能も周辺環境を可聴域の波形データとして記録することができる優れたセンサーとして利用可能です。そこで、今回の初心者講座では、まず簡単な波形データの解析方法を例に、DNNRT機能から波形データを扱うシステムの構築方法について解説。DNNRT機能を活用した製品開発に必要となる技術を紹介いたします。
SPRESENSE×Neural Network Console:第1回|エッジで推論モデルを実行し、データを分析する
今回はSPRESENSE SDKの提供するAI、ディープニューラルネットワーク(DNN)実行機能である「DNNRT機能」について紹介します。はじめてSPRESENSEの開発環境に触れる方はもちろん、はじめてDNNに取り組む方も安心して技術を学んでいただけるよう、サンプルアプリケーションの開発・解説をから、アプリケーションの変更方法、実際の環境データを使った解析方法まで段階的に解説します。