End-to-EndなVoice Conversion(VC)モデルの提案。
既存のVCは(メル)スペクトログラム + Vocoder ベースのものが多い。スペクトログラム+Vocoderベースだと、生成されたスペクトログラムの品質やVocoderの品質に左右されるし、スペクトログラムベースのlossになり、時間ドメインでの人間の知覚と異なる場合もある。
なのでEnd-to-End(E2E)でVCしたい。
手法
コンテンツ・スタイルベースのVC。
コンテンツ特徴はソースフィルタモデルを参考にした(声帯振動を声道フィルタで畳み込むことで音声を得る感じ)。
ソースフィルタで音声を逆畳み込みすることでコンテンツとスタイル(話者情報)に分離できる。
入力
時間ドメイン(音声)データ のログメルスペクトログラムをとする。
から得たケプストラムにリフタリング後FFTで周波数に戻したもの(スペクトルのエンベロープ相当) をとする。
はコンテンツ情報を含んでいるのでこれを入力とする。
またもう一つのメインの入力として正規化したログF0特徴 。
まず学習データ全てからログF0をサンプリングし平均と分散を得る。
それらを使ってログF0 を正規化
はフレーム番号
これにより大体0~1の範囲になるので256次元のonehotベクトルにする(はみ出した分はクリップする)。
無音部分も加えた257次元のベクトルで各フレームを置き換えたものがコンテンツ入力になる。
スタイル(話者情報)は話者認識で学習済みのエンコーダを利用して得る。
また量子化した話者のF0の最頻値もスタイルとして入力する。
log(65.4)Hzからlog(523.3)Hz を64次元のonehotベクトルにした。
アーキテクチャ
アーキテクチャは上記の入力から音声波形を出力するGenerator と話者情報を埋め込むエンコーダ の2つ。
はUnivNetのc16のセッティングを参考にした。UnivNetは以前まとめたので省略。
ninhydrin.hatenablog.com
元のUnivNetと異なり、kernel predictorの入力が先ほどの話者特徴とコンテンツ特徴になっている。入力のスペクトログラムは元の音声の1/256の解像度なのでアーキテクチャの途中で x8、x8、x4にアップサンプリングすることでサイズをあわせた。
話者エンコーダ はFast ResNet-34モデルで入力は40次元のログメルスペクトログラム。VoxCeleb2で事前学習。
これにより得られた512次元の話者埋め込みは64次元のF0の最頻値 とともにkearnel predictorで利用される(図1(b)の真ん中あたり)。
GANベースの学習なのでDiscriminatorも必要。
multi-resolution spectrogram discriminator (MRSD) と multi-period waveform discriminator (MPWD)の2つのDiscriminatorを利用する。
MRSDはUnivNetで、MPWDはHiFi-GANで採用されたDiscriminator。詳細は省略。
学習
話者エンコーダ はVoxCeleb2で学習済み。なのでは固定してとDiscriminatorを学習する。
UnivNetと同様に再構成の学習がベースになる(音声特徴から元の音声波形を生成)。
コンテンツ特徴であるには僅かだが話者情報が含まれておりこれがリークする可能性がある。
そこでを周波数方向にランダムにストレッチしたものをとする。これによりコンテンツ情報を保存したまま話者情報を取り除ける。
話者埋め込みは単純に復元対象のサンプルから取得するのではなく、サンプルに適合した1コンポーネントを持つGMMから埋め込みをサンプリングする(これの意味がよくわからない)。
これらから音声を再合成する。再合成後の音声をとすると。
lossはGAN loss、auxiliary loss (複数解像度のSTFT)、spectral convergence loss 、log STFT magnitude loss の4つ。GAN loss以外は以下。
はフロベニウスノルム、はL1ノルム、はMRSDのsub-discriminatorの数。
再構成lossだけだと明示的に音声特性をターゲット話者に変換させているわけではないので、それを強制するようなlossを導入する。
これをspeaker similarity criterion (SSC)呼ぶ。
ターゲットとなるの発話の特徴をとする。
他の話者からコンテンツ特徴 を集める(は話者の総数)。
これらを使ってSSC lossは以下の式で表される。
はコサイン距離。他の話者の発話をターゲットの話者の声に変換した音声 、その話者埋め込みがターゲット話者の埋め込みに近づくようにする。
これらに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ベースの手法は出てくるかも。