[論文メモ] End-to-End Zero-Shot Voice Style Transfer with Location-Variable Convolutions

arxiv.org

End-to-EndなVoice Conversion(VC)モデルの提案。

既存のVCは(メル)スペクトログラム + Vocoder ベースのものが多い。スペクトログラム+Vocoderベースだと、生成されたスペクトログラムの品質やVocoderの品質に左右されるし、スペクトログラムベースのlossになり、時間ドメインでの人間の知覚と異なる場合もある。
なのでEnd-to-End(E2E)でVCしたい。

手法

コンテンツ・スタイルベースのVC。
コンテンツ特徴はソースフィルタモデルを参考にした(声帯振動を声道フィルタで畳み込むことで音声を得る感じ)。
ソースフィルタで音声を逆畳み込みすることでコンテンツとスタイル(話者情報)に分離できる。

入力

時間ドメイン(音声)データ  \textbf{x}のログメルスペクトログラムを \textbf{X}とする。
 Xから得たケプストラムにリフタリング後FFTで周波数に戻したもの(スペクトルのエンベロープ相当) を \textbf{H}とする。
 \textbf{H}はコンテンツ情報を含んでいるのでこれを入力とする。

またもう一つのメインの入力として正規化したログF0特徴  \textbf{p}_{norm}
まず学習データ全てからログF0をサンプリングし平均 \muと分散 \sigma ^2を得る。
それらを使ってログF0  p_{raw}を正規化

 nはフレーム番号
これにより大体0~1の範囲になるので256次元のonehotベクトルにする(はみ出した分はクリップする)。
無音部分も加えた257次元のベクトルで各フレームを置き換えたものがコンテンツ入力になる。

スタイル(話者情報)は話者認識で学習済みのエンコーダ E_sを利用して得る。

また量子化した話者のF0の最頻値もスタイルとして入力する。
log(65.4)Hzからlog(523.3)Hz を64次元のonehotベクトルにした。

アーキテクチャ

アーキテクチャは上記の入力から音声波形を出力するGenerator  Gと話者情報を埋め込むエンコーダ  E_sの2つ。
 GはUnivNetのc16のセッティングを参考にした。UnivNetは以前まとめたので省略。
ninhydrin.hatenablog.com

元のUnivNetと異なり、kernel predictorの入力が先ほどの話者特徴とコンテンツ特徴になっている。入力のスペクトログラムは元の音声の1/256の解像度なのでアーキテクチャの途中で x8、x8、x4にアップサンプリングすることでサイズをあわせた。

話者エンコーダ  E_sはFast ResNet-34モデルで入力は40次元のログメルスペクトログラム。VoxCeleb2で事前学習。
これにより得られた512次元の話者埋め込み sは64次元のF0の最頻値  mとともにkearnel predictorで利用される(図1(b)の真ん中あたり)。

GANベースの学習なのでDiscriminatorも必要。
multi-resolution spectrogram discriminator (MRSD) と multi-period waveform discriminator (MPWD)の2つのDiscriminatorを利用する。
MRSDはUnivNetで、MPWDはHiFi-GANで採用されたDiscriminator。詳細は省略。

学習

話者エンコーダ  E_sはVoxCeleb2で学習済み。なので E_sは固定して GとDiscriminatorを学習する。

UnivNetと同様に再構成の学習がベースになる(音声特徴から元の音声波形を生成)。

コンテンツ特徴である \textbf {H}には僅かだが話者情報が含まれておりこれがリークする可能性がある。
そこで \textbf{H}を周波数方向にランダムにストレッチしたものを \textbf{H}'とする。これによりコンテンツ情報を保存したまま話者情報を取り除ける。

話者埋め込みは単純に復元対象のサンプルから取得するのではなく、サンプルに適合した1コンポーネントを持つGMMから埋め込み s'をサンプリングする(これの意味がよくわからない)。

これらから音声 \textbf{x}を再合成する。再合成後の音声を \hat{\textbf{x}}とすると \hat{\textbf{x}} = G(\textbf{z}, \textbf{H}', \textbf{p}_norm), x', m

lossはGAN loss、auxiliary loss  \mathcal{L}_{aux}(複数解像度のSTFT)、spectral convergence loss  \mathcal{L}_{sc}、log STFT magnitude loss  \mathcal{L}_{mag}の4つ。GAN loss以外は以下。

 ||\cdot||_Fはフロベニウスノルム、 ||\cdot||_1はL1ノルム、 MはMRSDのsub-discriminatorの数。

再構成lossだけだと明示的に音声特性をターゲット話者に変換させているわけではないので、それを強制するようなlossを導入する。

これをspeaker similarity criterion (SSC)呼ぶ。
ターゲットとなるの発話 \textbf{x}_0の特徴を (\textbf{H}_0, \textbf{p}_{norm,0}, s_0, m_0)とする。
他の話者からコンテンツ特徴  (\textbf{H}_n, \textbf{p}_{norm,n}), \forall{n} \in [1,...,N]を集める( Nは話者の総数)。
これらを使ってSSC lossは以下の式で表される。

 cosはコサイン距離。他の話者の発話をターゲットの話者の声に変換した音声  \hat{\textbf{x}}_{n \rightarrow 0}、その話者埋め込みがターゲット話者の埋め込みに近づくようにする。

これらにGAN lossを加えて最終的なlossは以下になる。

実験・結果

データセットはVCTK Corpus2で109話者。ランダムに10名をunseenな話者に選択。
評価指標はAmazon Mechanical TurkでのMOS、word error rate(WER)、ASRを使ったcharacter error rate(CER)、automatic speaker verification (ASV)を使ったequal error rate(EER)、そしてNISQAスコア。
提案手法がLCV-VC。

所感

音声関連の知識が乏しいので少々自信なし。本当にメモ程度。
実験結果を見るとそこまで良いわけではなさそう?得手不得手がある。
ほぼほぼUnivNetのままなので、そういう意味ではこれはVCタスクに対するUnivNetのポテンシャルという感じ?
convのカーネルを動的に生成するLocation-Variable Convolution(LVC)は良さそうではある。
今後もLVCベースの手法は出てくるかも。