NNSVS: Pytorchベースの研究用歌声合成ライブラリ

Summary

春が来た 春が来た どこに来た。 山に来た 里に来た、野にも来た。花がさく 花がさく どこにさく。山にさく 里にさく、野にもさく。

NNSVS はなに?

Neural network-based singing voice synthesis library for research

研究用途を目的とした、歌声合成エンジンを作るためのオープンソースのライブラリを作ることを目指したプロジェクトです。このプロジェクトについて、考えていることをまとめておこうと思います。

なぜやるか?

  • NEUTRINO レベルの品質の歌声合成エンジンが作れるのかやってみたかった
  • オープンソースのツールがほぼない分野なので、ツールを作ると誰かの役にも立っていいかなと思った。研究分野が盛り上がると良いですね

というのが理由です。前者の割合が大きく、後者は建前の要素が強いです。要は、できるかどうかがどうしても気になって、気がづいたら熱中していた、という感じです。

研究用途

機械学習や信号処理にある程度明るい人を想定しています。歌声合成技術を使って創作したい人ではなく、どのようにすればより良い歌声合成を作ることができるのか?といった興味を持つ人が主な対象です。

創作活動のために歌声合成の技術を使う場合には、すでに優れたツールがあると思いますので、そちらを使っていただくのがよいと思います1NEUTRINOSynthesizer VCeVIO など

オープンソース

オープンソースであることを重視します。歌声合成ソフトウェアは多くありますが、オープンソースのものは多くありません2。このプロジェクトは僕が趣味として始めたもので、ビジネスにする気はまったくないので3、誰でも自由に使えるようにしたいと思っています。オープンなソフトウェアが、研究分野の一助になることを期待しています。

Pytorchベース

過去に nnmnkwiiという音声合成のためのライブラリを作りました。その際には、任意の数値微分ライブラリと使えるようにと考えて設計しましたが、nnsvsはあえてpytorchに依存した形で作ります。

Pytorchと切り離して設計すると汎用的にしやすい一方で、KaldiESPnet のようなプロジェクトで成功しているレシピというものが作りずらいです。ESPnetに多少関わって、再現性の担保の重要性を身にしみて感じつつあるので、Pytorchベースの学習、推論など、歌声合成のモデルを構築するために必要なすべてをひっくるめたソフトウェアを目指したいと思います。

レシピの提供

再現性を重視します。そのために、KaldiやESPnetの成功に習って、レシピという実験を再現するのに必要なすべてのステップが含まれたスクリプトを提供します。レシピは、データの前処理、特徴量抽出、モデル学習、推論、波形の合成などを含みます。

例えば、このブログのトップに貼った音声サンプルを合成するのに使われたモデルは、公開されているレシピで再現することが可能です。歌声合成エンジンを作るためのありとあらゆるものを透明な形で提供します。

プロジェクトの進め方について

完全に完成してから公開する、というアプローチとは正反対で、構想のみで実態はまったくできていない状態から始めて、進捗を含めてすべてオープンで確認できるような状態で進めます。進捗は https://github.com/r9y9/nnsvs/issues/1 から確認できます。

過去にwavenet vocoderをつくったときにも同じような方法ではじめました。突然知らない人がコメントをくれたりするのがオープンソースの面白いところの一つだと思っているので、この方式で進めます。

現時点の状況

きりたんデータベースを使って、parametric SVS(Sinsyの中身に近いもの)が一通り作れるところまでできました。MusicXMLを入力として、音声波形を出力します。作った歌声合成システムは、time-lagモデル、音素継続長モデル、音響モデルの3つのtrainableなモデルで成り立っています。音楽/言語的特徴量はsinsyで抽出して、音声分析合成にはWORLDを使います。仕組みは、以下の論文の内容に近いです。

  • Y. Hono et al, “Recent Development of the DNN-based Singing Voice Synthesis System — Sinsy,” Proc. of APSIPA, 2017. (PDF)

Mixture density networkは使っていない、ビブラートパラメータを推定していない等、違いはたくさんあります。現時点では劣化sinsyといったところですね T.T

開発履歴

2020/04/08 (初期版)

一番最初につくったものです。見事な音痴歌声合成になりました。TTSの仕組みを使うだけでは当然だめでした、というオチです。音響モデルでは対数lf0を予測するようにしました。このころはtime-lagモデルを作っていなくて、phonetic timeingはアノテーションされたデータのものを使っています。

2020/04/26 (本ブログ執筆時点での最新版)

Time-lag, duration, acoustic modelのすべてを一旦実装し終わったバージョンです。lf0の絶対値を予測するのではなく、relativeなlf0を予測するように変えました。phonetic timing はすべて予測されたものを使っています。ひととおりできたにはいいですが、完成度はいまいちというのが正直なところですね

今後の予定

https://github.com/r9y9/nnsvs/issues/1 を随時更新しますが、重要なものをいくつかピップアップします。

  • 音響モデルの強化:特にF0のモデル化が難しい印象で、改善を考えています。いまは本当に適当なCNNをつかっていますが、autoreggresive modelに変えたいと思っています。いくつか選択肢がありますが、WaveNetのようなモデルにする予定です。https://mtg.github.io/singing-synthesis-demos/ 彼らの論文を大いに参考にする予定です。NIIのWangさんのshallow ARモデルを使うもよし。最重要課題で、目下やることリストに入っています
  • 離散F0モデリング: NIIのWangさんの論文が大変参考になりました。音声合成では広く連続F0が使われている印象ですが、離散F0モデリングを試したいと思っています。
  • Transformerなどの強力なモデル: 今年の ICASSP 2020Feed-forward Transformerを使った歌声合成の研究発表がありましたが、近年のnon-autoregressiveモデルの発展はすごいので、同様のアプローチを試してみたいと思っています。製品化は考えないし、どんなにデカくて遅いモデルを使ってもよし
  • ニューラルボコーダ: 音響モデルの改善がある程度できれば、ニューラルボコーダを入れて高品質にできるといいですね。
  • 音楽/言語特徴量の簡略化: 今は450次元くらいの特徴量を使っていますが、https://mtg.github.io/singing-synthesis-demos/ 彼らのグループの研究を見ると、もっとシンプルにできそうに思えてきています。音楽/言語特徴量の抽出は今はsinsyに頼りっきりですが、どこかのタイミングでシンプルにしたいと思っています。
  • Time-lag/duration modelの改善: 現時点ではめっちゃ雑なつくりなので、https://mtg.github.io/singing-synthesis-demos/ 彼らの研究を見習って細部まで詰めたい
  • 音素アライメントツール: きりたんDBの音素アライメントが微妙に不正確なのがあったりします。今のところある程度手修正していますが、自動でやったほうがいいのではと思えてきました。
  • その他データセット: JVSなど。きりたんDBである程度できてからですかね

これまで歌声合成をやってみての所感

歌声合成クッソムズすぎワロタ

新しいことにチャレンジするのはとても楽しいですが、やっぱり難しいですね。離散化F0、autoregressive modelの導入でそれなりの品質に持っていけるという淡い期待をしていますが、さてどうなることやら。地道に頑張って改善していきます。

参考


  1. NEUTRINO並の品質の歌声合成エンジンが作れたらいいなとは思っていますが、まだまだ道のりは長そうです。 ↩︎

  2. http://sinsy.sourceforge.net/ 有名なものにsinsyがありますが、DNNモデルの学習など、すべてがオープンソースなわけではありません ↩︎

  3. 万が一の場合は、察してください… ↩︎

Ryuichi Yamamoto
Ryuichi Yamamoto
Engineer/Researcher

I am a software engineer / researcher passionate about speech synthesis. I love to write code and enjoy open-source collaboration on GitHub. Please feel free to reach out on Twitter and GitHub.

Related