[論文メモ] Generative Pre-training for Speech with Flow Matching

arxiv.org

MetaAI internship

TTSや音声強調等のダウンストリームタスクのパフォーマンスを向上させるFlow Matching生成モデルの事前学習方法の提案

wav2vecやHuBERT等のSSLモデルは特徴量抽出のための基盤モデルとしてよく利用される。
生成モデルはスピーチタスクにおける基盤モデルとして使えるのかを調査した。

よい生成モデルは他のスピーチタスクにも応用できるという考え。

提案手法名はSpeechFlow

手法

SpeechFlowという名前からわかるように最近ちょっと流行りのFlow Matchingがベースになる。

最適輸送のConditional Flow Matchingの目的関数は以下。

 \psi_t(x) = (1 - (1 - \sigma_{min})t)x + tx_1)


 x_0がガウシアンノイズ、 x_1が元のデータ、 tは時間で[0, 1]、 \sigma_{min}はハイパラでここでは1e-5、 v_tが学習対象のニューラルネット

このflow matchingモデルを事前学習して他のダウンストリームタスクに応用する。
この生成モデルの出力は x \in \mathcal{R}^{d \times L}の音響特徴(メルスペクトログラム)を採用する。 dはメルスペクトログラムの次元数、 Lはフレーム長。
学習時に使うデータはラベルのないただの発話データ。

wav2vecやHuBERTなどで使われていたマスク部分予測をここでも採用する。
モデルの入力としてノイズ x_0だけでなくマスクされたメルスペクトログラム x_{mask}も入力とした条件付き生成モデルとする。
よって目的関数は以下のようになる。

 x_{mask}は確率 p_{cond}で入力され、 1 - p_{cond}ですべてマスクされた情報のない x_{mask}が入力される。
入力メルスペクトログラムの n_{mask}がマスクされ、マスク箇所は最低 l_{mask}フレームマスクされる。
 x_{mask}は入力となる \psi_{t}(x_0)と周波数方向でconcatされ、モデルの次元に合うように線形変換される。
マスク箇所は0で埋められてマスクされていない箇所のみでlossをとる。
実験では n_{mask} \sim \mathcal{U}[70%, 100%]、 l_{mask} = 10をデフォルトに。

こうして出来上がったモデルの入力 x_{mask}をタスクに合わせたものに変更しfine tuningする。

 yはタスク毎に変化する。

音声強調:ノイズの乗った音声
音声分離:複数話者の混ざった音声
TTS:アライメントされた音素特徴

SpeechFlowの全体像が以下の図1

実験・結果

細かい設定等は論文参照。

音声強調の結果が表1。他手法と異なり音響特徴ベースにもかかわらず善戦。

音声分離の結果が表2。素のSpeechFlowでは少々厳しい。
ESTOIiはよいけどSI-SDRiは低く、調べるとSI-SDRiはメルスペクトログラムからwavを生成する時点で厳しい。
Upper-bound w/ clean Specは元のメルスペクトログラムを利用したものだが、それでもこの程度。
そこでinverse-Mel と phase estimationを導入してみたところ改善された。


zero-shot TTSの結果が表3。
VoiceBoxと同じくらいの精度。


マルチタスクの結果が表4。これまでの3タスクをシンプルに組み合わせた。
全体的には単一モデルのがよい。
ただ、1つのモデルで複数タスクを解くユニバーサルモデルを構築できる可能性は十分ありより多くの研究が必要。

事前学習のステップ数、lr、 x_{mask}の採用確率 p_{cond}について調査した結果が図2。
学習率は5e-5以上あれば良さそう。
 p_{cond}は80%程度必要で、 p_{cond}=0のただのFlow Machingは劣化。提案手法SpeechFlowが優れていることを示してる。

所感

Flow MatchingのMAE。
確かにあってもおかしくなかった。ほかのMAEと同じくシンプルで強力そう。
SSLへの利用が検討されるこの流れ、基盤モデルになっていきそうな雰囲気を感じる。

[論文メモ] VITS-based Singing Voice Conversion System with DSPGAN post-processing for SVCC2023

arxiv.org

ASRU2023

VITSベースのSinging Voice Conversion(SVC)モデルの提案

Voice Conversion Challenge 2023 (SVCC2023)に参加したT02チームの手法。
SVCC2023についてはこちらの記事にまとめた。

ninhydrin.hatenablog.com

手法

アーキテクチャ全体像は図2を参照

基本的にはVITSをベースとしていて、学習時の入力はF0、スペクトログラム、HuBERTによるSSL特徴の3つになる。
元のVITSではPrior Encoderの入力がテキスト(音素)、Posterior Encoderの入力がスペクトログラムだったのに対し、提案手法ではPrior Encoderの入力をHuBERT特徴量とF0、Posterior Encoderの入力をスペクトログラムとF0に拡張した。

F0の抽出はPYINを利用。

ソースとなる歌手のF0をそのまま適用するとターゲット歌手の話者性が下がってしまうのでKey Shifterを導入しピッチを変更する。
Key Shifterはまず各歌手の平均F0を計算しておく。そしてソース歌手の平均F0とターゲット歌手の平均F0の差分 \delta F0を計算し、それを抽出したソース歌手のF0に足し合わせる。

ただ、これはソース歌手がわかっているin-domain タスクだけでしか利用できず、cross-domainでは利用しない。

よくあるVITSベースの手法ではVITSのdecoderに当たるvocoderをHiFi-GANベースと異なるもの(Vocosとか)に変更するのが多いが提案手法ではdecoderは変更しない。

ただ、このままだと生成された音声にmetallic noiseがのることがある(特に呼吸時)。それを消すためにDSPGANを導入し、post processとして生成された音声をDSPGANで再生成する。
これによりアーティファクト等が減ったらしい。

システムの全体像は図1の通り。
VITSで声変換し、予測時にはDSPGANのpost processを導入。

実験・結果

データセットと利用については表1を参照。

SVCCのデータは少ないのでVCTKデータセットで事前学習し、次にMixedデータで学習、そしてSVCCデータでの適応学習という手順をとった。
適応学習時には二人ほど追加。この二人は歌唱データでも大量のデータを持つ二人で学習の安定化に役立つと判断。

SVCCデータで学習する際にはspeed perturbationでのaugmentationを行った(0.8~1.4)。使用したのはaudiotsmというライブラリ。

最適化はAdamで \beta_1 = 0.8, \beta_2 = 0.99 \beta_1が少々大きめな印象。学習率は1e-4。

SVCC2023、自然性について結果は以下の図3のT02を参照。
Task1(in-domain)、Task2(cross-domain)ともに自然性は高そう。

類似性についての結果は図4。
参加チームの中では上位。


ablations
提案手法の各テクニックが自然性、類似性にどう影響しているかを調査。
調べたテクニックは

Speech Pre-training:VCTKデータでの事前学習
Adaptation Tricks :適応学習時のaugmentationと二人の話者追加
DSPGAN Post-processor:DSPGANによるpost processの有無

結果が表2。
Speech Pre-trainingとDSPGAN Post-processorがないと自然性が大きく低下(類似性もすこし)、
Adaptation Tricksがないと過学習して類似性が大きく低下した。

所感

DSPGANによる再合成というのは面白いテクニック。vocoder自体のpriorを利用でき、またvocoder学習時に工夫しておけば色々できそう。VCモデルと独立していて、色々な手法に適用できるのもよい。ablationがあるのも嬉しい。
提案されているVCモデル自体はよくある感じで感動は薄かった。

[論文メモ] VITS-Based Singing Voice Conversion Leveraging Whisper and multi-scale F0 Modeling

arxiv.org

VITSベースのSinging Voice Conversion(SVC)モデルの提案


4回目となる Voice Conversion ChallengeはSinging Voice Conversion Challenge(SVCC)となりより難しい歌声変換タスクとなって開催された。
SVCC2023についてはこちらの記事にまとめた。
ninhydrin.hatenablog.com

このSVCC2023に参加した番号、T23の手法についての論文。

手法

アーキテクチャ全体像は図1を参照。

見てわかる通りVITSベースで細かいところに変更が入っている。

Posterior Encoder

特に変更なし

Decoder

中間特徴 zから音声波形を生成する部分でvocoderに該当する。
本家VITSでは入力を調整したHiFi-GANだったが、提案手法では歌声変換に対応するためにf0から生成したサイン波を入力に追加するsource filterタイプに変更した。

ただし、 n_t \sim \mathcal{N}(0, 0.003^2) \phi \in [-\pi, \pi] N_sはサンプリングレート。
discriminatorはVITSと同じくMPDとMSD。

Prior Encoder

本家VITSではテキスト(音素)と話者IDが入力になっていたが、提案手法ではテキストのかわりにWhisperのボトルネック特徴 c_{bnf}と元の音声から抽出したF0得た特徴量 c_{f0}を入力とする。
つまり p(z| text, singer)から p(z| c_{bnf}, c_{f0}, singer)になった。

SVCCはnon-parallelなSVCで言語についても発話と歌で異なる場合がある。なのでマルチリンガルに対応できる必要がある。
whisperは多言語対応の音声認識なのでこれのボトルネック特徴ならそれを解決できると考えた。
whisperのエンコーダのいくつかの層で実験をした結果、浅めの特徴を利用することになった。浅い層には言語特徴、歌唱スタイルが含まれているらしい。
ただし、不要な話者も含まれているためランダムピッチシフトした音声を入力にすることで話者情報をぼかした。

歌声変換のためにF0特徴は重要だが単純にF0を入力するとF0抽出アルゴリズムのミスで変換が失敗することがあった。
そこでparallel bank of transposed convolutions (PBTC) moduleを使ってF0をエンコードする。

PBTC moduleについては図2参照。
ベクトル量子化したF0をone-hot化し、線形変換する。それを複数のdilate rateのTransConvに掛けて合流させる。

Training Strategy

普通なら他話者の歌唱データで事前学習するところだが、SVCCではデータが限られておりそれができない。
そこで3段階に分けての学習を行う。

1) Warm-up: 発話データでの学習
2) Pre-training: 歌唱データでの学習
3) Adaptation: ターゲット歌手のデータで学習

ターゲット歌手のデータが非常に少なく過学習してしまうのでaugmentationを行う。
行ったaugmentationはe formant shifting, pitch randomization, random frequency, speed adjustment。random frequencyってなんだ?
これらのaugmetationはボトルネック特徴に話者情報が漏れるのも防ぐ。

Loss Function

目的関数について、Warm-upとPre-trainingは本家VITSと同じ。
Adaptationのときは過学習を防ぐために以下のlossを追加する。

 L_{wReg} = ||\theta - \hat{\theta}||^2

 \thetaはAdaptation開始時のモデルパラメータ、 \hat{\theta}は現在のモデルパラメータ。
Adaptation開始時からあまり離れないようにというオンライン強化学習でよくあるloss。

実験・結果

データセットは表1の通り。サンプリングレートは一律24kHzに。

SVCC2023のタスク1はin-domain、タスク2はcross-domain。
提案手法のチーム番号はT23。

SVCC2023の自然性についての結果が図3。
両タスク高いスコア。自然性は高そう。


類似性についての結果が図4。
類似性について中央くらいの順位だが、他の手法と比べ大きな差はない。
単純にSVCタスクにおいて類似性を高めるというのが非常に難しいとのこと。

ablationとして

  • PBTC moduleの有無
  • whisperをconformerベースのWenetSpeechとLibriSpeechで学習したモデルに変更
  • Warm-upステージの有無

を調査。結果が表2。
自然性への影響は大きそうだが、類似性については怪しい。


所感

以前読んだSVCC2023に参加したチームの手法の解説。
PBTCを知らなかったので学び。自然性に大きな影響がありそう。確かにf0推定はまれに失敗するので対策したいところ。
so-vits-svcやRVCとはまた違った進化をしていて面白い。
多段階学習習字、学習中パラメータが元のパラメータから離れすぎないようにするのは強化学習味がある。

[論文メモ] MATCHA-TTS: A FAST TTS ARCHITECTURE WITH CONDITIONAL FLOW MATCHING

