💬

Time domain 音声分離の始まりを追う(TasNet)

2022/04/24に公開

はじめに

音声分離において,Time-FrequencyでSTFTを使って周波数領域で音声分離することが多かったのですが,2018年頃から,フーリエ変換をしないで,時間領域で特徴量に変換して,音声にマスクすることで,音声分離をする手法が増えて来ました.
その中でも特にConv-TasNetはブレイクスルーとなった重要な手法です.

そこで,Conv-TasNetでも紹介されたTasNetについて軽く読んだので,まとめておきます.

Abstract

本論文ではAudio Separation Network(TasNet)を提案します.これは,encoder-decoderで音声を分離する,時間領域で直接シグナルを推定するモデルです.

このモデルは,今までのような音声分解ステップを削除して,分離問題をエンコーダからの出力の特徴量に落とし込み,マスク推定してデコーダで合成される.

これは周波数領域で学習する手法よりも精度と計算量に大幅な改善があった.

introduction

  • STFTを用いた手法は以下の点で問題である.

    • フーリエ変換が音声分離に最適な信号の変換であるかどうか不明
    • STFTは信号を複素数領域に変換するが,振幅と位相の両方を扱う必要がある.
  • 今までは,位相の情報は,応急処置として,noisy音声から持ってきてdecodeに用いることが多かった.

  • 最近真相学習の精度がどんどん良くなってきたので,本論文ではTime-domain Audio Separation Network(TasNet)を提案した.

Model description

2.1 Problem formulation

考え方は非常に簡単です.

まずx(t)を入力音声s_i(x)をi個に分離された音声とすると,以下のように表せます.
例えば,ノイズと綺麗な音声だとi=2となります

x(t) = \sum_{t=1}^{C} s_i(t)

まず,長さLのK個のフレームに分割します.ここで,フレームの重なりはないように分割します

また、x(t)s_i(t)の集合を以下のベクトルで表します。

式の簡素化のために、kは以降で省略します。

convolution のカーネルを\bf Bと表すと、以下のような関係となります。

ここで、convolution後の混合音声の特徴ベクトル\bf{w}は、decode前の特徴量\bf{d_i}を用いて以下のように表せる

その理由として、(\bf{w}, \bf{d_i})は非負で、入力音声特徴量をマスクするような,m_iを求めるからです。以下の式で表します。

Network design

以下にネットワークの図を示します。
Networkは、混合音声特徴量を推測するencoder、分離モジュール、音声を再構成するdecoderの3つに分かれています。
中の1-D convolutionによって、混合波形の非負のオートエンコーダが構築されます。

2.2.1 Encoder for mixture weight calculation

まず、Encoderの機構として、Convolutionのカーネルを\bf{U} \in \mathbb{R}^{N \times L},\bf{V} \in \mathbb{R}^{N \times L}、○の中に*がある記号をConvolution operator,とすると、以下のようにReLUとSigmoidの活性化関数の要素ごとの掛け算で表す。

なぜこのようにしたのかは、こちらに影響されたらしく、ReLUやSigmoidを単体で使うより性能が上がったらしいです。

これは他でも使えそうですね。

2.2.2 Separation network

マスクを推定するモジュールとしてLSTMとFC層を使っています。
LSTMの入力は混合音声特徴量のwで、出力はマスクmです。

また、学習を高速化させるために、Layer Normalizationをしています。

また、2層目のLSTMには、スキップ結合(おそらくresidual connection)

2.2.3 Decoder for waveform reconstruction

最後に、推測したマスクと混合音声特徴量を要素ごとに乗算して強調音声の特徴量D_iを出力します。

最終的に分離された音声のS_iを1-D filterにより、導出します。

\bf{S}_i = \bf{D}_i \bf{B}

また、\bf{S}はK個のセグメント分あるので、単純に結合します。

s_i(t) = [\bf{S}_{i,k}], k=1,2,....,K

2.4 Training objective

学習は、SDRを直接SDRの代わりにSI-SNRを最大化することを目標として学習していきます。

これを用いてPermutation Invariant Training(PIT)でlossを算出するようだ。(まだあんまり分かっていない...)

[追記]PITについて 2022/07/04

Permutation問題について少し理解したので、記述しておく。

Speech EnhancementやSpeech Dializationなど、音声を分離するタスクのなかで、分離された音声がどちらの正解ラベルの推論値であるかを知る必要がある。(これが Permutation問題)

そこで、それを解決するために、推論値と正解ラベルを交差検証的にLossを計算して、より小さかったほうを正解ラベルとあっている方にするというのが、PITなどのPermutationを解決する手法である。

他にも色々あるので、調べてほしい。

Experiments

Dataset

データセットは、WSJ0(Wall Street Journal)のデータから2話者の音声を重畳したWSJ0-2mixを用いる。

Network configration

細かいところは論文を読んでみてほしい。

ここで、特筆することは、LSTMとBLSTMを使っていることだ。しかし、BLSTMは未来の情報も利用していることから、リアルタイムの処理には使えない。

result

Causalとは、現在と過去の値のみを考慮して推測するということである。BLSTMは未来の情報が過去にリークしちゃっているので、現実的には使えない。

LSTM、BLSTMともに、Conv-TasNetは非常に良い性能が出ていることが考察される。

また、最小レイテンシー(ms)も、TasNetを用いたときのほうが大幅に上回っている。

まとめ

最後の結果から見ると、Time Domainで音声分離する方法は非常に有効で、また、計算時間も大幅に改善されていることが分かった。

現在では、より精度のよく、早い、Conv-TasNetがあり、そちらはSEのブレイクスルーとなるなど、Time Domainで音声分離やSEする手法が盛んである。
これからも様々な手法を追っていきたい。

参考資料

https://arxiv.org/abs/1612.08083

https://www.slideshare.net/DeepLearningJP2016/dldiscriminative-learning-for-monaural-speech-separation-using-deep-embedding-features

https://arxiv.org/pdf/1711.00541.pdf

Discussion