Fusic Tech Blog

Fusicエンジニアによる技術ブログ

StarGANを用いた多者間の音声変換、StarGAN VC(Voice Conversion)の解説
2024/03/29

StarGANを用いた多者間の音声変換、StarGAN VC(Voice Conversion)の解説

こんにちは、機械学習チームインターンのハンです。前回、CycleGAN VC2を用いた音声変換を行いましたが、今回は、StarGAN VCモデルを用いた音声変換の実験を試してみました。

CycleGAN VCモデルは、1対1関係向けのモデルであり、一人の声を他の一人の声に変換することしか出来ません。しかし、StarGAN VCは、一つのモデルで多対多の音声変換を行いますので、4人の音声データを使用し実験を行ってみました。まず、その結果を聞いてみましょう。

実験設定

  • 4x3(12)個の音声変換の学習が目標

  • 学習データ:JVSコーパ

    • 日本人4人 (男性2人・女性2人)
    • 400個の発話 (4人 x 100個)
  • Batch Size:8

  • Iteration:350,000

実験結果

男性①〜男性② 音声変換

変換前の男性①

変換前の男性②

男性①→男性②

男性②→男性①

女性①〜女性② 音声変換

変換前の女性①

変換前の女性②

女性①→女性②

女性②→女性①

男女間 音声変換

男性①→女性②

女性②→男性①

あるペアに関しては(男性間)音声変換の学習が進んでいる気がしますが、異性間の音声変換は、まだ声の高さが変わるぐらいの性能だと思います。

学習の状況として、約2日間の学習にも関わらず、DiscriminatorとGeneratorはLossの最小化をずっと進めていました。Memoryの問題でBatch Sizeを少なくしましたが、そのため、12種類の変換に十分なSamppingが出来なかったかも知れません。今後、もう少し学習を進めていきたいと思います。

それでは、今回使ったStarGAN VC(Voice Conversion)モデルについて、より詳しく説明したいと思います。


StarGANとは

StarGANは、一つのGeneratorで、複数のDomainに対する多対多変換を実装したGANです。そもそも、イメージ変換の為に作られたもので、下図のよう、人の「表情・性別・髪色などの変換を一つのGeneratorで学習する」素晴らしいモデルです。

image1

一つのモデルで多様な変換学習を行う為、Domainという概念が使われています。

image2

Discriminatorは、イメージがRealかFakeかを判断することと同時に、イメージがどんなDomainに属しているかも判断します。例えば、笑顔の女性のRealイメージに対して、「Realイメージ」であることはもちろん、「笑顔・女性」というDomainまで判断しなければならないです。

これに対して、GeneratorはターゲットDomainに相応しいイメージ変換を行わなければなりません。ただRealイメージを真似するだけではなく、「正しいDomainへの変換」を学習する必要があります。

このように、Domainの概念を投入することで、一つのGeneratorで様々な変換ができるようになります。


StarGAN VC(Voice Conversion)とは

上記したStarGANの構造を採用し、多対多音声変換を実装したのがStarGAN VC①モデルであり、ある人(ソースDomain)の声を、他人(ターゲットDomain)の声に変換します。そのコンセプトは次のようになります。

コンセプト

  • x, y : 音声特徴
  • attribute c : ターゲットDomain
  • G(x,c) : Generator, 音声特徴xをattribute cの音声特徴に変換
  • D(y,c) : Discriminator, attribute cに対して、音声特徴yのReal・Fakeを判断
  • C(c|y) : Domain Classifier, 音声情報yの条件で、相応しいDomainの確率を判断

image3

まず、Real音声特徴を用いて、DiscriminatorとDomain Classifierは、音声特徴がRealかどうか・どんな人(Domain)の声かを学習します。
これに対して、Generatorは

  • Domain Classifierが、ターゲットDomainとして扱えるようなFake音声

  • Discriminatorが、Realとして扱えるようなFake音声

    を生成・学習します。

損失関数

Target Conditional Adversarial Loss Function

GANの基礎になる競争的関係を作る損失関数で、DiscriminatorとGeneratorが関わっています。 DiscriminatorはこのLoss Functionを最大化する学習をする反面、Generatorは最小化の学習を行います。

Classification Loss Function

音声のDomain判断を学習する損失関数で、Domain ClassifierとGeneratorが関わっています。 Domain Classifierは、Real音声特徴から正しいDomain(話し手)判断を学習し、GeneratorはターゲットDomainへの音声変換を学習します。

Cycle-consistency / Identity-mapping Loss Function

音声特徴の一貫性を維持する為に使う損失関数です。 Cycle-consistency Loss Functionは、「変換した声をまた戻した結果が、オリジナル声と似ているか」を調節し、Identity-mapping Loss Functioは、「同一人物への音声変換が学習される時、無駄な変換を行わないよう」に調節します。

Domainの扱い

複数のDomainに対応するモデルを構成する為、Domain情報を扱う必要があります。StarGAN VC①モデルでは、GeneratorとDiscriminatorのCNN構造に次のような工夫を入れています。(Generatorの構造で説明します。)

image4

上図のように、Convolutionプロセスの中にDomain(Attribute)情報が入っています。追加されるのは、DomainのOne-HotベクトルをConvolutionサイズに拡張したChannelで、Channelの数はDomainの数になります(右の図)。このChannelを用いて、ターゲットDomain(変換先)への変換だけを学習するようになっています。


