機械学習アルゴリズム「CycleGAN」で若葉を紅葉に変えてみた

このエントリーをはてなブックマークに追加

読書の秋やスポーツの秋。秋といえばいろいろとありますが、紅葉も綺麗な時期になってきました。

何気なく紅葉の画像を挟んでみましたが、じつはAIが作り出した偽物の紅葉なんです。上の画像の元は、こちらの若葉です。

「元々紅葉の画像だったのでは?」と疑うくらい自然に見えるのではないでしょうか。

今回は、この紅葉化AIの仕組み・実際の作成手順をご紹介します。

「CycleGAN」はバラバラなデータでも学習OKな画期的手法

今回のAI開発には「CycleGAN」という手法を使っています。

CycleGANは、GANでスタイル変換を行う手法のひとつです。こちらの手法、画期的なのが「適当なデータでも量さえあれば、いいカンジに変換してくれる」というところ。

GAN
GANは、Generator(生成者)とDiscriminator(判定者)の2つが競合する技法です。Generatorが訓練データに似た画像を生成し、Discriminatorはそれが訓練データか、もしくはGeneratorが生成した画像かを判定します。これが繰り返されることで学習が行われます。
スタイル変換
スタイル変換は、データの外見的特徴の変換を行います。
スタイル変換の例:ゴッホの絵画をモネの画風に変換

これまで主流だった「pix2pix」というスタイル変換手法では、塗り絵のように、輪郭がピッタリ合っているようなペア画像のみ変換可能。

一方、CycleGANは厳密なペアでなくても、柔軟に変換可能な手法です。どれくらい柔軟なのか、学習データセットの一部を見てみます。


左:変換する前のスタイル 右:変換したいスタイル

左:変換する前のスタイル 右:変換したいスタイル

ご覧のように、pix2pixのデータセットは、変換前のスタイルと変換したいスタイルの形状や位置が綺麗に揃っているのに対し、CycleGANは、形状や位置がバラバラであることが一目瞭然です。

左の画像はボケていますし、馬が複数。右の画像はシマウマの顔アップと、とても綺麗なペアとは言えません。

ただ驚くことに、このような適当なデータセットでも、量さえあれば自然な変換が可能。CycleGANすごい…!


学習後のCycleGAN

なぜバラバラなデータの寄せ集めでも上手く変換することができるのか?

簡単にCycleGANの仕組みを紹介します。

緑葉から紅葉に、紅葉から若葉に。サイクルする学習手法で自然な変換を実現するCycleGANの仕組み

CycleGANの精度を実現しているのは、3つの前提(loss)を設定して学習をするという工夫です。少し複雑ですが、ソースコードを読んだ内容を下記に図解します。


※説明を簡略化するために、Discriminatorは省略しています

CycleGANでは、

  • スタイルAからスタイルBに変換するAI(緑葉を紅葉に変換するAI)
  • スタイルBからスタイルAに変換するAI(紅葉を緑葉に変換するAI)

と2種類の変換器を使います。

今回の例では説明のためにそれぞれ、紅葉化AIと緑葉化AIと呼びます。

そして

  1. 元データ(緑葉画像)を紅葉化AIを使って変換した画像は他の紅葉画像(教師データ)と近しいはず
  2. 1. で生まれた紅葉画像を、緑葉化AIで変換した画像は元データと近しいはず
  3. 元データ(緑葉画像)を緑葉化AIを使って変換した画像は元データと近しいはず

という3つの前提があり、AIはこの比較を何回も繰り返し、学習を続けていきます。

ここまで、紅葉化AIのみ解説しましたが、実際には学習の過程で緑葉化AIも同時にできあがっています。


紅葉から若葉に変換した画像

緑葉画像を紅葉化、そしてできあがった画像をまた緑葉化。さらに元データを緑葉化して……といったように、くるくるサイクルするのがこの手法名の由来です。

このような学習を繰り返しすることで、画像内の「どの部分を変換すべきか」「どの部分を変換すべきでないか」が学習されていきます。

今回の場合では「緑色の部分だけを、赤色に」「赤色の部分だけを、緑色に」変換してくれるモデルが作れる、ということです。

学習の経過をみると、その様子がよくわかります。


5エポック

50エポック

100エポック

エポック数が増えていけばいくほど、背景の部分はそのままに、緑の部分だけを綺麗に赤くするように成長していきます。100エポック目ではオレンジ色も混ざってきて、さらに自然な画像になっていることがわかります。

材料は、適当なデータとGPUだけ。秋を堪能する紅葉AIレシピ

紅葉AIを作るのに必要なのは、論文の著者のソースコード、GPUインスタンス、適当なデータです。

GPUインスタンスの用意は省略しますが、データセットは下記の条件。

  • 若葉(学習データA):134枚
  • 紅葉(学習データB):179枚

CycleGANの「どこを変換し、どこを変換しないか」学習するという特性上、撮影環境がバラバラ(葉一枚だけ、遠方から撮影した写真など)になるように選定。

また、下記のようなノイズを含む画像も入れています。

  • 後ろに建物が写っている
  • 人の手が写っている
  • 文字の加工が入っている

この条件で100エポックほど学習し、約10時間で紅葉化AIができます。
※ 色や模様の変換なら上手くいきますが、犬から猫といった形状の変化は難しそうです。

クラウドでGPUインスタンスを借りても、使用料は¥1,000ほど。ぜひ皆さんも試してみては?

もうここまで来た。人の目を欺く自然な画像を生成するAIで広がる可能性

AIは「実際まだまだ精度が足りない!」「正直、活用できるレベルじゃない」と思われている側面もあります。

しかし、今回の紅葉化AIの精度をみてもまだ同じ意見を持てるでしょうか?

実際、人工歯のデザインにGANが使われている事例もありますし、人工骨や人工臓器など、医療領域での活用が期待できます。アイディアとそのほかの技術を掛け合わせることで、精度100%ではなくてもさまざま分野でAIの活用が期待できます。

紅葉化AIを作ってわかったことは、“想像するだけでは足りない”ということ。AIを理解して、AIを実際に作ってみる。そうすることでAIの可能性を体感し、さらなるAIの活用法に気がつけます。AI導入のハードルが高くとも、AIで効率化できる部分はないか、検討する。そういった視点が、今後さらに重要になってくるのではないでしょうか。