[論文メモ] SPEECH DENOISING IN THE WAVEFORM DOMAIN WITH SELF-ATTENTION

arxiv.org
cleanunet.github.io

ICASSP 2022

NVIDIA

波形データを入出力として扱うencoder-decoderのdenoisingモデル、CleanUNetを提案。
masked self-attentionが重要らしい。


手法

入力音声はモノラル。
ノイジーな長さ Tの音声 x_{noisy} \in \mathcal{R}^Tはきれいな音声 xと背景雑音 x_{noise}の合成とする( x_{noisy} =x+_{noise})。
目的はきれいな音声を取り出す関数fを学習すること(\hat x = f(x_{noisy}) \approx x)。
なお時間 tに対応する出力 \hat x_t t以前の音声 x_{1:t}から予測する。

アーキテクチャは図1の通り。
Convolutionを使ったUNetでボトルネック部分をmasked self-attentionにしている。ボトルネック部分だけなら計算コストも抑えられそう。

lossはきれいな音声との L_1 lossと複数解像度のSTFT loss。
スペクトラム s(x;\theta)=|STFT(x)|を考える( \thetaはhop size)。
複数解像度のSTFT lossは下記。

目的関数は \frac{1}{2} M-STFT(x, \hat x) + |x - \hat x|_1となるがまだ問題がある。

full-bandのM-STFT lossは無音領域に低周波ノイズが発生することがある。 l_1 lossだけだと無音部分はきれいだが、高周波帯がM-STFTに比べ良くない。
そこで16kHzなら4~8kHzといった s(x)の半分の部分のみを取り出した s_h(x)を使った M-STFT_h(x, \hat x)に変更する。

最終的な目的関数は \frac{1}{2} M-STFT_h(x, \hat x) + |x - \hat x|_1となる。

実験・結果

encoderとdecoderの深さは D=8カーネルサイズ4、ストライド2。 Nボトルネックの深さ。


Ablation Studies
表4は目的関数による違い。表5はCleanUNetの各コンポーネントの重要性を調べるため、FAIR-denoiserを徐々にCleanUNetに近づけた結果。

所感

loss毎の特性を実験的に見極めは変更していくのは、好き不好きが分かれるところだとは思う。どういう原理か気になる人は気になると思う。
最終的には人間が聞いたときの結果が全てなので、自分はこういう試行錯誤は好き。
UNetアーキテクチャボトルネックをSelf-Attentionにすれば低コストでSAを適用できるので便利そう。