GANで声質変換をしたら衝撃の結果に!?

この記事は、 SYSKEN Advent Calendar 2018 24日目の記事です。

お久しぶりです。てんぷらです。
皆さんはクリスマスイブいかがお過ごしでしょうか。
私は、WSLの設定をしていたらオールしてしまったので眠いです。

本日は、GANを使用して声質変換に挑戦してみた話をしようと思います。

1.GANとは

GANとはGenerative Adversarial Networkの略であり、日本語では敵対的生成ネットワークと呼ばれている、 ニューラルネットワークを用いた機械学習モデルの一つです。
GANは、ある画像群に似た画像を生成したり、画像の着色の自動化する際などに使用されています。

GANの考え方は、よく紙幣の偽造者と警察に例えられます。ですが、この解説方法はネットを探せばたくさん出てくるため、ここでは割愛させていただき、分かりやすく解説されているサイトの紹介に代えさせていただきます。
詳細な解説 : はじめてのGAN

GANは生成ネットワークと、監視ネットワークという二つのネットワークからなっています。
それぞれに違う目的があり、生成ネットワークは「目標となるデータに似せたデータを作る」という目的があり、監視ネットワークは「届いたデータが目標データなのか、生成ネットワークが作成したデータなのか見極める」という目的があります。

学習は以下のような流れで進んでいきます。
(1) 生成ネットワークが目標データに近いデータを生成する
(2) 監視ネットワークが目標データと(1)で生成されたデータを識別する
(3) 生成ネットワークは次こそバレないように、もっと似ているデータを生成する
(4) 識別ネットワークは目標データと(3)で生成されたデータの識別を行うが、先ほどより難しくなっているので、もっと正確にデータの識別を行う
(5) (3)(4)を繰り返し、生成ネットワークは目標データにかなり似たデータを生成できるようになる

互いが高めあっていく事で、学習を進めていくというのは大変面白いですね。

今回はこのGANを使用して、Aさんの声をBさんの声に変換するシステム、すなわち声質変換の作成をしてみました。

2. 音声の前処理

さっそくGANの作成に、といいたいところですが、音声の前処理が必要です。
ここでは、自身のシステムでおこなった音声の前処理について説明します。
システムはPythonで作成しました。

今回の声質変換は以下のようなデータフローで行いました。

システムのデータフロー

MFCC

MFCCは日本語でいうとメル周波数ケプストラム係数で、音声の分野でよく使用されている特徴量です。
PythonではLibROSAというパッケージを使えば簡単に求めることができます。
今回はこれをDTWを行うために使用しました。

DTW

DTWは動的時間伸縮法と呼ばれ、音声以外でも様々な分野に使用されています。
AさんとBさんは、話し方も話すスピードも違うため、同じ文章を読んでいても時間のずれがあります。
これを何とかして、パラレルデータにするのにDTWを使用しました。
DTWもPythonのパッケージで簡単に適用が可能です。
実際にDTWした音声を聞いてみましょう。
Aさんの音声は、nico-opendataで配布されている物を使用しました。
Aさんの元の音声

Aさんの元音声

続いて、目標となるBさんの元の音声

発話の位置などが全然違うのが分かりますね。ではDTW後を聞いてみましょう。

DTW後のAさんの音声

DTW後のBさんの音声

なんとなく揃ってる感じがしませんか?
このようにパラレルデータの作成を行いました。

STFT

STFTは短時間フーリエ変換です。
これもLibROSAで簡単に求めることができます。
当初はMFCCにDTWを適用し、MFCCを逆変換するつもりだったのですが、特徴量から音声への変換は難しいと分かり、MFCCでDTWを行った結果を音声への逆変換が可能なSTFTに適用しました。

real + imag

STFTのデータは複素数になっているので、実部と虚部に分け、それぞれにGANを適用させることにしました。
Pythonは複素数の扱いが簡単で嬉しかったです。

3. 結果

システムの作成過程はこちらで公開しています。
声質変換を行った結果を聞いてみましょう。

声質変換後の音声

!?
これは何だ?

というわけで失敗しました。
正直難しいです。

かんがえられる問題点として、
・batchを設定していない
・畳み込み層がない
という点が考えられます。

今後も開発は進めていくつもりですので、続報があり次第こちらや、自身のQiita等で紹介出来たらと思っています。

4. おわりに

記事をここまで読んでいただきありがとうございます。
学校の名を出しているサイトの記事ということで、著作権や言葉遣いには気を付けたつもりですが、気になる点があればご連絡ください。

SYSKEN Advent Calendarも残すところ後1日!
ラストはCilviaの記事です。お見逃しなく!

参考サイト

はじめてのGAN
nico-opendata
声優統計コーパスをアライメントしてみる | Hiho’s Blog


コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください