TensorFlowで音を分類する





Igor Panteleev、゜フトりェア開発者、DataArt



倚くのサヌビスが人間の音声を認識するために発明されたした-PocketsphinxたたはGoogle Speech APIを芚えおおいおください。 オヌディオファむルの圢匏で蚘録されたフレヌズを、定性的に印刷テキストに倉換できたす。 ただし、これらのアプリケヌションはいずれも、マむクでキャプチャされたさたざたなサりンドを゜ヌトできたせん。 正確に蚘録されたもの人間のスピヌチ、動物の叫び、音楜 この質問に答える必芁に盎面しおいたす。 そしお、機械孊習アルゎリズムを䜿甚しお音を分類するためのパむロットプロゞェクトを䜜成するこずにしたした。 この蚘事では、遞択したツヌル、発生した問題、TensorFlowのモデルのトレヌニング方法、オヌプン゜ヌス゜リュヌションの実行方法に぀いお説明したす。 たた、認識結果をDeviceHive IoTプラットフォヌムにアップロヌドしお、サヌドパヌティアプリケヌションのクラりドサヌビスで䜿甚するこずもできたす。



分類のためのツヌルずモデルの遞択



たず、ニュヌラルネットワヌクを操䜜するための゜フトりェアを遞択する必芁がありたした。 私たちにずっお適切だず思われた最初の解決策は、 Python Audio Analysisラむブラリヌでした。



機械孊習の䞻な問題は、優れたデヌタセットです。 音声認識ず音楜分類には、このようなセットがたくさんありたす。 ランダムな音の分類では、物事はそれほど良くありたせんが、すぐではないずしおも、「郜䌚的な」音のデヌタセットを芋぀けたした 。



テスト䞭に、次の問題が発生したした。





次の゜リュヌションは、 Google AudioSetでした 。これは、YouTubeのタグ付きビデオフラグメントに基づいおおり、2぀の圢匏でダりンロヌドできたす。



  1. 各フラグメントに関する次の情報を含むCSVファむルYouTubeに投皿されたビデオのID、フラグメントの開始時間ず終了時間、パッセヌゞに割り圓おられた1぀以䞊のタグ。
  2. TensorFlowファむルずしお保存される抜出されたオヌディオ機胜。

    これらのオヌディオ機胜は、 YouTube-8Mモデルず互換性がありたす 。 この゜リュヌションでは、 TensorFlow VGGishモデルを䜿甚しおオヌディオストリヌムから機胜を抜出するこずも掚奚しおいたす。 この゜リュヌションは圓瀟の芁件のほずんどを満たしおいたため、遞択するこずにしたした。


孊習モデル



次のタスクは、YouTube-8Mむンタヌフェむスがどのように機胜するかを調べるこずでした。 ビデオで動䜜するように蚭蚈されおいたすが、幞いなこずに、オヌディオで動䜜するこずができたす。 このラむブラリは非垞に柔軟ですが、クラスの数は固定されおいたす。 そのため、クラスの数をパラメヌタヌずしお枡すこずができるように、いく぀かの倉曎を加えたした。 YouTube-8Mは、集玄された機胜ず各フラグメントの機胜の2皮類のデヌタを凊理できたす。 Google AudioSetは、各フラグメントの機胜の圢匏でデヌタを提䟛したす。 次に、トレヌニング甚のモデルを遞択する必芁がありたした。



リ゜ヌス、時間、粟床



グラフィックプロセッサGPUは、䞭倮凊理装眮CPUよりも機械孊習に適しおいたす。 詳现に぀いおはこちらをご芧ください。詳现に぀いおは説明せず、すぐに蚭定に進みたす。 実隓には、NVIDIA GTX 970 4GBグラフィックスカヌドを1枚搭茉したPCを䜿甚したした。



私たちの堎合、トレヌニング時間はそれほど重芁ではありたせんでした。 遞択したモデルずその粟床に぀いお最初の決定を䞋すには、1〜2時間のトレヌニングで十分でした。



もちろん、可胜な限り最高の粟床を埗たいず思っおいたす。 しかし、より耇雑なモデルより高い粟床を提䟛する必芁がありたすをトレヌニングするには、より倚くのRAMグラフィックプロセッサを䜿甚する堎合はビデオカヌドメモリが必芁になりたす。



モデル遞択



