WAVEGLOW: A FLOW-BASED GENERATIVE NETWORK FOR SPEECH SYNTHESIS
Abst
WaveGlow:メルスペクトログラムからスピーチを生成する手法を提案。高速化のため、自己回帰をやめる。
1. Intro
スピーチ生成のアプリは生成の速さが大事。
TTSタスクでは、エンコーダとデコーダ(ボコーダ)で構成されてることが多いが、デコーダ部は自己回帰モデルを利用しているため、生成のコストが高い。
自己回帰なしでやってるのもParallel WaveNetとかあるけど、学習が大変。
自己回帰なしのボコーダ:WaveGlowを提案します。
2. WaveGlow
ガウス分布から適当なノイズ(出力次元と同次元)をサンプリングし、写像を繰り返して、所望のXを得る。
z~N(z;0,I)
x = f0 o f1o ...fk(z)
これを直接学習する。可逆変換できるように。
log pθ(x) = logpθ(z) + Σlog|deg(J(f^-1i(x)))|
z = fk^-1 o f^k-1o...of^0(x)
順方向パスでは、8つのオーディオサンプルのグループをベクトルとして入力する。(これはaqueeze操作と呼ばれる)。その後いくつかの処理をとおる。
2.1. Affine Coupling Layer
可逆なnnは通常カップリングレイヤを利用する。今回はアフィンカップリングレイヤを使う。半分は値を保持し、もう半分をアフィン変換するための値を生成する。
xa, x = split(x)
(log s, t) = WN(xa, mel-spetrogram)
xb' = s・xb + t
f^-1coupling(x) = concat(xa, xb')
WNはどんな変換でもよい。カップリングレイヤは可逆だが、WNは可逆である必要はない。xaはそのまま通るので、xbがxaとxb'から計算できればよいからだ。WNはwabenetに似たような構成にしている。
2.2 1x1 Intvertible Convolution
アフィンカップリングレイヤでは片方のチャネルが一生かわらないから、チャンネルを入れ替える。
メモ
可変長のデータをどうやって処理してるのかよくわからんなー。
コードを見た方がよいのかなー。
お、結構すごいかも。。。
どうやって、可変長の出力をGlowで生成するの?
→ノイズを出力次元にあるようにサンプリング
→どうやって、狙った出力を作るの?
Parallel WaveNet, Clarinet, MCNNとか見ておいた方がよいの?
学習の安定性最優先で行きたい
?やっぱり、入出力の操作がよくわからんなー。