テキストから, 自然な(人間が話しているっぽい)スピーチを生成し, LibTorch, TensorFlow C++ でモバイル(オフライン)でリアルタイム or インタラクィブに動く(動かしやすそう)な手法に注力しています.
英語に限っています.
人気がありそう(いろいろな人がトライしていて知見や実装があるもの)なやりやた
Tacotron2 -> [Mel spectrogram(wav)] -> WaveRNN -> [audio(wav)]
最近のトレンド?
Tacotron2 の部分を Transformer 系のものを使う(e.g. FastSpeech), WaveRNN の部分を WaveGlow, WaveFlow を使う.
Mel spectroguram(メル スペクトログラム)
中間のデータ表現. 誤差を計算したりいろいろ処理がしやすいのでこの Mel spectrogram データを入出力に使うのが長く使われている. WaveRNN, Tacotron2 も Mel spectrogram を中間データ形式として使う.
Tactron2
NATURAL TTS SYNTHESIS BY CONDITIONING WAVENET ON MEL SPECTROGRAM
PREDICTIONS
Tacotron に比べてより簡略化したネットワーク. Mel spectrogram を生成後は, Tacotron では Griffin-Lim で処理していた部分を WaveNet に置き換え(この部分はどれでもよい?).
WaveRNN
Mel spectrogram から自然な音声生成. Griffin-Lim や WaveNet は処理が重いが, 品質を保ったままモバイル CPU でもインタラクティブに動くように sparse に計算させるなどして高速化.
WaveGlow
WaveRNN + Glow.
論文著者によるオフィシャル実装があり検証しやすい. pytorch 実装.
WaveRNN のように mel spectrogram を生成する Tacotron2 などと組み合わせる.
合成が高速(mel spectrogram -> audio の部分)
オフィシャルの提供の pretrained model は 640 MB あるので, モバイルなどで動かすにはモデルデータ削減(パラメータ調整)が必要かもです(昨今のメモリ 8 ~ 12 GB, ストレージ 512GB ~ 1TB 搭載ハイエンドスマホなら削減しなくてもよさそう...?)
MelNet
MelNet: A Generative Model for Audio in the Frequency Domain
https://arxiv.org/abs/1906.01083
インターネット上のビデオから学習して, 話者の声質を再現
FastSpeech
高速に TTS できるっぽい. ソースコード公開予定
FastSpeech: Fast, Robust and Controllable Text to Speech
https://arxiv.org/abs/1905.09263
有志?による実装
pretrained model でそこそこいい感じに推論できます.
CPU でも I'am happy to see you again
だと 1 秒くらいで合成できます(Transformer 0.1 秒, griffin-lim 0.9 秒くらい). waveglow と組みあわえる場合は 9 秒くらい.
関連論文
Almost Unsupervised Text to Speech and Automatic Speech Recognition
https://speechresearch.github.io/unsuper/
少ないデータから学習できる
Transformer-TTS
Neural Speech Synthesis with Transformer Network
https://arxiv.org/abs/1809.08895
LCPNet
モバイルで動く
Mellotron
Mellotron: Multispeaker expressive voice synthesis by conditioning on rhythm, pitch and global style tokens
感情や歌声などのトレーニングデータなしに, 感情を含んだ音声や歌声を生成できる.
2019 年 11 月 25 日にオフィシャル実装公開されました.
WaveFlow
WaveGlow より, よりコンパクトに表現できる(パラメータ数が少ない). 2D convolution する. WaveGlow, WaveNet もここから派生して定義することがでいる.
WaveFlow: A Compact Flow-based Model for Raw Audio
https://arxiv.org/abs/1912.01219
W.I.P 実装
https://github.com/L0SG/WaveFlow
ForwardTacotron
FastSpeech inspired.
Tacotron と FastSpeech のいいとこ取りな感じか.
その他
ClariNet: Parallel Wave Generation in End-to-End Text-to-Speech
https://arxiv.org/abs/1807.07281
Close to Human Quality TTS with Transformer
https://arxiv.org/abs/1809.08895
https://github.com/tensorflow/models/tree/master/official/transformer を使えばさらっと実装できるっぽい...?
FFTNet http://gfx.cs.princeton.edu/pubs/Jin_2018_FAR/
リアルタイム向け. WaveRNN よりいいかも?
GAN-based text-to-speech synthesis and voice conversion (VC)
https://github.com/r9y9/gantts
AlignTTS: Efficient Feed-Forward Text-to-Speech System without Explicit Alignment
https://arxiv.org/abs/2003.01950
WG-WaveNet: Real-Time High-Fidelity Speech Synthesis without GPU
https://arxiv.org/abs/2005.07412
所感
Tacotron は end-to-end で学習できるのが利点であるが, 品質を出すにはいろいろ学習の試行錯誤が必要なようである.
2020 年 3 月 28 日時点では,
- Tacotron2 + Waveglow が基準品質(英語)
- FastSpeech + WaveGlow -> Tacotron2 + Waveglow に比べ, いくらか機械的にはなるがより抑揚などが制御できている(英語) LJSpeech 以外のデータセットで学習すればいい感じになるかも
- モバイル向けなら FastSpeech + SquezeWave or ForwardTacotron + SqueezeWave か?
Transformer 系は高速でモバイルで動かすのによさそうである.
Tacotron + WaveRNN は単一話者向け(一話者一学習データ)っぽいので, マルチスピーカーや声質変換, 感情つけなどの場合は別のモデルがよさそう(DeepVoice, LoopVoice, Mellotron など)
MelNet に期待.
実装
-
https://github.com/espnet/espnet
- End-to-End Speech Processing Toolkit
- いろいろてんこ盛り. ありがとうございます.
-
https://github.com/keithito/tacotron
- 中国語(Chinese Mandarin)版 https://github.com/keithito/tacotron/issues/118
- https://github.com/NVIDIA/tacotron2
-
https://github.com/fatchord/WaveRNN
- ネットワークだけなので参考程度
- Tacotron2 + WaveRNN https://github.com/h-meru/Tacotron-WaveRNN
- Combination of the Tacotron-2 implementation by Rayhane-mamah with the WaveRNN-inspired method by fatchord https://github.com/m-toman/tacorn