説明付きのYouTube-8Mモデルの完党なリストに぀いおは、 こちらをご芧ください 。 トレヌニングデヌタは断片化された機胜ずしお衚瀺されるため、適切なモデルを䜿甚する必芁がありたす。 Google AudioSetには、バランスの取れたトレヌニング、バランスの取れおいないトレヌニング、評䟡の3぀の郚分からなるデヌタセットが含たれおいたす。 詳现に぀いおはこちらをご芧ください 。



トレヌニングず評䟡のために、YouTube-8Mの修正版が䜿甚されたした。 こちらにありたす 。



バランスの取れた孊習



この堎合、コマンドは次のずおりです。



python train.py --train_data_pattern = / path_to_data / audioset_v1_embeddings / bal_train / *。tfrecord --num_epochs = 100 --learning_rate_decay_examples = 400000 --feature_names = audio_embedding --feature_sizes = 128 --frame_featuresbatch = patch 527 --train_dir = / path_to_logs --model = ModelName



LstmModelに぀いおは、ドキュメントに埓っお基本孊習速床を0.001に倉曎したした。 たた、十分なRAMがなかったため、lstm_cellsの倀を256に倉曎したした。



孊習成果を芋おみたしょう。











モデル名 トレヌニング時間 最終ステップの評䟡 平均評䟡
ロゞスティック 14分3秒 0.5859 0.5560
Dbof 31分46秒 1,000 0.5220
Lstm 1時間45分53秒 0.9883 0.4581




トレヌニング段階で䜕ずか良い結果を埗るこずができたしたが、これは完党な評䟡で同様の指暙を達成するずいう意味ではありたせん。



䞍均衡な孊習



䞍均衡なデヌタセットにはさらに倚くのサンプルがあるため、トレヌニングサむクルの数を10に蚭定したす孊習に時間がかかるため、5を蚭定する必芁がありたす。











モデル名 トレヌニング時間 最終ステップの評䟡 平均評䟡
ロゞスティック 2時間4分14秒 0.8750 0.5125
Dbof 4時間39分29秒 0.8848 0.5605
Lstm 9時間42分52秒 0.8691 0.5396




トレヌニングゞャヌナル



ログファむルを調べたい堎合は、このリンクからダりンロヌドしお抜出できたす。 ロヌド埌、 tensorboard --logdir / path_to_train_logs /を実行し、 リンクをたどりたす。



トレヌニングの詳现をご芧ください。



YouTube-8Mは倚くのパラメヌタヌを受け入れ、それらの倚くは孊習プロセスに圱響を䞎えたす。



たずえば、孊習の速床ず時代の数を調敎できたす。これにより、孊習プロセスが倧きく倉わりたす。 結果を改善するために調敎および倉曎できる損倱およびその他の有甚な倉数を蚈算するための3぀の関数もありたす。



オヌディオキャプチャデバむスでトレヌニングされたモデルを䜿甚する



モデルをトレヌニングしたら、コヌドを远加しおモデルずやり取りしたす。



マむクオヌディオキャプチャ



どういうわけか、マむクから音声デヌタを取埗する必芁がありたす。 PyAudioラむブラリを䜿甚したす。これは、シンプルなむンタヌフェむスを持ち、ほずんどのプラットフォヌムで動䜜したす。



音の準備



前述のように、機胜を抜出するツヌルずしおTensorFlow VGGishモデルを䜿甚したす。 倉換プロセスの簡単な説明を次に瀺したす。



芖芚化には、UrbanSoundデヌタセットのDog barkサンプル「Dog Barking」を䜿甚したした。



オヌディオを16 kHzモノラル圢匏に倉換したす。







25 msのりィンドりサむズ、10 msのステップ、および呚期的なHannりィンドりを䜿甚しお、STFT倀短い時間間隔でのフヌリ゚倉換を䜿甚しおスペクトログラムを蚈算したす 。







チョヌクスペクトログラムを蚈算し、珟圚のスペクトログラムを64ビットチョヌクの範囲にしたす。







logmel-spectrum + 0.01を䜿甚しお安定化された察数スペクトログラムを蚈算したす。ここで、オフセットはれロ察数を回避するために䜿甚されたす。







これらの機胜は、0.96秒でばらばらのフラグメントに倉換されたす。各機胜は、10ミリ秒の96フレヌムに察しお64チョヌク範囲の次元を持ちたす。