arxiv.org
github.com

デモページ
shivammehta25.github.io


flow matchingを用いたTTS、Matcha-TTSの提案。
Matcha-TTSの名前の由来はflow matching for TTSの聞こえがmatcha teaに似てるから。茶がかぶってる...

手法

図1がMatcha-TTSのアーキテクチャ全体像。
ほぼほぼGrad-TTSと同じアーキテクチャで一番の違いはflow matchingで音響特徴(メルスペクトログラム)を生成しているところ。

Grad-TTSはordinary differential equation (ODE)を使っているがMatcha-TTSはflow matchingを利用している。
flow matchingの詳細については以下の論文を参照。
arxiv.org

式の導出については省略し結論だけ書くと以下の式が目的関数になる。

 \mathcal{L}(\theta) = \mathbb{E}_{t, q(x_1), p(x_0)}||v_t(\psi_t (x_0))  - (x_1 - (1 - \sigma_{min}) x_0)||^2
 \psi_t(x) = (1 - (1 - \sigma_{min})t)x + tx_1)

最適輸送flow matchingの目的関数で、 x_0がガウシアンノイズ、 x_1が元のデータ、 tは時間で[0, 1]、 \sigma_{min}はハイパラでここでは1e-4としている。 \boldsymbol{v}_tが学習対象のニューラルネット
学習データからサンプル x_1を取り出して上記式にしたがって最適化するだけなので非常にシンプルで良い。

このflow matching(正確にはconditional flow matching, CFM)を用いてメルスペクトログラムを生成する。
なので x_1がメルスペクトログラムになる。また、ただCFMを適用するのではなく、平均音素特徴を条件とする。なので \boldsymbol{v}_t(\cdot| \boldsymbol{\mu})になる。
図1の左上が \boldsymbol{\mu}になる。これは学習中に獲得されるもので特別生成するわけではない。要するにend2endでの学習になる。

flow prediction networkはResidualブロックとtransformer(Conformer)ブロックを含んだU-Net。
durationに関しては教師データを用いず、Glow-TTS等と同じくMonotonic Alignment Searchで探索する。

実験結果

データセットはLJ Speech。
比較対象はGrad-TTS(GRAD)、FastSpeech2(FS2)、VITS、そしてGrad-TTSを最適輸送CFMで学習したGCFMの4つ。GCFMと本手法の差分はアーキテクチャぐらいになるはず。なのでCFMとODE-baseの比較というかんじ。
VITS以外は音響特徴を生成するモデルなのでvocoderを必要とする。vocoderはLJ Speechで学習済みのパブリックなHiFi-GANを利用。

ODE-baseな手法は品質が生成時のステップ数で変化するのでいくつかのステップで比較。なおすべてオイラー法で生成。

結果が表1。提案手法はMAT-n。
RTFはFS2に負けているものの、2ステップのMAT-2はかなり高速にも関わらず既存手法よりも低いWER。
MOSに関しては4ステップくらいからVITSに勝てる。
ステップ数を増やせば生成速度が遅くなるものの、品質が向上しているのも確認できる。


テキストの長さと生成時間のプロットが以下の図3。
テキストはGPT-2で生成。
全体として高速なMAT-nだが、MAT-2はそこそこ長いテキストならFS2よりも効率が良くなる。MAT-4も同じ感じ。十分高速と言えそう。

実験(自分)

データセットはJVS等やずんだもん。
サンプリングレートは24kHz。
vocoderは自作のVocGAN。
オイラー法による100ステップの生成結果。


GT


GTのメルスペクトログラムから生成


Matcha-TTS

なんか音素がおかしい...

所感

最近話題のflow matchingをGrad-TTSに適用してみたという感じ。

デモページでステップ数を変更しての生成結果の聞き比べができるが、低ステップ数でもそれなりの品質が得られてそう。
アーキテクチャがそこそこ軽量なのか生成速度も早い。
ただtransformerを含んでいるのでテキストが多くなると計算量が結構増えそうではある。そこそこ早いのはConformerの恩恵もある?

