[論文メモ] CYFI-TTS: CYCLIC NORMALIZING FLOW WITH FINE-GRAINED REPRESENTATION FOR END-TO-END TEXT-TO-SPEECH

ICASSP2023
https://ieeexplore.ieee.org/document/10095323

VITSの改良

VITSはE2EなTTS(VCもできるけど)モデルでテキストから複数話者の発話を生成できるが、テキストが同じでも発音は人によって異なるためここに情報のギャップが発生する。それをなんとかしたいというお気持ち。

手法

テキストと音声のギャップを解決するためにcyclic normalizing flow(CNF)とtemporal multiresolution upsampler(TMRU)を使ったCyFi-TTSを提案。
CyFi-TTSのCyはcycleから、FiはTMRUがfine-grained representationsを取得するもので、そのfineから(なんでじゃ)。

全体像は図1参照

TMRU

TMRUはprior(テキスト)からより細かい特徴を得るためのモジュール。これによって音声とのギャップを埋める。
TMRUとCyFI-TTSのアーキテクチャは図2参照。

アライメントを \mathcal{A} \in \mathbb{R}^{L \times T}、prior encoderの出力を \boldsymbol{z}_{c} \in \mathbb{R}^{T \times H}とする。 Lはテキスト(音素)長、 Tは音声の長さ、 Hは特徴量の次元。
アライメントをガウシアンで平滑化し \frac{1}{2}T \times Lにし、それをtex: \boldsymbol{z}_{c}]に適用することで \boldsymbol{z}_{c'} \in \mathbb{R}^{\frac{1}{2}T \times H}を得る。
このままだと音声長が合わないのでアップサンプリングを含むブロックを N回適用することで徐々に大きくし特徴量間のギャップを減らす。
各ブロックはアップサンプリングとカーネルサイズの異なるconv、そしてsnake1dを持つ。

snake1dはBigVGANで提案されたモジュールで以下のsnake functionを使った1dのconv。
 f(x) = x + \frac{1}{\alpha}sin^2(\alpha x)

 \alphaは学習可能なパラメータ。

Cyclic Normalizing Flow

Cyclic Normalizing Flow(CNF)は学習のlossの1つ。

VITSは発話 yからのフレームレベル特徴 q(z | y)からフレームレベルの発話 p(y|z)を生成する学習時のメインフロー(図2(a)の左側)と実行時に利用するテキスト xから特徴 p(z'|x)を生成するフロー(図2(a)のTRMUを除く右側)の2つからなる。
学習時、normalizing flow(NF)により情報を落とした q(z'|y) p(z'|x)を近づけるためにKLダイバージェンスを利用する。

 \mathcal{L}_{\mathrm{KL}} =\mathrm{KL}[q(z'|y) || p(z'|x)]

実行時はNFのreverse flowで p(z'|x) p(z|x)にしてHifiGAN部分に入力しTTSを実現する。
しかし、NFは q(z'|y) \rightarrow p(z'|x)は学習しているが、 p(z'|x) \rightarrow q(z'|y)は学習していない(結果的にできるが)。

そこでテキストからの特徴 p(z'| x)についてNFを通したcycle consistencyを導入する。
 p(z'| x)をNFにreverse flowした p(z|x)を再度NFで得られた p(z''|x)が元の p(z'| x)に一致するようにするKLダイバージェンス
NFを fとして

 \mathcal{L}_{\mathrm{cc}} =\mathrm{KL}[p(z''|y) || p(z'|x)]
 p(z''|x) = f(f^{-1}(p(z'|x)))

これがCNF。

ただよくわからないのが fはNFなので、 p(z'|x) p(z''|x)は一致するのでは?ということ。
ちょっと意味がわからない。

他のlossはVITSと同じで、最終的なlossは以下

 \mathcal{L}_{dur}はdurationの、 \mathcal{L}_{adv}はGANの、  \mathcal{L}_{rec}は再構成、  \mathcal{L}_{fm}はfeature-matchingのそれぞれloss。 \lambdaは係数。

実験・結果

学習用データセットはLJSpeechでサンプリングレートは22050Hz。
比較対象はVITS、PortaSpeech、BVAE-TTS。

学習データセットの内挿データセットについての結果が表1

CERやWERはGT等に劣るが、MOSはGT相当。他手法よりはどの指標も良い結果。

外挿データセットについての結果が表2。

他手法よりはどの指標も良い結果。

VITSとのCMOS評価

スペクトラムの可視化結果が以下の図4。

VITSに比べ高周波の構造がきれいに見える。低周波はあまり変わらないように見える。

ablation studyとしてTRMUとCNFの効果を確認。

これを見る限りどちらも性能に貢献している。

所感

TRMUはそれなりに理解できる。テキストからの特徴をVITSのようにただ並べるとテキストの接続部分や終端のフィードアウト等が上手く表現できなそう。TRMUほどでは無いが平滑化だけでも効果がありそう。
CNFは正直意味がわからない。NFなのに行って帰って来くると値が異なるとはこれ如何に。Githubでも質問が飛んでいる(2023/6/9)。
github.com

Dropoutの可能性を聞いている。確かに可能性はありそう。
ablation studyでもCNFの効果が示されているのでなにかはありそう。

また少し似た手法としてNaturalSpeechがあり(2じゃないほう)、これについて触れてはいるが比較に入れてないのが少々気になる(ソースコードは公開されてる)。