NVIDIAのTacotron2モデルを再現してみた

Tacotron2とは

Tacotron2に関しては以下の記事で説明しています。

shirowanisan.com

目的

  • NVIDIA/tacotron2ソースコードの説明に従いモデルを作成し、NVIDIA提供モデルと同じモデルが作れるのかを明らかにする。
  • Tacotron2のクオリティに必要な学習数を明らかにする。

github.com

データセット 

NVIDIA提供モデルで使用していたデータセットはLJ Speech datasetという、英語のスピーチを13100個のwavファイルで提供しているものです。以下からダウンロード可能です。

keithito.com

 

サンプルデータとして1つ載せておきます。

"Printing, in the only sense with which we are at present concerned, differs from most if not from all the arts and crafts represented in the Exhibition"

 

NVIDIA/tacotron2では以下の割合でデータセットをtrain、val、testに分割しています。

分割 サンプル点数
train 12500
val 100
test 500

今回は学習のみ行うため、trainとvalのみ使用します。

ハイパーパラメータ

NVIDIA/tacotron2のハイパーパラメータはhprams.pyで管理されています。今回は何も修正せずに学習してみます。

https://github.com/NVIDIA/tacotron2/blob/master/hparams.py

step数とepoch数について

NVIDIA/tacotron2ではstep数とepoch数は以下のように扱われています。設定ではepoch数のみ指定し、step数はepoch数から決まります。

項目 説明
step

重みの更新を行った回数。

デフォルトのbach_size=64の場合、64サンプル点ごとに重みを更新するため、

1stepは64サンプル分学習する。

epoch

trainサンプルを何周したか。

trainサンプル点数12500でbach_size=64の場合は、

約195stepでtrainサンプルを一周するため、1epochは約195stepとなる。

デフォルトの設定では500epochでstep数は約97500stepとなります。

500epochの学習時間は、GPU RTX3090でだいたい3日〜4日くらいです。

学習結果

trainingとvalidationのlossを確認してみます。横軸がstep、縦軸がlossです。

グラフを確認すると、lossは約0.3あたりで減少しなくなっているように見えます。そのため、50k step(256epoch)程度で十分学習しているように思えます。

f:id:shirowanisan:20201122162559p:plain

f:id:shirowanisan:20201122162612p:plain

各stepの生成音声を確認してみる

各stepのモデルでテキストから音声生成を行い、クオリティを確認します。

読み上げるテキストは「くまのプーさん」の原作「Winnie-the-Pooh」の以下の一節にします。

 

"Here is Edward Bear, coming downstairs now, bump, bump, bump, on the back of his head, behind Christopher Robin."

 

各stepモデルでの生成音声、メルスペクトグラム、アライメントを載せます。アライメントはテキストとメルスペクトグラムの対応を示しています。アライメントが綺麗な右肩上がりになっている場合は、対応が問題なく行われていることが確認できます。

 

step 10k

f:id:shirowanisan:20201122164625p:plain

 

step 20k

f:id:shirowanisan:20201122164647p:plain

 

step 30k

f:id:shirowanisan:20201122164703p:plain

 

step 50k

f:id:shirowanisan:20201122164725p:plain

 

step 90k

f:id:shirowanisan:20201122164738p:plain

 

NVIDIA提供モデル

f:id:shirowanisan:20201122164826p:plain

 

step 10kではアライメントが上手くできておらず、生成された音声も不安定です。

step 20k、30kあたりから生成音声としては問題なさそうですが、まだ安定していない印象もあります。

step 50kからはNVIDIA提供モデルとあまり差がなさそうです。

まとめ

  • NVIDIA/tacotron2ソースコードの説明に従いモデルを作成すると、NVIDIA提供のモデルとほぼ同じモデルが作れた
  • Tacotron2のクオリティに必要なstepは50k(256epoch)で十分そう。ただし、これはtrainデータセットのサンプル点数、batch_sizeに応じて変わる。