見出し画像

StarGAN-v2で顔変換アプリを作ってみた

はじめに

機械学習技術を利用した「FaceApp」は顔写真や映像を簡単に加工できるアプリ

スクリーンショット 2021-10-15 17.55.41

                                                          [1]FaceApp

昨今、テレビやインターネットなどの各種媒体で「AI」や「DX」と言った言葉をよくみかけるようになりました。これは、インターネットの普及や 5G に代表されるような情報通信技術の発展に伴ってデータが容易に収集できるようになり、AI の根幹技術である機械学習が大きな効果を発揮できるようになってきたためです。

そんな機械学習を使った面白いアプリに「FaceApp」があります。FaceAppは、人の顔の写真や映像を簡単に加工することのできるアプリです。男性の写真から女性のような顔を作り出したり、化粧をしているような加工をしたり、老化や若返りを再現したりと、写真の加工を楽しむことができます。こうした画像の変換は「スタイル変換」と呼ばれ、スタイル変換にはGANsと呼ばれるディープラーニングモデルがよく使用されます。最近ではGANsの一種であるStarGAN v2というモデルが大きな成功を収めています。

それでは、StarGAN v2 とはどういったモデルなのでしょうか。

StarGAN v2 とは

StarGAN v2 は韓国の Naver 社 Clova AI Rsearch チームによって提案されたスタイル変換モデルで、ベースモデルには GANs の一種である StarGAN と呼ばれるモデルが使用されています。

GANs とは

GとDが競い合うことで教師なし学習で画像生成するモデル

それでは、そもそも GANs がどのようにしてハイクオリティな画像を生成しているのかを簡単に解説していきます。GANs は Generator(G)、Discrimiantor(D)と呼ばれる 2 種類のディープラーニングモデルで構成されます。GANs は経済学や社会学、自然科学などの分野でみられる「ゲーム理論」に従って、G と D が競い合うことでターゲットに近い画像を生成していきます。GANs の概念図は以下の通りです。

スクリーンショット 2021-10-15 18.00.37

                                                    [2]GANs概念図        

G は入力として、人工的に作られたデータ分布 𝑃𝑧(𝑧) からサンプリングされたノイズ 𝑧 を受け取り、画像を生成していきます。一般的に、人工データ分布として平均 0、標準偏差 1 の ガウシアン分布 𝑁[0,1] が使用されています。このようにして G が生成した画像を fake 画像(𝐺(𝑧))とします。

D は、𝑃𝑑𝑎𝑡𝑎(𝑥) の分布に従う訓練データからサンプリングしてきた real 画像(𝑥)か fake 画像(𝐺(𝑧))を入力として受け取ります。D はその入力が、real 画像なのか fake 画像なのかの真偽判定をします。

G は、D が誤って real 画像と判定してしまうような巧妙な fake 画像を生成するすように訓練されます。D は、G に騙されないように、正確に真偽を判定するように訓練されます。このようにして、D と G が競い合うことで、GANs は教師なしでハイクオリティーな画像を生成することができます。

StarGAN とは

アーキテクチャ
StarGAN は上記の GANs の概念を拡張して、単一の G と D を使用して複数のドメイン間で画像のスタイルを変換することに成功したモデルです。このモデルも Clova AI Rsearch チームらによって提案されました。

スクリーンショット 2021-10-15 18.00.56

 [3]StarGAN: Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation

StarGAN のアーキテクチャは非常に単純で、通常の GANs 同様に G と D の 2 つのモジュールで構成されます。ただ、G、D のそれぞれのタスクに変更点があります。StarGAN のアーキテクチャは非常に単純で、通常の GANs 同様に G と D の 2 つのモジュールで構成されます。ただ、G、D のそれぞれのタスクに変更点があります。

    1. D は real/fake の判定以外に、入力された画像のドメイン(クラスラベル)を予測します
    2. G は入力としてノイズではなく、画像とドメイン情報(クラスラベル)を受け取り、受け取ったドメインに入力画像を変換します

G の入力にドメイン情報を追加することで、明示的にターゲットドメインへのスタイル変換が可能となり、また、D のドメイン予測タスクによって生成された画像に正しくドメイン情報が含まれているのか評価することができます。

日本語で GANs は「敵対的生成ネットワーク」と呼ばれますが、StarGAN では「敵対」というよりも、D がドメイン予測タスクによって G のスタイル変換をサポートするイメージです。D が適切にドメイン予測できないということは、それだけ生成画像にドメイン情報が含まれていないということになるので、誤差逆伝搬で G の学習パラメータを適切に更新できますよね。

スタイルの一貫性について

例)「高齢」という情報を保ったまま、男性の顔画像を女性の顔画像に変換できる
G にドメイン情報を与えることで、入力画像をターゲットドメインに変換できることが分かりました。ただ、このままでは「スタイルが一貫しない」といった問題が発生します。これがどういった問題なのか少し説明してみます。

