機械学習で美少女の合成音声を自作する(改善編)

f:id:shirowanisan:20201228142209p:plain

はじめに

以下で紹介した美少女合成音声の音質改善方法について記述にしようと思います。

shirowanisan.com

ノイズに関して

イヤホンで聞かないとわかりにくいかもしれませんが、上記の記事で紹介した音声は、後ろで「キンキーン」というノイズが入っています。今回の記事では、その「キンキーン」をどうやってなくしたかを記述します。

前提知識:音響モデルとボコーダ

こちらの記事でも記述したように、近年のTTS(Text to Speech。テキストから音声に変換すること)は「テキストからメルスペクトログラム(音声の設計図のようなもの)への変換」のあとに「メルスペクトログラムから音声への変換」を行います。「テキストからメルスペクトログラムへの変換」を行う機械学習モデルを音響モデル。「メルスペクトログラムから音声への変換」を行う機械学習モデルをボコーダと言います。

ノイズの原因

上記の記事の合成音声ではWaveGlowというボコーダを用いてます。

こちらのページでは、各ボコーダから生成された音声を聞くことができます。ページ内のWaveGlowにだけ「キンキーン」ノイズが入っていることが分かると思います。そう、「キンキーン」ノイズの原因はWaveGlowにあったのでした。

ボコーダの変更

音質改善のためにボコーダを変えようと思い、PaeallelWaveGanというボコーダに変更することしました。PaeallelWaveGanのボコーダは、以下のGitHubのコードで作成できます。

GitHub - kan-bayashi/ParallelWaveGAN: Unofficial Parallel WaveGAN (+ MelGAN & Multi-band MelGAN) with Pytorch

ボコーダの変更に伴い音響モデルのコードを変更

上記のPaeallelWaveGanのコードで求めるメルスペクトログラムは、NVIDIAが公開しているTacotron2とメルスペクトログラムの求め方が少し違ったため、メルスペクトログラムを合わせるためにespnetのTacotron2を使うことにしました。

使用したデータセット

音響モデルもボコーダも作成に使用したデータセットは同じです。

パプリックドメイン(著作権なし)の約6800文の男性音声で学習させ、そのモデルを約500文のアニメ風音声で転移学習させて作っています。

前の記事では、日本語のデータセットで学習する前に英語のデータセットで学習させていましたが、espnetのTacotron2に変えたことにより、いきなり日本語で学習させても上手く学習できるようになったため、英語のデータセットを使用することはやめました。

また、こちらの記事では「ボコーダは非話者依存なので、どんなデータセットで学習させたものを使っても良い」みたいなニュアンスのことを記述していましたが、PaeallelWaveGanでは自分で学習させて作ったボコーダの方が品質が良くなったため、上記のデータセットを用いて、自分で作っています。

改善された音声

この仕組みで作成した合成音声はこちらの動画で紹介しています。

さらに「学習に使用していた500文のアニメ風音声」の品質を上げて作り直したものを以下の動画で紹介しました。

最後に、生成された音声を、音声加工ソフト「Audacity」でノイズ除去などの加工を行い、少し音声を綺麗にしたものを以下の動画で紹介しました。

参考文献

[1910.11480] Parallel WaveGAN: A fast waveform generation model based on generative adversarial networks with multi-resolution spectrogram

GitHub - kan-bayashi/ParallelWaveGAN: Unofficial Parallel WaveGAN (+ MelGAN & Multi-band MelGAN) with Pytorch

GitHub - espnet/espnet: End-to-End Speech Processing Toolkit

Audio samples from "HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis"