1. HOME
  2. ブログ
  3. IT技術
  4. cycleGANで男顔⇄女顔への変換を可能してみた!

cycleGANで男顔⇄女顔への変換を可能してみた!

cycleGANとは?

「cycleGAN」は pix2pix と違い、ペア画像を必要としない、より画期的な「画像 to 画像」の GAN です。

ペア画像とは

ペア画像とは、以下のような画像群のことです。

このように、物体の形状を変えないで、模様や色のみ変化している画像群を「ペア画像」といいます。

pix2pix2による画像変換の学習

pix2pix2 では、ペア画像を用いてカラー変換などを学習していました。

cycleGANによる画像変換の学習

一方、「cycleGAN」ではペア画像を必要とせず、ペアではない画像から画像変換を学習できます

ペアではない画像とは、下図のように、左の列の「風景写真と右の列の「絵画のようなイメージです。

アンペアな画像からの変換

本家「cycleGAN」の論文では、このようなアンペアな訓練画像から「馬⇄シマウマ」や「風景写真⇄絵画」などの変換を可能にしています。

下の図で見てもわかるように、アンペアな画像で学習しているにも関わらず、元の画像の形状をほとんど保っています

ペア画像が必要ないことの有用性

「cycleGAN」は pix2pix と違い、学習にペア画像が必要ないことを理解していだけたかと思います。

では、なぜ「ペア画像が必要ない」ことが有用なのでしょうか?

pix2pixで必要になるもの

例えば、「馬⇄シマウマ」の例で言うと、pix2pixを用いて学習する場合にはペア画像が必要です。

本来は、このペア画像の生成が目的なのに、学習の際にそのペア画像を手に入れる必要が出てくるため、通常の GAN などでは学習自体ができません。

cycleGANが必要とされる理由

このように、実際の画像変換タスクでは、変換先のデータが存在しないケースが数多くあります。

むしろ、ペア画像が学習データとして揃っている方が「稀」です。

だからこそ、ペア画像を必要としない「cycleGAN」が画像変換タスクでは必要とされてきたのです。

cycleGANの仕組み

「cycleGAN」は、通常の GAN と同様の構造をしていますが、Generator が2つ、Discriminator が2つの合計4つから構成されます。

ここでは、「cycleGAN」の仕組みについて、通常のGANと同じ部分と、「cycleGAN」特有の部分に分けて説明します。

通常のGANによる変換

まず以下が、「cycleGAN」の通常のGANと同じ部分の概略図です。

まずは、通常の GAN と同様に変換した画像に対する Discriminator を騙すように Generator を学習し、Discriminator は騙されないように学習されます。

ここまでは、ただ単に二つの GAN ができているだけです。

cycle性を利用した変換

「cycleGAN」ではここに「cycle 性」を持たせます。

「cycle 性とは以下のように、馬→シマウマ→馬のように変換を行った時、元の画像に近づくというものです。

本家「cycleGAN」では、この cycle-loss に MSE を用いています。

これがあることで、アンペアな画像で学習しても、ペア画像を学習した時のように、変換後の形状をほとんど変えることなく目的とした画像を得ることができます。

identity lossによるcycleGANの改善

また、本家にはない「cycleGAN」の工夫として、「identity loss」による改善を提案します。

例えば、「絵画画像」から「風景画像」への変換を行うとします。

その際、本来は「絵画画像」を入れるところに「風景画像」を入れてしまうと、「cycle性」だけでは、下図の真ん中の列のように色空間がおかしくなることが知られています。

「identity loss」を用いることで、GAN がそれぞれのドメイン間での変換を学習するよう働きかけ、右側の列のような結果を得ることができます。

今回の実験で工夫した点

  1. identity Loss を用いて色空間を安定させる
  2. Discriminator の損失関数を BCE ではなく MSE に変更
  3. BatchSize を 1 で学習
  4. cycle_late の大きさの比較によりより良い画像を生成

これらは、比較実験を行った結果を、次回記事で詳しくご紹介します。

男⇄女への変換実験結果

実験の条件

実験環境Google Colab
学習した画像約3000枚の男女の画像(手作業で集めました)
バッチサイズ1

女→男への変換

まずは、「女→男」への変換を行いました。

左から入力、出力、再構成画像の順番です。

変換結果を見て

思わず「おお!!」と叫んでしまいました。

顔つきも、確かに男性っぽく変換されていますね。

特に驚きなのは、女性特有の長い髪の毛が、男性に変換されたことによって短くなり、その背景部分を補完しているという結果です。

それに、変換によってヒゲが生えていることもGANが女性らしさ、男性らしさを学習している証拠ではないかと考えます。

再構成画像も、少々ぼやけていたり字が消えたりしていますが、しっかり元の女性らしく変換されています。

「cycleGAN」の実力恐るべしです!

男→女への変換

続いて、「男→女」への変換を行いました。

変換結果を見て

こちらは先ほどと逆で、短い髪の毛が生えていたり、ヒゲが消えていることがわかります。

結果で「男→女」への変換で精度が高いものが多かったのは、きっと髪の毛を伸ばすだけで良かったからだと思います。

「女→男」への変換では、消した髪の毛の分を背景で補完する必要があります。

しかし、「男→女」への変換では、髪色で塗りつぶせばいいので簡単なのかもしれません。

また、先程の場合もそうでしたが、再構成結果が元画像の形状を維持しているのはすごいですね。

生成画像の画質も悪くないため、「本物の女性」と見間違えてしまいそうです。

まとめ

今回の「cycleGAN」の実験は、2週間ほど時間をかけて工夫に工夫を凝らした結果なので、これだけ成果が出るのは単純に嬉しいです。

結果が出ると、機械学習を勉強するモチベーションになりますね。

次回は、本記事では説明できなかった工夫の部分をまとめますので、そちらもご覧ください!!

その次は、「cycleGAN」の発展系の「starGAN」を試してみようかなと思ってます。

ありがとうございました!!

機械学習での開発依頼・お見積もりはこちらまでお願いします。
また、(株)ライトコードでは機械学習系エンジニアを積極採用中です!詳しくはこちらをご覧ください。

こちらの記事もオススメ!


ソースコード(Github)

今回使ったソースコードは、gitに保存していますのでご覧ください。

【ソースコード:Github】
https://github.com/rightcode/cycleGAN/

ライトコードよりお知らせ

にゃんこ師匠にゃんこ師匠
システム開発のご相談やご依頼はこちら
ミツオカミツオカ
ライトコードの採用募集はこちら
にゃんこ師匠にゃんこ師匠
社長と一杯飲みながらお話してみたい方はこちら
ミツオカミツオカ
フリーランスエンジニア様の募集はこちら
にゃんこ師匠にゃんこ師匠
その他、お問い合わせはこちら
ミツオカミツオカ
   
お気軽にお問い合わせください!せっかくなので、別の記事もぜひ読んでいって下さいね!

一緒に働いてくれる仲間を募集しております!

ライトコードでは、仲間を募集しております!

当社のモットーは「好きなことを仕事にするエンジニア集団」「エンジニアによるエンジニアのための会社」。エンジニアであるあなたの「やってみたいこと」を全力で応援する会社です。

また、ライトコードは現在、急成長中!だからこそ、あなたにお任せしたいやりがいのあるお仕事は沢山あります。「コアメンバー」として活躍してくれる、あなたからのご応募をお待ちしております!

なお、ご応募の前に、「話しだけ聞いてみたい」「社内の雰囲気を知りたい」という方はこちらをご覧ください。

ライトコードでは一緒に働いていただける方を募集しております!

採用情報はこちら

関連記事