Slide 1

Slide 1 text

リアルタイムボイスチェンジャーMMVCとVITSの紹介 NSEG #106 2022/6/25 さとうきよし @stealthinu

Slide 2

Slide 2 text

MMVCとVITS ひとことで言うと 「MMVC」はオープンソースのリアルタイムボイスチェンジャー 「VITS」はディープラーニングを用いたTTS音声生成エンジン 2

Slide 3

Slide 3 text

つまりMMVCを簡単に言うと 声の「バ美肉」 ができるツールなのです なので… 3

Slide 4

Slide 4 text

今日はリアルタイム音声変換でプレゼンします! 「すんだもん」の声でお届けします 4

Slide 5

Slide 5 text

あらためて「MMVC」とは オープンソースのリアルタイム音声変換ツール 「簡単」「だれでも」「好きな声に」「リアルタイムで」 マイクからの音声をそれほど遅延なく好きな声に変換できる MMVC_Trainer https://github.com/isletennos/MMVC_Trainer 5

Slide 6

Slide 6 text

システム構成 学習部分 (MMVC_Trainer) 主に Google Colab 上で動かすことを想定 クライアント部分 (MMVC_Client) 主に Windows PC 上で動かすことを想定 にわかれています 6

Slide 7

Slide 7 text

学習が必要 自分の音声と変換したい音声で学習が必要 ディープラーニングにより声質を学習する 学習済みデータをベースに追加で学習させる ディープラーニングではよく大量のデータと学習が必要になる 学習させるの大変では? 7

Slide 8

Slide 8 text

音声データ量と学習量 自分の音声と変換したい音声が100文程度必要 2時間くらいあれば十分作成できる 5000回程でもそこそこ変換できる 5000回だとColabで3時間もあれば学習できる 変換したい音声サンプルで「ずんだもん」が使える ずんだもんは324文 結構手軽にできる! 8

Slide 9

Slide 9 text

リアルタイム音声変換 MMVCの最大のウリはやはり「リアルタイム音声変換」 現在代表的なリアルタイム音声変換ツールはない VOICEBOX / Seiren Voice リアルタイム性ではなく高音質のほうへ 今後リアルタイム変換も対応する? 七色ニーナ リアルタイム変換はたぶん現在開発中? Voidol 軽くて高速だが変換しにくい声とかあるらしい 9

Slide 10

Slide 10 text

Colab上で動かすコンセプトが新しい Colabだけでワンストップでデータ作成から学習まで行える Colab上でWebアプリケーションを提供されている感覚 でかいGPU積んだPCなくても利用できる Colabで起きた「ディープラーニングの民主化」がアプリケーションまで下りてきた感 まさに「簡単」「だれでも」「好きな声に」 10

Slide 11

Slide 11 text

学習や音声変換にはVITSを利用 学習や音声変換のエンジンはほぼVITSのものを使用 下記がMMVCで提供されている部分 リアルタイム変換 Windows実行ファイル化 Colabのノート 日本語コーパス学習済みデータ提供 学習の日本語対応 Discordによるユーザグループ VITSはすごいがエンジンだけでは動けない 11

Slide 12

Slide 12 text

VITSとは 2021/6に発表された高速高品質の End to End Text to Speach (TTS) 手法 Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text- to-Speech https://arxiv.org/abs/2106.06103 VITSの公式実装 https://github.com/jaywalnut310/vits 12

Slide 13

Slide 13 text

VITSの特徴 テキストから音声を生成するものだが音声変換もできる 高品質で比較的高速に生成ができる 話者毎に特徴量を学習するため任意の音声で生成できる ディープラーニング以外はほぼつかわないE2Eモデルだがだいぶ複雑 VAE/GAN/Flowと3つの生成モデルを使っている 特にFlowの利用の仕方が頭いい! 13

Slide 14

Slide 14 text

VITSの詳細説明 この後VITSにつて詳細内容します が、ほぼ下記zassou65535氏が書かれている内容を説明してるだけです 【機械学習】VITSでアニメ声へ変換できるボイスチェンジャー&読み上げ器を作った話 https://qiita.com/zassou65535/items/00d7d5562711b89689a8#stochastic-duration- predictor なので詳細気になった方は上記のページを読んでいただけるとわかりやすいです 14

Slide 15

Slide 15 text

VITSの構成図 VAEのエンコーダーで音の特徴 量抽出 VAEとGANで音声生成の学習 VAEのデコーダーで特徴量から 音声生成 Flowで話者と音素ごとの特徴量 抽出と学習 Transformerで文の特徴量抽出 Monotonic Alignmentで音素長 を推定する だいぶ複雑… 15

Slide 16

Slide 16 text

GAN / VAE / Flow の概念図 16

Slide 17

Slide 17 text

VAEとは Auto Encoder Autoencoderとは入力と出力が同じになるように学習する Encoderで一旦小さい潜在変数Zへと変換される それを元にDecoderで復元 潜在変数Zは声を抽象化し圧縮されたものと考えられる VAE (Variational Auto Encoder) VAEでZを正規分布の平均と分散行列に変換して制約をつけている 17

