音声認識 - 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社) Wed, 14 Aug 2024 06:39:28 +0000 ja hourly 1 https://wordpress.org/?v=6.7 /wp-content/uploads/2024/02/cropped-FEGゴロ-32x32.png 音声認識 - 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社) 32 32 Tacotron2+WaveGlow を動かす(音声合成)【後編】 /column/tacotron2waveglow-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99%ef%bc%88%e9%9f%b3%e5%a3%b0%e5%90%88%e6%88%90%ef%bc%89%e3%80%90%e5%be%8c%e7%b7%a8%e3%80%91/?utm_source=rss&utm_medium=rss&utm_campaign=tacotron2waveglow-%25e3%2582%2592%25e5%258b%2595%25e3%2581%258b%25e3%2581%2599%25ef%25bc%2588%25e9%259f%25b3%25e5%25a3%25b0%25e5%2590%2588%25e6%2588%2590%25ef%25bc%2589%25e3%2580%2590%25e5%25be%258c%25e7%25b7%25a8%25e3%2580%2591 Wed, 05 Jun 2024 01:00:00 +0000 /?post_type=column&p=1024 前編では、Tacotron2の概要についてお伝えしました。今回は実際にTacotron2を動かす際の […]

The post Tacotron2+WaveGlow を動かす(音声合成)【後編】 first appeared on 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社).

]]>
前編では、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が扱えるモデル

  •  Tacotron2
  •  Transformer-TTS
  •  FastSpeech
  •  FastSpeech2
  •  Conformer FastSpeech & FastSpeech2
  •  VITS
  •  JETS

  

この中で、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 を動かす(音声合成)【前編】

当社について

日々最先端の機械学習・分析技術の研究を行い、それらを活用した予測モデル・AIモデルの提供を行っています。

テキスト情報を用いた分類モデル構築
メール配信ターゲット抽出モデル構築
商品レコメンドモデル構築
もっと見る 

The post Tacotron2+WaveGlow を動かす(音声合成)【後編】 first appeared on 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社).

]]>
Tacotron2+WaveGlow を動かす(音声合成)【前編】 /column/tacotron2waveglow-%e3%82%92%e5%8b%95%e3%81%8b%e3%81%99%ef%bc%88%e9%9f%b3%e5%a3%b0%e5%90%88%e6%88%90%ef%bc%89%e3%80%90%e5%89%8d%e7%b7%a8%e3%80%91/?utm_source=rss&utm_medium=rss&utm_campaign=tacotron2waveglow-%25e3%2582%2592%25e5%258b%2595%25e3%2581%258b%25e3%2581%2599%25ef%25bc%2588%25e9%259f%25b3%25e5%25a3%25b0%25e5%2590%2588%25e6%2588%2590%25ef%25bc%2589%25e3%2580%2590%25e5%2589%258d%25e7%25b7%25a8%25e3%2580%2591 Thu, 08 Feb 2024 04:12:33 +0000 /?post_type=column&p=225 モデルが古くて動かせないケースの解決方法 音声認識と生成系AI 昨今、音声認識技術は、チャットポット […]

The post Tacotron2+WaveGlow を動かす(音声合成)【前編】 first appeared on 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社).

]]>
モデルが古くて動かせないケースの解決方法

音声認識と生成系AI

Tacotron2+WaveGlow

音声データにおける生成系AIといえば、音声合成があります。著名なものに、今回取り上げる、Tacotron2+WaveGlowがあります。
(論文:https://arxiv.org/abs/1712.05884

このモデルでは同一の話者が吹き込んだデータを用意し、モデル学習をすれば、その人物の特徴をモデルに取り込み、打ち込んだテキストから、本人そっくりの音声を生成させることができます。tacotronのサイトには、The LJ Speech Datasetで学習したデモが用意されています。
このモデルの良いところは、Tacotron2モデル でテキストからメルスペクトログラムを作成し、それを基にしてWaveGlowモデルで音声合成を行うという、2段階の処理になっているところだと思います。(下図 )

メルスペクトログラム

メルスペクトログラムは一言で言うならば、時間、周波数および信号強度からなる3次元データで、音声認識・音声合成を学ぶ者は必ず通る道であり、いってみれば基本中の基本といったデータで、プロットすることによって簡単に視覚化できます。
音声データからメルスペクトログラムを作るのはPythonで簡単に行えます。言ってみればモデルの動きを視覚的にとらえやすい。
最近の性能が高いといわれているE2E(End-to-end)型のモデルでは、このメルスペクトログラムを生成する工程をバイパスする構成になり、モデルがブラックボックス化します。個人的には、Tacotron2は、途中結果を視覚化できるという点で、一度は動かしておきたいモデルだと思います。

次回

今回はTacotron2の概要についてお伝えしました。次回は実際にTacotron2を動かす際の実装方法について解説します。

関連記事

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

当社について

日々最先端の機械学習・分析技術の研究を行い、それらを活用した予測モデル・AIモデルの提供を行っています。

テキスト情報を用いた分類モデル構築
メール配信ターゲット抽出モデル構築
商品レコメンドモデル構築
もっと見る 

The post Tacotron2+WaveGlow を動かす(音声合成)【前編】 first appeared on 金融エンジニアリング・グループ(FEG:フェグ|日鉄ソリューションズグループのデータ分析・コンサルティング会社).

]]>