例えば、「高齢の男性の顔写真」を入力としてモデルに与えて、男性ドメインから女性ドメインへスタイル変換する場合を考えてみます。この時、単に入力画像と共に女性ドメインの情報を与えるだけでは、モデルは「高齢の女性の顔」ではなく「10 代の女性の顔」を生成したとしても、ターゲットドメインへのスタイル変換が成功したことになります。つまり入力画像が持っていた「高齢」というスタイル情報が変換時に失われ、変換前後でスタイルが一貫しないことになります。

 そこで StarGAN では、Reconstruction Loss を適用することでこの問題を解決しています。具体的には、入力画像をターゲットドメインにスタイル変換した後、その画像を元のドメインにもう一度スタイル変換し、入力画像を再生成することができるかを評価します。

先ほどの例と上記の画像を使って考えると、「高齢の男性の顔」の画像(input image)を女性ドメインに変換します。この時得られた「高齢の女性の顔」っぽい画像(fake image)を今度は男性ドメインへと再変換して「高齢の男性の顔」っぽい画像(reconstructed image)を生成します。この一連の流れで得られた input image と reconstructed image をピクセル単位で比較し類似度を評価することで、スタイルの一貫性を保証します。厳密には、ピクセル単位の差分の l1 ノルムを求めて、これを最小化するようにモデルを学習していきます。

StarGAN-v2 での変更点

StarGAN-v2 では、アーキテクチャが大幅に変更されています。

Framework
𝑋,𝑌 をそれぞれ画像とドメインそれぞれの集合とする。我々の目標はある 𝑥∈𝑋 が与えられたときに任意の 𝑦∈𝑌 について、 𝑥 に対応したドメイン 𝑦 の多様な画像を生成できるな一つのgenerator 𝐺 を学習させることです。ドメイン特有のスタイルベクトルを生成し、それを反映させるよう 𝐺 に学習させます。 以下の図は、Frameworkの全体像を示しています。

スクリーンショット 2021-10-15 18.01.10

               [4]StarGAN v2: Diverse Image Synthesis for Multiple Domains 

Generator
Generator では、入力画像 𝑥∈𝑋 をドメイン特有のスタイル情報 𝑠 を反映した出力画像 𝐺(𝑥,𝑠) に変換しています。スタイル情報 𝑠 は Mapping Network 𝐹 とStyle Encoder 𝐸 によって生成されます。また、 𝑠 を 𝐺 に導入するのに AdaIN が用いられています。AdaINに興味がある方は、こちらを参照してみてください。

Mapping Network
潜在変数 𝑧 とドメイン 𝑦∈𝑌 を与えることで Mapping Netowrok 𝐹 はスタイル情報s=Fy(z) を出力します。 𝐹 はすべてのドメインのスタイル情報を作る出力ブランチを持つ多層パーセプトロンで構成されます。 𝐹 は潜在ベクトル 𝑧 と 𝑦 によって多様なスタイル情報を出力する。 Style Encoder 画像 𝑥 と対応するドメイン 𝑦 を与えるとEncoder 𝐸 は 𝑥 のスタイル情報s=Ey(𝑥) を出力します。

Discriminator
Discriminator 𝐷 は複数の出力ブランチを持つマルチタスク判別器です。それぞれのブランチ 𝐷𝑦 では入力画像 𝑥 がドメイン 𝑦 の本物画像か 𝐺 による生成画像かについての二値分類を学習します。
  
Training Objects
画像 𝑥∈𝑋 とそのドメイン 𝑦∈𝑌 が与えられたときに、以下の目的関数を最適化します。

Adversarial objective
潜在変数 𝑧∈𝑍 とターゲットドメイン 𝑦̃ ∈𝑌 を決めて、スタイル情報 𝑠̃ =𝐹𝑦̃ (𝑧) を生成します。 𝐺 は 𝑥 と 𝑠̃ を入力として受け取り、以下のロス関数を通じて画像 𝐺(𝑥,𝑠̃ ) の生成を学習していきます。

スクリーンショット 2021-10-15 18.29.42

Style reconstruction
画像 𝐺(𝑥,𝑠̃ ) を生成するときに 𝐺 が 𝑠̃ を利用できるようにするために、以下のロス関数を導入します。

スクリーンショット 2021-10-16 14.58.31

Style diversification
さらに 𝐺 が多様な画像を生成できるように以下のロス関数で 𝐺 を正規化します。

スクリーンショット 2021-10-16 14.58.48

ターゲットのスタイル情報 𝑠̃1,𝑠̃2 は 𝐹 によって、2つの潜在変数 𝑧1,𝑧2 を条件として生成されます。

Preserving source characteristics
生成画像 𝐺(𝑥,𝑠̃ ) が適切に入力画像のドメイン間で不変の特徴(姿勢等)を保持することを保証するため、以下のロス関数を利用します。

スクリーンショット 2021-10-16 14.59.01

Full objective
全体のロス関数の最適化は以下のように定義されます。

スクリーンショット 2021-10-16 14.59.17

上式の 𝜆𝑠𝑡𝑦,𝜆𝑑𝑠,𝜆𝑐𝑦𝑐 はそれぞれの目的関数についてのハイパーパラメータです。