流行りのせいか同じ時期に似たようなVoiceFlowなる手法も提案されていた。
arxiv.org
VoiceFlowは \sigma_{min}=0としていて、これはこれまた似た時期に出た Rectified Flowという手法と同じらしい。
https://openreview.net/pdf?id=XVjTT1nw5zopenreview.net

こういった同じ時期に似たような手法が提案されるのは技術の発展・系譜的なものを感じる。

[論文メモ] SALTTS: Leveraging Self-Supervised Speech Representations for improved Text-to-Speech Synthesis

arxiv.org

INTERSPEECH2023

self-supervised learning (SSL)モデルを使ったTTSの性能向上手法の提案

TTSモデルの学習には大量のラベル付きデータが必要なためコストが高い。
近年出てきたwav2vec 2.0やHuBERTなどのSSLモデルは音声認識や話者分類等の下流タスクへの応用で高いパフォーマンスを示している。
それに対してSSLモデルをTTSに適用した例がほとんど無いので調査したという感じ。

手法

FastSpeech2はピッチ、エナジー、音素継続長を条件として合成を行うが、音声にはこれらで表現のできない感情や強調などの情報が存在する。
SSLモデルが感情検出等の下流タスクでもパフォーマンスを発揮していることに注目し、SSLモデルの埋め込みを利用することで感情等のFastSpeech2で考慮されていない情報を補完する。

法名はSALTTS(Self-supervised representations for Auxiliary Loss in TTS)
適用するベースモデルはFastSpeech2だが、JETSやVITSにも適用可能。

SALTTS-parallelとSALTTS-cascadeの2種類を調査した。
提案手法の全体像は以下の図1を参照。


SALTTS-parallelとSALTTS-cascadeで共通の部分として、

FastSpeech2のvariance adapterから得られた384次元の出力をmulti-layer projectorで変換し768次元にする。
その後4つのエンコーダブロックからなるSSL predictor(図1の肌色のブロック)に通し埋め込み(図1の緑のSSL Embeddings)を得る。
これとSSLモデルの出力とのL1 lossをauxiliary lossとして利用する。

 \mathcal{L}_{aux} =\sum^n_{i=1}|y_i - \hat{y}_i|


 ySSLモデルから埋め込み、 \hat{y}SSL predictorからの埋め込み、 nは埋め込みの総数。

SALTTS-cascade

図1の左側のアーキテクチャ

予測したSSLの埋め込みにmulti-layer projectorをresidual接続し、その結果をメルスペクトログラムデコーダに入力する。
デコーダへの入力が768次元になるのでそこは調整する。

SALTTS-parallel

図1の中央のアーキテクチャ

multi-layer projectorとSSL predictorを本体から分離させる。
なのでメインのフローはFastSpeech2のままで、multi-layer projectorとSSL predictorは学習時のみ利用される。
表現力はcascade版に劣るが、実行時速度はFastSpeech2と同じにできる。

Repeater Module

図1の右側のアーキテクチャ

よくあるSSLモデルは入力音声のサンプリングレートは16kHzで、LJSpeechに対してのFastSpeech2のサンプリングレートの22.05kHzと異なる。
またwindow sizeやhop lengthも異なるため、auxiliary lossをとる埋め込み長さが合わない。

このアライメント調整を行う必要がある。
調べるとSSLモデルの最初の5フレームがFastSpeech2の最初の7フレームと一致する。
なので整列させるためにSSLモデルの2番目と4番目を1度繰り返すことで7フレームに拡張する。

その後はSSLモデルの18フレーム毎にFastSpeech2の31フレームが一致する。
なのでSSLモデルの3フレーム毎に1フレーム目と2フレームをガウシアンノイズを加えて1回繰り返す。でもこれだと3フレームが5フレームになり、18フレームが30フレーム
に拡張されて足りない気がするが、読み間違え?ちょっとよくわからない。

実験・結果

データセットはLJSpeech。
ベースラインとなるオリジナルFastSpeech2は1000epochで3日、提案手法のSALTTS-parallelとSALTTS-cascadeは同じ1000epochで4.5日かかった。
ボコーダは学習済みのHiFi-GANでベースラインと提案手法で共有。