StarGAN VC②

StarGAN VC①モデルで、複数の話し手に対する音声変換が出来るようになります。しかし、実際の音声と音声変換結果にはギャップがあり、以下の2つの工夫を加えたStarGAN VC②モデルが提案されました。

  • ソース、ターゲットDomainを条件とするAdversarial Loss Function
  • Conditional Instance Normalization(CIN)を用いたネットワーク構造

Source-and-target Conditional Adversarial Loss

StarGAN VC①のAdversarial Loss Functionでは、ターゲットDomain(Attribute c、変換先)だけを使用し、ソースDomain(変換する話し手)の情報は使っていませんでした。これについて、論文の著者は以下の問題点を述べています。

損失関数での不平等な条件

image5

比較的に簡単なClassification Lossでの学習

上図の(a)は、Domain Classifierの判断基準(中央の黒線)に対する、Generatorの対応を表しています。

Real音声特徴(丸い点)の分布とは関係なく、黒線から遠く離れているFake音声特徴(三角形の点)が生成できれば、Classification Loss FunctionでのGeneratorの目的は満たされます。

実際に、黒線の周りにもReal音声特徴が存在しているにも関わらず、Generatorは極端な変換を行いながら、損失関数の最適化を行います。

比較的に複雑なAdversarial Lossでの学習

上図の(b)は、Target Conditional Adversarial LossでGeneratorの学習を表しています。

Real音声特徴の分布(左の赤円)に近い、Fake音声特徴の分布(右の赤円)を作り、Discriminatorの判断(中央の黒線)を騙すことがGeneratorの目的です。この学習が上手く進めば、分類しやすい変換だけを行ってしまう、上記①の問題も抑えられると知られています。

しかし、この損失関数での学習は、かなり複雑な問題になっています。なぜなら、ソースDomainによって、Discriminator・Generator学習の難易度が変わるにも関わらず、それをターゲットDomainだけでs最適化しようといるからです。

このような不平等な学習条件のため、ターゲットDomainへの音声変換が難しくなると述べられています。この対策として、Source-and-taget Conditional Adversarial Loss Functionが提案されました。

Source-and-target Conditional Adversarial Loss Function

上の式から分かるように、ソースDomainを表すc`が、DiscriminatorとGeneratorの条件に追加されました。これによって、StarGAN VC②モデルは、(ソース, ターゲット)を条件として学習を行うようになります。既存モデルとは違って、(ソース, ターゲット)を基準でモデルの学習を行い、最適化での複雑さを減少しています。(上の図(c))

Conditional Instance Normaliztaion(CIN)

StarGANのモデルで一番大事なのは、「一つのモデルで多数のDomainに対応する」ことです。StarGAN VC①では、Domain ChannelをConvolutionプロセスに加えていましたが、StarGAN VC②では、Conditional Instance Normalization(CIN)というNormalization層をConvolution層に追加しいます。

CINの理解

CINは、そもそも1対多のイメージ変換の為に作られたものですが、CINの式と活用を見ながら、その概念を理解してみましょう。(詳しくはこの論文を参考してください)

image6

γsとβsは、各ターゲットDomainに相当する学習パラメーターで、入力(x)のスケーリングと移動を行います。Domain特徴によって、各パラメーターは別の最適化を行い、一つの入力(x)に対して様々な出力(z)を生成します。このようにCINは、数少ないパラメーターで、1対多変換学習に対応するというメリットがあります。

image7

また、上の図は、CINを採用したイメージスタイル変換モデルの実験結果で、CINの効果が確認出来ます。

左側の2つのイメージがInputデータを、上側の5つのイメージが真似したいスタイルを表しています。「Inputイメージを5つのスタイルに変換する学習」上手くできていることが分かります。

論文では、ネットワークの中にCIN層を投入することで、

  • 5個のスタイルに対する別々の学習を行わず、
  • Convolution層の重みを共有しながら(イメージ形の維持) 
  • 様々なスタイルの特徴を学習させることができる(イメージ色の変換)

と述べられています。

StarGAN VC②でのCIN

StarGAN VC②のGenerator構造は、CycleGAN VCでも使われていた2-1-2D CNNの構造に、CINを採用した形をしています。上図から、縮約された音声特徴の変換プロセス(9個のResidual Layers)の中にCIN層が入っていることが確認出来ます。これを通じ、入力音声情報の特徴を維持しながら、各Domainへの特徴変換を学習しようとしてます。

StarGAN VC②でCINの学習パラメーターは、γ(c,c′)とβ(c,c′)になります。ソース(c)とターゲット(c`)Domainのペア情報で、Domainペアによる、別の音声変換を求めています。


まとめ

今回は、一つのモデルで、多様な音声変換学習を行う、StarGAN VCを詳しく見てみました。多対多というStarGANの構造も面白いですが、イメージの変換モデルから様々な概念を採用し、音声変換の領域に適用できたことが、個人的には印象的な部分でした。

しばらくは、音声情報を扱う実験を試したいと思いますので、次の記事もお楽しみにして下さい。

Han Beomseok

Han Beomseok

Python, AI Engineering, Natural Language