StarGAN-v2 によるスタイル変換

ここまで、StarGAN-v2 について説明してきましたが実際にどう言ったスタイル変換できるのでしょうか。StarGAN-v2 では、2 パターンのスタイル変換ができます。

    1.  潜在変数を入力として、mapping network を用いた多様なスタイル変換
    2.  ターゲットドメインの画像を入力として、style encoder を用いたスタイルミキシング

1. Mapping network によるスタイル変換

スクリーンショット 2021-10-16 15.03.58

      [4]StarGAN v2: Diverse Image Synthesis for Multiple Domains  Fig.1

Mapping network を使用することで、潜在変数から上図のように多様なスタイルの変換に成功しています。生成画像のスタイルの変換は非常に簡単で、mapping network に入力する潜在変数を変更するだけです。入力画像を変更しても、同一の潜在変数を使用すると同じようなスタイルの画像を生成できていることが確認できます。

2. Style encoder によるスタイルミキシング

スクリーンショット 2021-10-16 15.04.12

      [4]StarGAN v2: Diverse Image Synthesis for Multiple Domains  Fig.4

Style encoder を用いてターゲット画像のスタイル情報を抽出することで、入力画像とのスタイルミキシングが可能です。入力画像によらず、違和感なくスタイルミキシングできていますね。

人間顔画像→アニメ顔画像モデルを作ってみた

実際に、StarGAN-v2のアーキテクチャを用いて、入力された人間顔画像をアニメ画像へ変換するモデルを作成してみました。男性キャラのアニメ画像データセットを見つけることができなかったため、女性アニメキャラのデータセットとCelebA-HQから女性のみ抽出したデータセットを用いてモデル学習を行っています。

今回は公式実装(男性⇄女性変換)を基にして、人間⇄アニメの変換がうまくいくように試行しました。まず用意できたアニメ画像のデータセットは顔の輪郭部分に加え首元や肩の部分まで含まれているものが多かったので、周囲を切り取り人間の画像データセットと顔の位置が一致するように調整しました。またいくつかのハイパーパラメータ、特にロス関数の係数λを調整することでよりクオリティの高い画像を出力できるようにしました。

最終的に我々の実装では、lambda_ds=2にすることで改善が見られました。さらにカラー画像での出力では、色の多様性を重視しすぎて生成画像のクオリティがなかなか上がらなかったので、白黒画像での出力を目指しました。
学習済みモデルを使用して得られたサンプル画像は以下になります。

スクリーンショット 2021-10-16 15.04.38

     (右: CelebA-HQの画像サンプル, 左:生成画像)

生成サンプルを見ると、人間の髪型や輪郭等の大まかな特徴を捉えたアニメ画像が生成されていることがわかります。一方、人間の目や鼻等の細かい情報は、生成したアニメ画像には反映されていないことがわかります。

これは、人間画像とアニメ画像では目や鼻の形状・大きさが大きく異なるため、人間の特徴に近いような特徴(小さい目や大きな鼻)を持ったアニメ画像を生成してしまうとアニメ画像としては不自然なものとなり、簡単にDiscriminatorに偽物画像だと見破られてしまうためではないかと考えています。人間の細かい特徴まで反映した自然なアニメ画像を生成するには今回のStarGAN-v2のアーキテクチャでは実現が難しいのかもしれません。今後もGAN関連の論文調査して良さそうなモデルがありましたら、また記事としてご紹介していきます。

作成した顔画像変換アプリについて

今回作成した訓練済みモデルをWebアプリとして実装しましたので、実際に操作してどのような画像が生成されるのか試してみていただければと思います。URLはこちらです。

顔画像変換アプリの操作手順

    1.  「画像を選ぶ」をクリックし、変換したい画像(女性顔画像)を選択。
    2.  「生成」をクリックし、合成画像を生成する。
    3.  「保存」をクリックし、ローカルに生成画像を保存する。

参考リンク

[1]FaceApp
https://www.faceapp.com/
[2][KerasでGANs 実装] GANs の理論解説 DCGAN vs cGAN
https://trainz.jp/media/learningtoai/175/
[3]StarGAN-v2の論文
https://arxiv.org/abs/1912.01865
[4]StarGAN-v2のソースコード
https://github.com/clovaai/stargan-v2
[5]CelebA-HQデータセットhttps://github.com/tkarras/progressive_growing_of_gans#preparing-datasets-for-training
[6]アニメ画像データセット
https://www.kaggle.com/scribbless/another-anime-face-dataset

採用サイト

エスタイルは、「コウキシンが世界をカクシンする」という理念のもと、企業のDXを推進中です。経験・知識を問わず、さまざまな強みを持ったエンジニアが活躍しています。

「未経験文系からデータサイエンティストへ」
https://www.wantedly.com/companies/estyle/post_articles/299673

弊社では、スキルや経験よりも「データを使ってクライアントに貢献したい」「データ分析から社会を良くしていきたい」という、ご自身がお持ちのビジョンを重視しています。

ご応募・問い合わせはこちら

この記事が気に入ったらサポートをしてみませんか?