2018年9月4日火曜日

非可逆圧縮音声ファイルと非圧縮音声ファイルの自動判定

はじめに


人間の耳では感知しにくい、mp3による圧縮音声と非圧縮音声の違いをニューラルネットワークを使って判定できるか試してみます。

mp3とwavのスペクトログラムを下図のように比較すると、明らかに周波数の高い部分がmp3では消えているので、それを特徴として捉えられれば判定できそうです。

方法


Hennequinらの方法(Codec Independent Lossy Audio Compression Detection, 2017)を参考にしました。

今回の実験に使用したニューラルネットワークを以下に示します。 入力は、フレーム長(窓幅)を512サンプルとした対数パワースペクトルです。Nフレームつなげたものを画像とみなしてCNNで処理します。フレームシフトは256サンプルです。活性化関数は全てLeakyReLUです。

Conv2D     Nx256 32-channel
MaxPooling (N/2)x128 32-channel
Conv2D     (N/2)x128 16-channel
MaxPooling (N/4)x64 16-channel
Conv2D     (N/4)x64 16-channel
MaxPooling (N/8)x32 16-channel
Conv2D     (N/8)x32 16-channel
MaxPooling (N/16)x16 16-channel
Conv2D     (N/16)x16 16-channel
Flatten    (N/16)x16x16
Dense      64
Dropout
Dense      64
Dropout
Dense      2
Softmax(2-classes)

データ


訓練データは12曲で、先頭から曲の終端まで1000フレーム(5.8秒)ごとに1回、特徴ベクトルを抽出しました。 合計506個です。検証用データは15曲で特徴ベクトルは792個です。

結果


1エポック当り100ステップ、バッチサイズ4で50エポック訓練した結果、以下のようになりました。 N=1のみ3回実験しました。
NTrain-accValidation-acc
102410.968250
5120.9992500.955000
2560.9982500.902750
1280.9952500.933000
640.9935000.864750
320.9787500.925500
160.9815000.976750
80.9855000.972250
40.9800000.899500
20.9815000.889000
10.9750000.931500
10.9635000.956000
10.9547500.936250
Nが小さくても判定できています。僅か1フレームでも9割前後の精度がでています。 なお、MaxPooling層がない場合は訓練が進まず、精度がまったくでませんでした(0.5前後で運任せ)。

コード


https://bitbucket.org/bluewidz/mp3detect/src/default/ を参照ください。

0 件のコメント :