SSLモデルはHuBERT、ccc-wav2vec 2.0、data2vec-aqcの3つで9、10、11層の出力を平均化したものをラベルとして利用。
これらの層を採用したのは既存研究でこれらの層が認識等で有効だと示されていたから。

評価指標はMOSとメルケプストラム歪(Mel-cepstral distortion: MCD)と log-F0 root mean square error (F0 RMSE)。

実験結果は以下の表1。
MOS、MCDに関してはcascadeよりparallelのがよく、F0RMSEは逆の傾向。
F0 RMSEはベースラインに勝っているが、MCDは負けている。
parallelモデルのMOSに関してはベースラインに対して大きく勝っている。

cascadeモデルはメルスペクトログラムの勾配がvariance adapterにうまく伝わっていないのでは?
parallelモデルはメルスペクトログラムの勾配がvariance adapterに直接届いているのでこれが性能差の原因なのではと推測。
また、parallelモデルはvariance adapterの出力がよりリッチな特徴になろうとする効果があり、これが間接的によりよいメルスペクトログラム生成に繋がった可能性がある。

所感

TTSに対してSSLを適用するのは確かにあまり見かけない。
SSLが入力として音声波形を必要とするのでTTSタスク的には運用時に音声波形が利用できないので適用がしにくそう。
今回のようにlossとして利用するならば運用上も問題ないので良さそう。
ただ、FastSpeech2の入力に無い情報をSSLで補完したいのに、入力はFastSpeech2のままなのでなんかモヤッとしないでもない。
MOSは向上していて効果はありそうではある。
音素やピッチから感情等をうまく補完できたという感じか。
これらをコントローラブルにできたら面白そう。

学習コストが1.5倍になるが運用時計算コストが上がらずに精度向上できるので有用そうではある。

[論文メモ] ACE-VC: ADAPTIVE AND CONTROLLABLE VOICE CONVERSION USING EXPLICITLY DISENTANGLED SELF-SUPERVISED SPEECH REPRESENTATIONS

arxiv.org

ICASSP 2023

10秒のターゲット音声で変換ができるzero-shot any-to-anyな声質変換モデルの提案

一般的なvoice conversion(VC)ではコンテンツ(音素やテキスト)と話者を分離してターゲット話者情報で再構成スタイルが多い。
コンテンツ情報としてはASRの出力を利用することが多いが、ASRのミスや、そもそもASRの出力ではアクセント情報等が抜け落ちる問題があり、自然なVCが作れない。
最近では self-supervised learning (SSL)の特徴を利用することも増えてきた。
SSL特徴は主にコンテンツ情報とはいえ話者情報等を含んでいるので、それらを排除するため量子化したSSL特徴を利用することも多い。
しかし、量子化したSSL特徴は完全にコンテンツ情報を含んでいるが量子化前に不可逆な不完全なコンテンツ情報になっている。
もっと言えば話者情報を完全に排除できている保証もない。
これらをなんとしたいというお気持ち。

手法

提案手法は3つのコンポーネントからなる。
1) SSLベースの発話特徴抽出器
2) メルスペクトログラム合成器
3) HiFi-GAN vocoder

HiFi-GAN vocoderはそのままなので省略

Speech Representation Extractor (SRE)

コンテンツ特徴を抜き出すためのコンポーネント
SREの全体像は図1参照。

