Table of Contents
StarGANとは
StarGANは、一つのGeneratorで、複数のDomainに対する多対多変換を実装したGANです。そもそも、イメージ変換の為に作られたもので、下図のよう、人の「表情・性別・髪色などの変換を一つのGeneratorで学習する」素晴らしいモデルです。
一つのモデルで多様な変換学習を行う為、Domainという概念が使われています。
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の確率を判断
まず、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の構造で説明します。)
上図のように、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(変換する話し手)の情報は使っていませんでした。これについて、論文の著者は以下の問題点を述べています。
損失関数での不平等な条件
比較的に簡単な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の式と活用を見ながら、その概念を理解してみましょう。(詳しくはこの論文を参考してください)
γsとβsは、各ターゲットDomainに相当する学習パラメーターで、入力(x)のスケーリングと移動を行います。Domain特徴によって、各パラメーターは別の最適化を行い、一つの入力(x)に対して様々な出力(z)を生成します。このようにCINは、数少ないパラメーターで、1対多変換学習に対応するというメリットがあります。
また、上の図は、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
Python, AI Engineering, Natural Language