「自分の好きな声優さんの音声合成作りたいなー」という純粋な欲望により最近音声合成について調べている者です。
学習方法を少し変えて試してみた話
前回の記事の続き?というかその後の話です。
前回の学習では、事前学習データと目的話者の両方を再学習させていて、データ数の比率的に目的話者の学習が全然進まなかったんじゃないかなーと思い、今回は事前学習モデルから目的話者データだけを転移学習させてみた結果を載せます。
私がmellotronで日本語学習したモデルを試せるgoogle colaboratryのサンプルコードを用意しました。
https://drive.google.com/file/d/1H4PHb1ADRncDx-DZedWKKhYnO_Nzhopj/view?usp=sharing
試すには以下のセクションをすべて実行してください。
- ワークスペースの設定
- 環境構築
- 推論
- 録音する場合
- 学習済みモデルを読み込み、推論する
- 生成音声
「録音する場合」のセクションの中に「録音」というセクションがあります。そこでテキスト入力とマイク入力を求められるので適宜操作を行ってください。
学習について
2段階で転移学習
前回の記事でも書きましたが、英語の事前学習モデルからJSUT+JVSコーパスによる日本語の転移学習を行い、さらにその日本語学習済みモデルから目的話者への転移学習、という2段階に分けて学習を行いました。
前回と違うところは、DeNAさんのこの記事を参考に、複数話者のデータを学習させて、平均の声モデルを作成するというのを試しました。
具体的には、JSUT,JVSコーパスのデータに対して、スピーカーidをすべて0にして学習したということです。
実行環境
OS : Ubuntu 20.4
GPU : GTX 1080 Ti 11か12GB
学習所要時間:約一週間
1.英語から日本語の転移学習
データセット
ここは前回と同様なので省略します。
学習ステップ数
batchが8で、57kステップ学習させました。
100kステップ以上学習させてみたのですが、試しに音声を生成してみたら非常に不安定だったので、比較的安定だったcheckpointのモデルを次の転移学習に採用しました。
この結果と、話者idを指定したり、GSTを組み込んでいるというmellotronの構造から、mellotronは平均的な音声の学習は向いてないのだろうと思いました。
2. 日本語モデルから目的話者への転移学習
データセット
1.のモデルを読み込んで、目的話者データ594+α文で学習。
594+αのうち、すべてを教師データ、αの一部をテストデータとしました。
テストデータに関してはそもそもデータが少ないので、テスト用に未知のデータとして分けちゃうと、データがもったいないというのが1点、
データが少ないがゆえに、未知データに対してほとんど無力でることは想定されるので、目安としては学習データに対してのlossでよいと考えた、という2点の理由により上記の分け方になってます。
学習のパラメータ
前回同様で
- batch_size = 8
のみ変更しました。
あ、ちなみにバッチサイズふやした、いや増やせたのは、GPUを隣のやつからぱk
交換していただいて、使えるメモリ量が増えたからです。
学習ステップ数
SSDの空き容量と相談して
- checkpoint = 3000
- 1000エポック
- 途中経過セーブデータ54個(約20GB)
で回しました。
エポックは1000に設定しましたが、800後半あたりで、lossの変化がほとんど見られなくなっていたので、そこらへんで打ち切ってます。
結果
「声の特徴をとらえた日本語が生成できる程度の品質」
サンプル音声を作ってみたのでよろしければご試聴ください
mellotron_IMC_150k_sample.wav
ところどころ苦手そうな発音が見られますが、おおむねうまく生成できているかと。
前回よりましになりましたが、話題になっている音声合成モデルたちと比べると全然です。
もともと、Tacotron2でやっていたものを、データ数少ないながらもイントネーションの改善がしたくて、mellotronに手を出したのですが、
こっちはこっちで構造が少し複雑だったり、入力が増えたことによる必要とされる、データに含まれる特徴量の変化や量の増加。具体的に言うと、ピッチに対応するそれぞれの発音、つまり、同じセリフでも高い声バージョンと低い声バージョンみたいな。
とかなんだかんだで、どのみちそう簡単にはいかないということがわかりましたね。
今後
ESPNetやMB MelGANなどのみんな使ってる新しめのモデルに手を出してみようと思ってます。
あ、でも飽きたらやめます。
参考
https://engineer.dena.com/posts/2020.03/speech-synthesis-for-entertainment/
https://note.com/npaka/n/n8c94da051c68
https://github.com/NVIDIA/mellotron
https://tosaka-mn.hatenablog.com/entry/2020/04/29/160050
https://shirowanisan.com/
https://qiita.com/kan-bayashi/items/536acaf165344a6d6460
https://qiita.com/K2_ML/items/2804594454b39180c909