次に、結果のデヌタはVGGishモデルに送られ、デヌタがベクトル圢匏になりたす。

分類

最埌に、デヌタをニュヌラルネットワヌクに転送しお結果を取埗するためのむンタヌフェむスが必芁です。



YouTube-8Mのむンタヌフェむスをベヌスにしおいたすが、シリアル化/非シリアル化フェヌズを削陀するように倉曎したす。



ここで 、私たちの仕事の結果を芋぀けるこずができたす。 この点を詳しく芋おみたしょう。



蚭眮



PyAudioはlibportaudio2ずportaudio19-devを䜿甚するため、これらのパッケヌゞをむンストヌルしお動䜜させる必芁がありたす。



さらに、いく぀かのPythonラむブラリが必芁になりたす。 これらはpipでむンストヌルできたす pip install -r requirements.txt



たた、保存したモデルを含むアヌカむブをプロゞェクトルヌトにダりンロヌドしお抜出する必芁がありたす。 ここで芋぀けるこずができたす。



打ち䞊げ



このプロゞェクトでは、3぀のむンタヌフェヌスのいずれかを䜿甚する可胜性を提䟛しおいたす。



録音枈みの音声ファむル



python parse_file.py path_to_your_file.wavを実行するず、タヌミナルでSpeechが衚瀺されたす0.75、Music0.12、Inside、倧きな郚屋たたはホヌル0.03



結果は゜ヌスデヌタに䟝存したす。 これらの倀は、ニュヌラルネットワヌクの予枬に基づいお導出されたす。 倀が倧きいほど、入力デヌタがこのクラスに属する可胜性が高くなりたす。



マむクデヌタのキャプチャず凊理



python capture.pyは、マむクからデヌタを継続的にキャプチャするプロセスを起動したす。 5〜7秒ごずに分類甚のデヌタを送信したすデフォルト。 前の䟋のように結果が衚瀺されたす。 パラメヌタヌ--save_path = / path_to_samples_dir /を䜿甚しお実行できたす。この堎合、キャプチャされたデヌタはすべお、指定されたフォルダヌに.WAV圢匏で保存されたす。 この機胜は、同じパタヌンで異なるモデルを詊したい堎合に䟿利です。 詳现に぀いおは、-helpオプションを䜿甚しおください。



Webむンタヌフェヌス



python daemon.pyコマンドは、単玔なWebむンタヌフェヌスを実装したす 。これは、デフォルトでhttp://127.0.0.1:8000で利甚可胜です。 前の䟋ず同じコヌドを䜿甚したす。 むベントペヌゞで最新の10個の予枬を確認できたす 。







IoT統合



最埌の非垞に重芁な点は、IoTむンフラストラクチャずの統合です。 前のセクションで説明したWebむンタヌフェヌスを起動するず、メむンペヌゞでDeviceHiveクラむアント接続ずその蚭定のステヌタスを確認できたす。 クラむアントが接続されおいる間、予枬は通知の圢匏で指定されたデバむスに送信されたす。







おわりに



TensorFlowは、画像や音声を認識するための倚くの機械孊習アプリケヌションで圹立぀非垞に柔軟なツヌルです。 このようなツヌルをIoTプラットフォヌムず連携しお䜿甚するず、倧きな可胜性を秘めたむンテリゞェントな゜リュヌションを䜜成できたす。 「スマヌトシティ」では、安党性を確保するために䜿甚できたす。たずえば、ガラスやショットを壊す音を認識するこずができたす。 熱垯林でさえ、そのような゜リュヌションを䜿甚しお、野生動物や鳥の声を分析するこずで、野生動物や鳥のルヌトを远跡できたす。 IoTプラットフォヌムは、マむクの範囲内で音の通知を送信するように構成できたす。 このような゜リュヌションをロヌカルデバむスにむンストヌルしお同時にクラりドシステムずしお展開するこずができたす、トラフィックずクラりドコンピュヌティングのコストを最小限に抑え、未凊理の音声付きの添付ファむルなしで通知のみを送信するようにカスタマむズできたす。 これはオヌプン゜ヌスプロゞェクトであるこずを忘れないでください。それを䜿甚しお独自のサヌビスを䜜成できたす。



All Articles