ailia Tech BLOG

CrnnSoundClassification : 音声を分類する機械学習モデル

ailia SDKで使用できる機械学習モデルである「CrnnSoundClassification」のご紹介です。エッジ向け推論フレームワークであるailia SDKailia MODELSに公開されている機械学習モデルを使用することで、簡単にAIの機能をアプリケーションに実装することができます。

CrnnSoundClassificationの概要

CrnnSoundClassificationは音声ファイルを入力として、10クラスに分類する機械学習モデルです。

出典:https://github.com/ksanjeevan/crnn-audio-classification

認識できるクラスは下記となります。

air_conditioner, car_horn, children_playing, dog_bark, drilling, enginge_idling, gun_shot, jackhammer, siren, and street_music

ksanjeevan/crnn-audio-classificationUrbanSound classification using Convolutional Recurrent Networks in PyTorch - ksanjeevan/crnn-audio-classificationgithub.com

CrnnSoundClassificationのアーキテクチャ

CrnnSoundClassificationでは、入力音声に対してMelspectrogram変換を行なってスペクトルに変換した後、CNNとLSTMを使用してFeatureを取得、FCとSoftmaxでクラス分類を行います。

出典:https://github.com/ksanjeevan/crnn-audio-classification

スペクトル変換のパラメータはnet/model.pyで定義されています。

self.spec = MelspectrogramStretch(hop_length=None, num_mels=128, fft_length=2048, norm=’whiten’, stretch_param=[0.4, 0.4])

入力サイズは可変長で、(1,2,num_seconds * sample_rate)が入力となります。例えば、(66026, 2)のwavファイルが入力された場合、AudioInference.inferで(1,66026,1)に変換されます。これをスペクトル変換し、(1,1,128,65)がConvへの入力となります。(99225, 2)のwavファイルが入力された場合、(1,1,128,97)がConvへの入力となります。

Convでは3x3のmaxpoolが1回と、4x4のmaxpoolが2回実行されるため、横幅が(128,65)だとGiven input size: (64x8x2). Calculated output size: (64x2x0). Output size is too smallのエラーが発生します。そのため、短いサンプルはパディングを行う必要があります。

CrnnSoundClassificationはUrbanSound8Kデータセットを使用して学習されています。UrbanSound8Kデータセットはfreesound.orgのfield recordingから収集されています。

UrbanSound8KThis dataset contains 8732 labeled sound excerpts (<=4s) of urban sounds from 10 classes: air_conditioner, car_horn…urbansounddataset.weebly.com

CrnnSoundClassificationのPytorchでの推論

Pytorchで推論するには、下記のIssueから学習済みモデルを入手します。

Model · Issue #2 · ksanjeevan/crnn-audio-classificationYou can't perform that action at this time. You signed in with another tab or window. You signed out in another tab or…github.com

config.jsonが学習時の設定、model.cfgがモデルアーキテクチャ、model_best.pthが重みになっています。

推論を行うには下記のコマンドを使用します。

python3 run.py dog.wav -r downloaded_model/model_best.pth

デフォルトでは、run.pyの168行目で、pthに含まれるフルパスからmodel.cfgが読み込まれます。学習したPCとは異なる環境で推論したい場合は、args.resumeの中のconfig = checkpoint[‘config’]のあとで、下記のようにmodel.cfgへのパスを書き換える必要があります。

config[“cfg”] = “./downloaded_model/model.cfg”

内部的には、torchparseを使用して、model.cfgからネットワークが構築されます。このパスが間違っている場合、下記のエラーが発生します。

File “/crnn-audio-classification/net/model.py”, line 55, in forward
xt = self.net‘convs’
KeyError: ‘convs’

CrnnSoundClassificationの再学習

UrbanSound8Kと同様のcsvファイルを作成することで、独自のデータセットで再学習することが可能です。

./run.py train -c config.json — cfg arch.cfg

データセットのレイアウトは下記のようになっています。

UrbanSound8K/audio/fold1/*.wav
UrbanSound8K/audio/fold2/*.wav
UrbanSound8K/metadata/UrbanSound8K.csv

csvのフォーマットは下記にようになっています。

slice_file_name , fsID , start , end , salience , fold , classID , class
100032–3–0–0.wav , 100032 , 0.0 , 0.317551 , 1 , 5 , 3 , dog_bark

CrnnSoundClassificationの使用方法

ailia SDKで使用するには下記のコマンドを使用します。任意の音声ファイルを分類することができます。

python3 crnn_sound_classification.py -i dog.wav

この例では、dog.wavがdog_barkに分類されます。

dog_bark
0.8683825731277466

ailia-ai/ailia-modelsPretrained models for ailia SDK. Contribute to ailia-ai/ailia-models development by creating an account on GitHub.github.com


アイリア株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。アイリア株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。