Slide 18

Slide 18 text

VITSのVAE VAEでスペクトログラムから直 接wavを生成 生成したwavを再度スペクトロ グラムにして誤差を算出 スペクトログラムのチャンネル を時間方向にconv1dしてる Zから最小時間単位でチャンネル 方向にtranspose_conv1dしてwav に戻す 18

Slide 19

Slide 19 text

GANとは Generative Adversarial Networks (敵対的生成ネットワーク) 生成器(Generator)と識別器(Discriminator)の独立した2ニューラルネットで構成 生成器が生成したものを識別器が本物(教師データ)か判別する 生成器は見破られないように、識別機は見破るように学習していく StyleGANでは生成器にスタイル情報を埋め込んで生成できる 19

Slide 20

Slide 20 text

VITSのVAEとGANの学 習方法 VAEとGANの(だけじゃなくFlow やText Encoderなど)全部の誤差 を足す 全部のロスが減るように学習 20

Slide 21

Slide 21 text

Flowとは 可逆変換ができるニューラルネットワーク VAEではエンコーダとデコーダの両方の学習が必要だがFlowは片方だけでよい 簡単な変換をする逆変換可能な関数Fnを準備する 変換を多数重ねることで複雑な変換が可能になる 逆変換可能なので逆変換を重ね合わせれば複雑な逆変換も可能 ここで関数Fnは逆変換可能なように工夫されたニューラルネットなどを使う 21

Slide 22

Slide 22 text

VITSのFlowとText Encoder部がやってる こと 音声がどの音素にあたるものか を抽出する 音素の長さの持続時間の推定す る Flowは話者と音素毎の特徴を学 習する 22

Slide 23

Slide 23 text

Flowで話者の特徴を学習している VITSはFlowで話者の特注を学習しているところがすごく面白い! 話者毎の音素毎の特徴量変換をFlowが学習してくれる Flowを通すと話者の特徴量をなるべく排した特徴量が得られる Flow逆変換することで変換したい音声の特徴量を「乗せる」ことができる つまりFlowで変換と逆変換すると自分の声を別の声に変換できる! 23

Slide 24

Slide 24 text

VITSの音声変換概念図 特徴量Zを算出 FlowでZから話者の特徴を排除 Flow逆変換で変換先話者の特徴 を乗せる 変換先話者の乗ったZを得る Zから音声生成 24

Slide 25

Slide 25 text

今後の目標 無学習または小データと短い学習での変換を可能に たくさん学習データを作ったり学習時間がかかるのがハードル 無学習での変換ができるとだいぶ応用が広がる 変換の高品質化 VITSは元々TTSのために作られていて変換だけを目的に作られてるわけじゃない だから変換特化で高品質化できるのでは 低遅延化 VITSの場合音素情報まで落とし込まないので原理的に遅延は少ない 0.2秒以下の遅延にできたらよいが クライアントのネイティブ化 Nuitkaのexeはでかすぎる VOICEBOXではONNX使ってネイティブで動くようになってる 25

Slide 26

Slide 26 text

まとめ MMVCのリアルタイム音声変換はたのしい MMVCは誰でもColab上で好きな音声を学習させれるのがすごい VITSはFlowの使い方が頭良くてとてもすばらしい 26

Slide 27

Slide 27 text

※参考資料 音声変換自体の概要については DeNA目線で見る 音声変換の最先端 - Qiita https://qiita.com/Kohki_Mametani/items/03d863486dd3d806c69c 音声変換についての技術が超まとまっててまずはこれを読むべき 27

Slide 28

Slide 28 text

※参考資料 VITSの詳細について理解するには 【機械学習】VITSでアニメ声へ変換できるボイスチェンジャー&読み上げ器を作った話 - Qiita https://qiita.com/zassou65535/items/00d7d5562711b89689a8#stochastic-duration- predictor 概要をつかむのにすごくよくて独自実装のソースは本家ソース読むよりわかりやすい VITSの紹介と解説 https://docs.google.com/presentation/d/19GNmEBcshf71ED5zRh8I8oIL5uAE0d- tJL1mlnR_4cw プレゼン資料だが内容の説明がめちゃくちゃ詳しくてよい 28

Slide 29

Slide 29 text

※参考資料 Flowについて理解するには 深層生成モデルを巡る旅(1): Flowベース生成モデル https://qiita.com/shionhonda/items/0fb7f91a150dff604cc5 Flowはあんまり情報なくてここのエントリがとてもわかりやすくてありがたかった 他のVAEやGANについての解説エントリもありこちらもとてもおすすめ 29

Slide 30

Slide 30 text

図の引用元 Conditional Variational Autoencoder with Adversarial Learning for End-to-End Text- to-Speech https://arxiv.org/abs/2106.06103 Flow-based Deep Generative Models | Lil'Log https://lilianweng.github.io/posts/2018-10-13-flow-models/ 【機械学習】VITSでアニメ声へ変換できるボイスチェンジャー&読み上げ器を作っ た話 - Qiita https://qiita.com/zassou65535/items/00d7d5562711b89689a8#stochastic- duration-predictor 30