ゴルシウィークの課題として音声合成に挑戦してみました。
ぶっちゃけ元論文もモデルの中身もわけわかめですが、ありものを組み合わせるだけである程度のものが作れました。
実装してくれてる神々、情報をまとめてくださってる神々には、頭が上がりませんね。
神は存在します。ネットで見た。
あと、皆さんご存知かと思いますが、
も神サービスでしたね。
なんにも知らなかったので普通にGCEで借りたGPUマシンぶん回して愚かにも8000円溶かしましたね。
流石にColab Proより1.5倍くらい早かったですが。
できたもの
どうやったか
入力データ
JSUTをmecab + tdmelodicでカタカナとピッチ情報にして、espeak-ngで下処理しました。
例)
便利屋は、一月と二月はわりあい暇だ。
↓ mecab + tdmelodic
ベ%]ンリヤワ イ%[チ%]ガ%]ツト ニ%]ガ%]ツワ ワ%[リアイヒ%[マダ.
↓ espeak-ng
bˈe̞↘nɽijˈäwä ˈi↗tɕˈi↘ɡˈä↘tsˈɯᵝto̞ nˈi↘ɡˈä↘tsˈɯᵝwä wˈä↗ɽˌiäʼˈiçi↗mˈädä.
CycleGAN-VC2には、委員長の雑談配信の声データをつっこみました。
ffmpegで無音期間で切り取り、
で音声のみ抽出しました。
ffmpegのコマンドは以下を参考にしました。
モデル
上記3つを組み合わせただけです。
くふうポイント
カスタマイズしたIPA(International Phonetic Alphabet)をTacotron2の入力にした
先駆者の神々は日本語のローマ字を入力にしてましたが、あえてIPAにしてみました。
英語で学習済のモデルから転移学習?できなくて泣いた。
IPAにピッチアクセントと母音同士がくっつかないことを表す記号を追加した
カスタマイズしたespeak-ngがこちら。
https://github.com/sujoyu/espeak-ng
加えて、dictsource/ja-extraに以下のテキストを保存します。
.group %
%[ _b
%] _e
音声に文章情報を付加する作業はやりたくなかったので、CycleGAN-VC2を使った
神々、苦労を厭わなすぎて自分には無理だったので、変換機を噛ませました。
Tacotron2はMozilla TTS実装ではなくNVIDIA実装を使った
は自分のカスタマイズの仕方が悪かったのか、15000ステップあたりでLossが跳ねて、そのあとLossがNaNだよエラーを吐くようになってしまったので、諦めました。
10000ステップあたりではMozilla実装のほうがはっきり発音していたので、学習率の調整が必要だったのかもしれません。わかりませんが。
参考になる神記事
感想
さすがにこちらには敵いませんでしたね...