研究紹介/コラム - Tacotron2+WaveGlow を動かす(音声合成)【後編】

Tacotron2+WaveGlow を動かす(音声合成)【後編】

前編では、Tacotron2の概要についてお伝えしました。今回は実際にTacotron2を動かす際の実装方法について解説します。(参照論文:https://arxiv.org/abs/1712.05884

Tacotron2の導入について

まずは、私の使った作業環境を先に紹介します。

CPU:Ryzen 7 3700K
Mother Board:ASRock B450/Pro4
Memory:128 GBytes
GPU:NVIDIA RTX3090(VRM:24GByte)
OS: Ubuntu 22.04(Ubuntu-ja-22.04-desktop-amd64.iso)

  

さて、現在ではTacotron2+Waveglowのオリジナルコードを試そうとしても(Colabでの実行も含め)バージョンが合わないため動かないようです。
一つに、Tacotron2+WaveglowのインストールにはTensorflow1.Xが必要な事。さらに、NVIDIA RTX 3000番台以降のGPUを使用する場合、対応するCUDA11以降が必要なため、古い環境を揃えようにも通常の方法では限界があります。
残念ながら、CUDA11とリンクしたTensorflow1.Xは、conda-forge,PyPI 共にありませんので、自身でビルドする必要があります。


そこで、今回はNVIDIAが用意している、Docker イメージ(コンテナ)を使うことにしました。
ちょうど、“nvcr.io/nvidia/tensowflow/22.05-tf1-py3” というのが、動作条件(Tensorflow+CUDA1.7)を満たすイメージコンテナなので、これを使いました。
Dockerイメージカタログの中から見つけることができました。

手順

①必要なイメージをダウンロードします。

 

②ダウンロードしたイメージのimage id を調べておきます。

  

③コンテナーを起動します。

起動オプションが多いので、実際は、compose.ymlで指定する方がよいですが、ここでは割愛します。

  

④Dockerに入ったら、PyTorchをインストールします。

 

⑤tacotron2のインストールを行います。

 

⑥Apexをインストールします。

 

⑦その他の必要なモジュールのインストールを実施します。
 nanoなどのテキストエディタを使ってrequirements.txtを書きかえます。

 ・インストールを実施

 

⑧jupyter lab を起動します。

ローカルのプラウザで http:localhost:8888 を指定し、ノートブックを開きます。

プレトレーニング済みモデルのダウンロードは、ブラウザーで、https://github.com/NVIDIA/tacotron2 を開いて、Inference demoにある、Tacotron2 model と Waveflow modelへのリンクからダウンロードします。ダウンロードしたtacotron2_statedict.ptとwaveglow_256channels_univesal_v5.ptは、 /home/d_drive/tacotron2 (docker上では /home/work/tacotron2)に移動させます。

動作確認は、inference.ipynb が、プログラム上にあるモデルファイル名をダウンロードしたものと一致させ動けばOKのはずです。
※グラフのところでbottom が無効なオプションとかでエラーになる場合は、plot_data関数定義の箇所のBottom->lower に書き換えれば、OKです。
プログラム上のテキスト通りに英語のスピーチが聞こえると思います。

docker imageは終了すると、元に戻ってしまうので、ここまでの状態で、一旦 コミットをかけておきましょう。

 

・DOCKER IDを確認

・コミットする

 

日本語を発話させる場合には、JSUTデータセットなどを使ってTacotron2モデル部分だけをファインチューニングします。
Jsut(Japanese speech of Saruwatari-lab, University of Tokyo)は「台本」と「読み上げ音声」(女性、同一人物)で構成されているデータセットです。
https://sites.google.com/site/shinnoketakamichi/publication/jsut

実際のモデル学習方法は、他の方がWebページに具体的に詳しく書いておられますので、ここでは割愛します。
音声は、私見ですが、ちょうどNHKのニュースで使用されているAI音声ガイドにそっくりなものができます。

(参考ページ)
 NVIDIA/tacotron2 で日本語の音声合成を試す (2) – JSUTで学習

ESPNET2

ところで、実のところ現在では、音声認識・音声合成の統合開発環境(ESPNET2)があります。
この開発キットはtacotron2を含んでおり、今回のようなインストールに苦労することなく動かすことができます。
ESPNET2で使用可能なモデルには次のようなものがあります。

 

ESPNET2が扱えるモデル

  

この中で、VITSは、E2E型のモデルで、比較的自然に聞こえる音声を生成できるようです。
デモンストレーションが用意されており、ローカルPCにインストールする前に簡単に試すことができます。

ESPNET2はこちらにあります。
https://github.com/espnet/espnet

デモンストレーションが用意されており、容易にColab上で動かすことができます。
https://colab.research.google.com/github/espnet/notebook/blob/master/espnet2_tts_realtime_demo.ipynb

結論

音声認識技術は歴史的に、音声波形をスペクトログラムを用いて時系列に並べたものを確率論的に解析する隠れマルコフモデルが利用されてきましたが、その後、計算機資源が潤沢になるに従い、ニューラルネットワークやこれらのハイブリッド型、そして最近ではGlowとWaveNetを組み合わせたWaveGlowに代表されるように、様々な分野で使われているディープラーニングの成果が利用されるようになっています。

後日、ESPNET2も動かしてみたものの、多機能ゆえにフレームワークが複雑であり、ソースコードにも目を通しながら動かす場合には、単体モデルのTacotron2を上記手順でNVIDIAの提供するDockerコンテナを利用して動かす方がはるかに容易でした。

尚、ESPNET2を動かす場合でも、OS、Pythonライブラリ等のバージョンアップによって動かなくなってしまう可能性が高く、Docker環境に構築する事をお勧めします。

統合環境は一見すると便利なようでありますが、原著にあるオリジナルのモデルを工夫しながら動かしてみる事が研究や理解を深めるためには重要だと考えます。 みなさんもぜひ、本稿のように試行錯誤しながら音声認識・音声合成を楽しんでみてください。

研究紹介/コラム ー Tacotron2+WaveGlow を動かす(音声合成)【後編】