アーキテクチャはConformerを利用。Conformerはconvとattentionからなるアーキテクチャで比較的軽量かつ長期的、局所的な依存関係を扱える。
メルスペクトログラム x = (x_1,...,x_T)からConformer  Eを使って特徴量  z = E(x) = (z_1,...,z_{T'})を得る。
この zはコンテンツ情報と話者情報を含んでいるので2つのヘッドを追加し、それぞれで別タスクを学習することで情報を分離させる。

Speech recognition

コンテンツ特徴を分離するためのヘッド。
2つのLinear層を追加し、
1つ目の層の後の特徴を z_c = f_{\theta_{c1}}(z)=(z_{c1},...,z_{cT'})
2つ目の層の後の特徴をsoftmaxに通したものを p_c = f_{\theta_{c2}}(z_c)=(p_{c1},...,p_{cT'})
とする。
テキストと音声のペアデータ (x, y_c)を用意し、 p_cを使って音声認識タスクを学習する。
lossはCTC lossで L_{content} = CTCLoss(p_c, y_c)

コンテンツ特徴としては z_cを利用するがこれだとz_cには zから話者情報リークしてしまい、合成時に z_cから話者情報を推定してしまう。
 z_cから話者情報を抜き出しコンテンツ情報だけにするためにピッチ変換した音声 x'を利用する。
 x'から取り出したコンテンツ情報 z'_c = f_{\theta_{c1}}(E(x'))とオリジナル音声からのコンテンツ特徴 z_cでSiamese cosine similarity lossをとる。
 L_{disentangle} = 1 - S_{cos}(z_c, z'_c)

 S_{cos}はコサイン類似度。これによりz_cにはピッチ変換で不変な特徴 = コンテンツ特徴が残るようになる。

Speaker Verification (SV)

話者情報を分離するためのヘッド。
SREと同じく2つのヘッドを用意して
1つ目の層の後の特徴を z_s = f_{\theta_{s1}}(z_1)
2つ目の層の後の特徴を p_s = f_{\theta_{s2}}(z_s)
とする。
音声と話者のペアデータ(x, y_s)を用意してangular softmax lossで学習する。

 L_{SV} = AngularSoftMax(p_s, y_s)

Mel-Spectrogram Synthesizer

コンテンツ特徴からメルスペクトログラムを合成する。
Mel-Spectrogram Synthesizerの全体像は図2参照。

一般的にVCでは発話速度、つまりコンテンツ特徴の長さはオリジナルの音声で決まっている。
そのためdurationを合わせる必要がないが、言い換えると適応的にdurationを変更できないという制限がある。

durationを適応的にするためにコンテンツをグルーピングし、durationを予測するようにする。

グルーピングはSpeech recognitionのときの音素ラベルを利用し、連続する同じラベルのコンテンツ特徴をまとめる。
グルーピングしたコンテンツ特徴を g_cとする。
これによりdurationのないコンテンツ特徴、つまりテキスト的な情報が得られる。

この g_cと話者情報 z_sから、対応するピッチとdurationを予測する。
中間特徴を h= F_e(g_c, z_s)として、

durationは  \hat{d} = DurationPredictor(h)
ピッチは  \hat{p} = PitchPredictor(h)

ピッチ情報は埋め込み後、中間特徴に足され話者情報を含んだコンテンツ特徴になる。
 k = h + PitchEmbedding(p)

この kを元のdurationを使って長さに戻し、そこからメルスペクトログラムを予測する。
 \hat{y} = F_d(DurationRegulation(k, d_c))


その時の連続した回数がdurationのラベル  d_cで、

ピッチやdurationはそれぞれ、学習時は真の値を利用し、テスト時は予測したもの利用する。

durationのGTラベル  dは連続した回数(図2のDuration Target)、ピッチのGTラベル pはYin algorithmで取得。


Mel-Spectrogram Synthesizerのlossは以下。

 L_{synth} = ||\hat{y} - y||^2_2 + \lambda_1 ||\hat{p} - p||^2_2 + \lambda_2 ||\hat{h} - h||^2_2

実験・結果

ConformerのSSLはLibriSpeechで。
SREはLibriSpeechで音声認識を、VoxCeleb-2で話者認識を学習。
Mel-Spectrogram SynthesizerはLibriTTSで学習

 L_{disentangle}の効果を確かめるためのablation。
 L_{disentangle}によりASR CERは不変だが、話者認識ができなくなっているのがわかる。
ただ、思ったより話者認識できており、ピッチ変換では消せない部分が結構あるなという印象。


メインのVCタスク。many-to-manyとany-to-anyそれぞれ実験。any入力ではターゲット話者の10秒の発話を利用。
SV-EERは別の話者認識モデルを使ってのポジティブ・ネガティブそれぞれの音声とのerror rateで話者類似度の指標になるらしい。
全体的に既存手法より良さげ。

所感

よくあるdisentangle系のVCでものすごいテクニックとかは感じられなかった。
ピッチシフトした音声を利用したコンテンツ情報の抽出がそれなりの効果は有りつつも、話者情報が意外と残るなという印象。
もっと強いaugmentationをかければより良くなるのか?
VCの結果だけがあるが、このsiamese lossでdurationやピッチのlossがどうなったのか気になる。
conformer部分を既存のcontent vecで行えば簡単に再現できるかも?

[論文メモ] WAVE-U-NET DISCRIMINATOR: FAST AND LIGHTWEIGHT DISCRIMINATOR FOR GENERATIVE ADVERSARIAL NETWORK-BASED SPEECH SYNTHESIS

arxiv.org

ICASSP 2023

Wave-U-NetをdIscriminatorとして採用する。

HiFi-GANやVITSではdiscriminatorのアンサンブルを採用し高品質な音声を学習している。
しかしアンサンブルすればパラメータが増加し学習時間が長くなる。
アンサンブルではなく、強力なdiscriminator1つで置き換えられないか?というお気持ち。


手法

Wave-U-Netをdiscriminatorとして採用する。

Wave-U-Netのアーキテクチャは図2を参照。

discriminatorは音声波形の特徴であるマルチスケール、マルチピリオドに対応できる必要がある。
HiFi-GANはそれぞれのdiscriminatorを利用している。

Wave-U-Netのアーキテクチャならこれに対応可能。
Wave-U-Netはエンコーダ・デコーダの形式で一般的なdiscriminatorとして採用されるエンコーダのみの構造と異なる。
各解像度での特徴をスキップ構造を持つデコーダに送りサンプル点レベルでのreal/fakeを判定する。これはPatchGANに近い。

単純にWave-U-Netを採用するのは学習が難しく、安定した学習のためにいくつかの工夫を行った。

Normalization

画像タスクでよく使われるspectral normやinstance normはあまり効果なし。
weight normに関しでもだめだった。これはWave-U-Netが既存のdiscriminatorと異なりエンコーダ・デコレータの深い構造だからかもとのこと。
そこでglobal normを提案。

 aは元の特徴、 a^iはi番目の aの特徴。なお \epsilon=10^{-8}
これにより特定の特徴量に制限されるのを防ぐ。

Residual connections

層が多いせいか、global normを導入してもサチってしまう。
そこでresidual connectionを導入し勾配消失を防ぐ


Wave-U-Netを構成する各ブロックの最終的な構造は図3。

loss functions

adversarial lossとしてはLSGANのものを採用。

また feature matching lossも採用。なお Tはレイヤー数、 D^i i番目のレイヤーの特徴量、 N_i i番目のレイヤーの特徴量の数。

実験・結果

データセットはLJSpeech、VCTK、JSUT。
素のHiFI-GANをベースラインとして比較する。
またend2end手法としてVITSについても比較する。
評価指標はMOSとcFW2VD。cFW2VDは音声版FID的なもの。

HiFi-GANでの実験結果が表1, 2, 3。
Wave-U-Netにしたことで大きな品質の劣化はないが、学習速度が2倍以上になったことがわかる。パラメータも14.5倍程度軽量になった。

VITSでの学習結果が表4。
HiFi-GANのときと同じような結果が得られている。

所感

Wave-U-Netをdiscriminatorに採用するというシンプルだが効率化できる良い手法。
U-Netをdiscriminatorに採用するは画像のときにもあったのでむしろなぜ今までやらなかったのか不思議。安定しなかったから?音声へ注目が小さかった?
最近は思考停止してHiFi-GANのMPDとMSDを採用する手法が多いので、こういったところの改善はありがたい。
また、最近ではRVCやso-vits-svc等の声質変換も盛んで、これらは研究ではなく数実験してみての世界なので1回の試行が高速化されるのは発展に繋がりそう。
パラメータが少なくなり、その分generatorやバッチサイズを大きくできるのも嬉しい。
ただ、画像のときのU-Net discriminatorが自分で実験したときに論文ほどあまりうまくいかなかったのでそこが心配。
あと、discriminatorのreal/fakeがフレームでどうなっているかのサンプル画像が欲しかった。