はじめに
人間の耳では感知しにくい、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回実験しました。
N | Train-acc | Validation-acc |
1024 | 1 | 0.968250 |
512 | 0.999250 | 0.955000
|
256 | 0.998250 | 0.902750
|
128 | 0.995250 | 0.933000
|
64 | 0.993500 | 0.864750
|
32 | 0.978750 | 0.925500
|
16 | 0.981500 | 0.976750
|
8 | 0.985500 | 0.972250
|
4 | 0.980000 | 0.899500
|
2 | 0.981500 | 0.889000
|
1 | 0.975000 | 0.931500
|
1 | 0.963500 | 0.956000
|
1 | 0.954750 | 0.936250
|
Nが小さくても判定できています。僅か1フレームでも9割前後の精度がでています。
なお、MaxPooling層がない場合は訓練が進まず、精度がまったくでませんでした(0.5前後で運任せ)。
コード
https://bitbucket.org/bluewidz/mp3detect/src/default/
を参照ください。