はじめに
(2023年末現在)去年か一昨年かくらいにVITSが一世を風靡して自分もVITSで音声合成を作って遊んでたのですが、一通り作って物足りなさを感じていました。
音質は学習を回せば回すほど改善するのですが、イントネーションがどうしても不自然でキャラクターの音声データ(少量、ファインチューニング)でいくら学習を回しても「それっぽい声のなんちゃって音声合成」的な域を越えらず「飽きた、物足りない」という具合に。
それで、イントネーション制御できるモデル(FastSpeech,JETSなど)モデルを試したのですが、調整に時間かかりすぎるのでこれはこれで「うーんちょっとだるい」という...
そして、「声質を無視して、音素列と抑揚の情報だけ学習できれば大量のデータで学習できるのになー」と思っていて、VISingerとかStyleTTSを見つけてこれ使ってみようかと思ったのですが
- VISingerは歌専用フォーマットだし、改変するのがめんどくさそう...
- StyleTTSは2つの事前学習モデルが必要でそれが英語版しかなく、phonimizerとかtokenが英語と、こちらも改変がめんどくさそうという...
私の場合、がっつり「そういう研究がしたい!」とかそういう目的ではなく「すげー、これでめっちゃ遊べるわ!」という体験が欲しいだけだったので
「そのうちだれかが実装してくれるだろう」
「改変作業進めてもどうせ新しいつよつよモデルが出てキョムリになるだろう」
ということで、しばらく音声合成から離れてました。
で約1年たってStyleTTS2やVITS2が発表されましたが、「StyleTTS 日本語」で検索しても何もヒットせず、やむなく自分で学習を回しました。この記事はその結果を供養するためのものになります。
StyleTTS
StyleTTSについては以下のリンクを参考にしていただければと思います。
事前準備
学習データ
おなじみのJSUTコーパス
トークナイザ(音素列に変換するやつ)
おなじみのpyopenjtalk
-
PC
- CPU: intel Core i5 13600k
- GPU: palit RTX 4090 24G
- OS: Windows SubSystem for Linux2(WSL2)
-
環境
- CUDA Version: 12.3
- python3.9
- pytorch: 2.0.1
ASR事前学習モデル
このリポジトリのソースコードを改変して学習を実行しました。
1000 epoch回しました。
私が日本語用に書き換えたものをこちらに用意したので興味がある方は覗いてみてください。
JDC Pitch Extractor事前学習モデル
このリポジトリのソースコードを改変して学習を実行しました。
500 epoch回しました。
私が日本語用に書き換えたものをこちらに用意したので興味がある方は覗いてみてください。
学習
事前学習モデルを所定のフォルダに配置して学習を回しました。
- first_stage:200epoch
- second_stage:100epoch
この値は、LJspeechデータセットを前提としたepoch数で、JSUTだと1/5くらいのデータ量がないので1000epoch,500epochくらい回さなきゃ比較できないかもしれませんが、学習に結構時間がかかるのでそのままにしました。
日本語対応したリポジトリ作ったので興味のある人は覗いてみてください。
結果
感想
リファレンスの雰囲気寄せてくれるけど、イントネーションが不自然。
学習不足な気もするが、今はBert-VITS2が話題なのでそちらを先に試したい。