【論文紹介】MelGAN & Multi-band MelGAN
自分がよく使うモデルは理解を深めておこうの精神。
MelGAN の論文はこちら
Multi-band MelGAN (以下 MB-MelGAN)の論文はこちら
公開されている実装は例えば以下にあります。
Official
Unofficial
(前の記事でも下の ParallelWaveGAN リポジトリの MultiBand-MelGAN の実装を利用させていただいてます。本当にありがとうざいます...)
目次
0. 論文概観
とりあえず最初に落合洋一フォーマットを書きました。これまだよく使われたりしてるんですかね?
MelGAN
1. どんなもの? Non AutoRegressive な構造 + Adversarial Training で高速 & 高品質な Vocoder を作れた。 2. 先行研究と比べてどこがすごい? 高速 & 高品質。波形生成で初めて知識蒸留や Perceptual Loss なしに Adversarial Training を成功させた。 3. 技術や手法のキモはどこ? Network 構造の工夫や Multi Scale の Discriminator などの Adversarial Training が上手く行く工夫を色々検証し、適用している。 4. どうやって有効だと検証した? MOS スコア, 推論速度で既存の手法と比較。 MOS は [3] WaveGlow よりすこし悪いが速度は WaveGlow の 10 倍を達成 (WaveGlow も十分早い) 。 5. 議論はある? MelGANは音声特徴量は波形データと時系列が揃っている必要がある (Unconditional への適用は Future work) 。 あと WaveNet, WaveGlow ほどの精度ではない。 6. 次に読むべき論文は? [3] Waveglow: A flow-based generative network for speech synthesis [4] Parallel WaveGAN: A fast waveform generation model based on generative adversarial networks with multi-resolution spectrogram [2] Multi-band MelGAN: Faster Waveform Generation for High-Quality Text-to-Speech
MultiBand-MelGAN
1. どんなもの? MelGAN の改良版でさらに高速 & 高品質な波形生成モデル。 2. 先行研究と比べてどこがすごい? めちゃくちゃ高速 & 高品質 & 軽量。 3. 技術や手法のキモはどこ? ReceptiveField を広げた Layer の追加。 Parallel WaveGAN などで利用されている STFT Loss を導入。 Filterbank を利用して Multi-band 化し Generator が生成する波形の時間方向の Upsampling を少なくしたり, 各 subband 上での STFT Loss を導入。 収束の高速化のため STFT Loss のみでの事前学習を実施。 4. どうやって有効だと検証した? MOS スコア、推論速度で既存の手法と比較し、MOS は MelGAN 以上で速度は MelGAN の 6~7 倍を達成。 5. 議論はある? FutureWork として挙げられているのはさらなる高精度化 (人の生の音声データとの合成音声のギャップを埋める)。 6. 次に読むべき論文は? [5] VocGAN: A High-Fidelity Real-time Vocoder with a Hierarchically-nested Adversarial Network
それでは以下で詳細を述べていきます。
1. MelGAN
1.0. サマリ
MelGAN は音声特徴量 (MelSpectrogramなど) から音声波形を生成するモデルです。音声特徴量 → 波形生成を行うモデルは Vocoder と呼ばれ、MelGAN は Vocoder の一種です。
DNN を利用した Vocoder として有名なものとしては WaveNet がありますが、WaveNet は非常に高品質な一方で自己回帰で推論する構造のため波形生成に非常に時間がかかる問題があります。
自己回帰を利用しない並列計算可能かつ高品質な Vocoder の研究は数多くなされていますが (例えば [3] WaveGlow)、この MelGAN も自己回帰ではない並列計算が可能な構造で高速かつ高品質を目指したモデルです。
通常音声特徴量 → 波形は一意にもとまらない設定が多いのでただの回帰モデルだと綺麗な音声の生成が難しいとされていますが、 MelGAN は GAN を利用して音声特徴量の条件付きの分布からサンプリングする生成モデルとして学習することで実データに近い予測を可能にしています。
( [3] Waveglow は同じ生成モデルではありますが Flow ベースのモデルで GAN とは異なる手法を利用しています。)
一般に GAN の学習自体も難しいとされますが、MelGAN では Network 構造の工夫や MultiScale な Discriminator など様々なテクニック利用することで高精度なモデルの作成に成功しました。
この論文で述べられている Main Contributions は以下です。
- NonAutoregressive な conv 構造の下で GAN の学習を用いた音声波形生成を実施。知識蒸留や Perceptual Loss ([6] ParallelWaveNetなどで用いられる、別の事前学習済みモデルの特徴量空間でのloss) なしで GAN を使用した高品質な音声波形生成モデルの作成に初めて成功。
- MelGAN は MusicTranslation, TextToSpeech, Unconditional Music Synthesis への適用においても僅かな音声の劣化で抑えられるクオリティであるため、これまで利用されてきた Autoregressive モデルをより高速な MelGAN で置き換えることができる。
- 速度に関しては他の高品質なNonAutoregressiveモデルである Waveglow の1/10の時間を達成。
1.1. モデル構造
GAN の学習を行うので Generator と Discriminator の 2 つからなります。
全体像 ↓
※MelGAN 節の画像は全て [1] MelGAN の論文から引用しています。
Generator
Generator は音声特徴量から波形データを生成するモデルです。
Network 構造は時間方向に伸ばす Upsampling と conv 層を重ねた Residual Stack を繰り返す作りになっています。
構造上のポイントは以下です。
- Upsampling には Transposed Conv を利用し、kernel size = stride*2 に設定。
- kernel size が stride で割り切れないと構造上の理由からの格子状の artifacts が発生しやすいらしい (このサイト 参照)。
- Residual Stack には Dilated Conv を利用 (下部 図2.)。
- Receptive Field を広げてより大域的な特徴を考慮できるようにしている。
- Receptive Field を広げてより大域的な特徴を考慮できるようにしている。
その他モデルの精度に関連する Tips として以下が述べられています。
- instance normalization は pitch の情報を落としてしまうので入れると悪くなる。
- spectral normalization も入れると悪くなる。
- weight normalization を使用。
- 生の Audio との L1 Loss を目的関数に加えると悪くなる。
(論文中にこれらを入れたり入れなかったりするケースの MOS の比較があるので気になる方は見てみてください。)
Discriminator
Discriminator は実データか生成データか識別するモデルです。
MelGAN の Discriminator では 1 つの波形データに 1 つの予測確率値ではなく、[7] pix2pix の論文 で利用されているような局所的に実データか生成データか識別する構造をとっています。
(MelGAN 論文中では Window-based Discriminator と呼んでいます。)
もう一つ別の特徴的な点としては、入力データのスケール(サンプリングレート)を変えた 3 つの Discriminator を用意している点があります (これは [8] Pix2PixHD を参考にしているそうです)。
一つ目はそのままの波形データ、二つ目がサイズを 1/2 にした波形データ, 三つ目がサイズを 1/4 にした波形データの入力を受け付けるようにしており、それぞれ波形データのサイズを 1/2 にする際には kernelsize=4, stride=2 の AvgPooling を適用します。
入力のスケールを変えることによりそれぞれの Discriminator で各々異なる周波数帯の特徴を学習できるようにしているようです。例えば 1/4 は高周波成分が除かれるので、低周波の大域的な特徴をより強調してみることができます。
1.2. 学習方法
目的関数
大きく 2 つの Loss からなります。
A. GAN の Loss
B. Feature Matching Loss
A. GAN の Loss
GAN の目的関数は hinge loss を利用しています。
上記は MelGAN 論文中の(1), (2)式を貼り付けてますが、上の式の と の部分は max だと思います (この論文[10] の 2.3. 節に GAN のいくつかの種類がまとまっているので参考にどうぞ)。
基本的に各 Discriminator は実データの値を大きく(上の式の前半の項)、生成データの の値を小さくする(下の式の後半の項)ように学習します。逆に Generator は生成したデータの の値を大きくするように学習します。
hinge loss では とすることで が 1 以上になったら更新しないようになっており、ある実データ x が簡単に見分けられる場合でも が際限なく大きくなることはないような形ではあります。
ちなみに、実装上は に ReLU をかますだけで簡単に実現されます。
B. Feature Matching Loss
補助的な Loss として Discriminator の特徴量空間での L1 Loss も合わせて学習します。
式↓
↓図の Feature map と書いてある出力が に対応します。だいたい活性化関数のあとの出力が利用されます。
1.3. ベンチマーク
以下では MelSpectrogram から元の波形データを再合成したケースの結果だけ載せますが、論文では他にも TTS 用の Vocoder として使用した場合や VQVAE と組み合わせた場合についての検証もしています。
以下は LJSpeech データセットでの各モデルの性能比較です。
MOS (Mean Opinion Score) は人間の主観評価です (5 が良くて 1 が悪い)。論文ごとに使用されている人間が違うので他の論文に乗っている値と比較する際は注意しましょう。
以下は推論速度の比較です。(GPU は GTX1080 Ti が使用されている)
この表の例えば MelGAN の CPU で 51.9kHz というのは、1 秒間に 51.9k サンプル点を生成出来るという意味で、例えば、24000Hz の音声データを生成する場合は 1 秒で (51900 / 24000) 秒分の音声データが生成できることになります。
結果を見ると精度は WaveNet や Waveglow には及ばないようですが速度は Waveglow の 10x 以上でています。
他のタスクでの結果などについては論文の方を見てみてください。
MelGAN に関しては以上になります。次は MB-MelGAN についてみていきます。
2. MB-MelGAN
2.0. サマリ
MB-MelGAN は MelGAN の改良版です。MelGAN と比較して計算量は 1/6 でより高品質 (MoS スコアで)。さらに軽量。とカタログスペックはかなりいい感じです。
MelGAN との違う点は大雑把には以下になります。
- Receptive Field をより広げた層を追加。
- FeatureMatchingLoss を multi-resolution STFT Loss (spectrac convergence loss, log stft magnitude loss) に変更。
- Generator を Multi-band の予測に変更し、Pseudo-QMF bank で fullband (1 band) に戻す構造にしている。各 subband (= Multi-band 化した時の各成分) に対しても STFT loss を利用。
- 最初に STFT loss のみで学習させて学習の高速化を図っている。
以下でもう少し細かい違いを述べていきます。
2.1. モデル概要
全体像はこんな感じです。MelGAN から Analysis Filter Bank, Sythesis Filter Bank が追加されてます。
(*特に注釈がなければMB-MelGAN節の画像は[2]MB-MelGANの論文から引用しています。)
MelGAN と違う箇所
Generator は大まかに以下が違います。
Residual Stack において Receptive Field の広い(dilation の大きい) Convolution を 1 つ増やした。
- MelGAN は dilation = 1, 3, 9 の 3つ
- MB-MelGAN は dilation = 1, 3, 9, 27 の 4つ
1 band の予測から 4 band の予測に変更. それに伴って Upsample のスケールも変更。
- MelGAN は Upsample 8x → 8x → 2x → 2x
- MBMelGAN は Upsample 2x → 5x→ 5x
- これらは、音声波形データと音声特徴量の長さの比率(MelSpectrogram なら hop size の設定)によって変えるべきパラメータなのであくまで参考値。
Discriminator はほぼ同じで違いは layer 数を 4 → 3 に変更したくらいです。
あと MB-Melgan の generator が予測する multi-band 化されたものは synthesis filter bank (後述) によって 1 band に戻してから Discriminator の入力に与えます。
Multi-band について補足
ここまで multi-band を連呼しているのに私は正確な定義を知らない (よいリファレンスあれば教えていただけると幸いです) のでお伝えするのはイメージになりますが、multi-band 化するというのは波形データを異なる周波数帯の波形データに分解圧縮することです。
イメージ図↓
(*これは私が書きました)
上記 m-band signal は m 個の波形データからなり、各 m 個の波形データは元の波形データの異なる周波数成分のイメージです。
全体像の図にあった Analysis Filter Bank はこの図の Analysis + ↓m, Synthesis Filter Bank はこの図の ↑m + Synthesis が対応しています。
詳しく説明すると尋常じゃなく長くなりそうなのでざっくり特徴をかいつまんで説明すると、
上の図の Analysis (と↓m), Synthesis (と↑m) では以下ような処理がされます。
analysis では m 種類の filter をかけて1 m 個の signal を生成 (MB-MelGAN では m=4)。 その後各 signal の時間方向の長さを 1/m にする。
- Fileter の種類によるが基本的には m 個の各 signal は異なる周波数帯の成分を抽出したもの。
- 例えば analysis, synthesis filter bank に cosine modulated filter bank という種類を利用すると各 signal はそれぞれ の周波数帯の成分をだいたい抽出したものになる。
synthesis では長さが 1/m になった m 個の signal を元の長さに戻した後 filter をかけて足し合わせることで 1 band に戻す。
- Pseudo-QMF bank というものを利用すると analysis -> synthesis の処理を経た波形データはほぼ完全に元の波形データに復元される。あくまでほぼ完全なのでちょっと誤差は出る。
Multi-band 化に用いる (Analysis, Synthesis) Filter Bank には [9] DurIAN で使用されている Pseudo-QMF bank が利用されています。
以上が multi-band 化のかなりざっくりした処理です。
直接波形を生成する系のモデルで今後 multi-band 化を利用するのは沢山見かけるようになりそうな気がする...
例えば、ヤマハさんも WaveNet の自己回帰のサンプリング回数を減らすために Pseudo-QMF bank を適用した特許をとってました。参考リンクはこちら。
2.2. 学習方法
目的関数
以下の 2 種類からなります。
A. GAN の目的関数
B. FullBand, SubBand STFT Loss
MelGAN で使用された Feature Matching Loss はこちらでは使用されていません。
A. GAN の目的関数
MelGAN は Hinge loss でしたが、こちらでは Least Square 型のものを使用します。
式↓
B. FullBand, Subband STFT Loss
MB-MelGAN では MelGAN で用いていた Feature Matching Loss を使用せず、代わりに 波形データを STFT して移した先での Loss を使用します。
具体的には [4] Parallel WaveGAN などでも利用されている以下の 2 種類の Loss を考えます。(上が spectral convergence loss, 下が log STFT magnitude loss)
ここで STFT のパラメータ (例えば hop size とか window size とか) は 1 つに固定ではなく何種類か使用してそれらの平均を取ることでロバストな感じにします。
例えば M 種類の STFT の平均を取ることで Loss を以下のようにしています。
あとは、MB-MelGAN ではこれらの Loss を FullBand, Subband 両方で計算します。
(FullBand では教師値と予測の m-band を合成して 1 band にしたものとペアで loss を計算。Subband では教師値をm-band化した各bandと予測値の各bandのペアで loss を計算)
Full Band の Loss と Sub Band の Loss を合わせて、最終的な目的関数は以下になります。
Full Band と Sub Band それぞれで使用 される STFT のパラメータは以下になります。
学習上の工夫
最初は STFT Loss の方だけである程度学習させて、途中から GAN の Loss を追加するということをしています。
STFT Loss のみでもある程度のクオリティまではいけるので、GAN を使わず早めにある程度のところまで精度を持って行っておくことで収束を早める効果があります。
2.3. ベンチマーク
精度比較
こちらは MelGAN に各工夫を追加した場合の比較です。
特に ReceptiveField の大きい Layer の追加 (F3) が効いている様子です。
(F2 は feature matching loss → STFT loss の変更)
こちらは Multi-band 化した場合の精度です。F1~F3 の工夫は乗っています。
M2 は F3 と同じくらいですが、次で見る速度では圧倒的に M2 が良いです。
速度比較
こちらは各モデルの速度比較です 2。RTF は real-time factor で 1sec の音声の生成にかかる時間です。
M2 は実行時間が 1/6 ~ 1/7 になっています。めっちゃ早く、しかも軽量化されてる。
MB-MelGAN に関しては以上です。
4. おわりに
この辺の手法が気になった方はぜひ元論文も読んでみてください。ここで書いている内容とニュアンスが違う部分もあるかもしれません。
あと、間違っている箇所などがあればコメントいただけると幸いです。
モデルを使ってみた印象ですが、MB-MelGAN はあまりに早く推論には GPU を必要としないレベルで、精度もかなり十分なものでした (私の環境でモデルのfinetuneを試した際は十分学習していない or 使用データが悪いせいで希にノイズが乗ってしまうこともありましたが...)。
特に CPU でも一瞬結果が帰ってくるので音声のチェックがストレスなくできて作業がすごく捗ります。
前は WaveGlow を個人的には使っていましたが、学習が難しいor時間がかかる?感じがあってあまり高品質な Vocoder にならなかった (なんかキーキー言うノイズが乗ることがよくある) ので MB-MelGAN の方がいいかなと思っています。
ただ、MB-MelGAN も Adversarial Training の学習の難しさはあるのでより良いモデルを作るには色々試す時間と根気がいるかもしれません。
次回は Glow-TTS について書くのを予定しています。
先に Glow-TTS をまとめる予定でしたがプログラム、使用データなどにちょっとミスがあって色々やり直し中なので...
あと、前回の記事のモデルは Pitch をいじれるようにした変更なども入れているのでその辺りも踏まえて...
5. 参考
[1] Kumar, Kundan, et al. "Melgan: Generative adversarial networks for conditional waveform synthesis." Advances in Neural Information Processing Systems. 2019.
[2] Yang, Geng, et al. "Multi-band MelGAN: Faster Waveform Generation for High-Quality Text-to-Speech." arXiv preprint arXiv:2005.05106 (2020).
[3] Prenger, Ryan, Rafael Valle, and Bryan Catanzaro. "Waveglow: A flow-based generative network for speech synthesis." ICASSP 2019-2019 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2019.
[4] Yamamoto, Ryuichi, Eunwoo Song, and Jae-Min Kim. "Parallel WaveGAN: A fast waveform generation model based on generative adversarial networks with multi-resolution spectrogram." ICASSP 2020-2020 IEEE International Conference on Acoustics, Speech and Signal Processing (ICASSP). IEEE, 2020.
[5] Yang, Jinhyeok, et al. "VocGAN: A High-Fidelity Real-time Vocoder with a Hierarchically-nested Adversarial Network." arXiv preprint arXiv:2007.15256 (2020).
[6] Oord, Aaron, et al. "Parallel wavenet: Fast high-fidelity speech synthesis." International conference on machine learning. PMLR, 2018.
[7] Isola, Phillip, et al. "Image-to-image translation with conditional adversarial networks." Proceedings of the IEEE conference on computer vision and pattern recognition. 2017.
[8] Wang, Ting-Chun, et al. "High-resolution image synthesis and semantic manipulation with conditional gans." Proceedings of the IEEE conference on computer vision and pattern recognition. 2018.
[9] Yu, Chengzhu, et al. "Durian: Duration informed attention network for multimodal synthesis." arXiv preprint arXiv:1909.01700 (2019).
[10] Jolicoeur-Martineau, Alexia, and Ioannis Mitliagkas. "Connections between Support Vector Machines, Wasserstein distance and gradient-penalty GANs." arXiv preprint arXiv:1910.06922 (2019).