StarGANを用いた髪色変換

Introduction

Lento
Lento
Apr 16, 2018 · 4 min read

今回の目的としてはキャラクターの髪色変換(ex. 黒→白)を行います。このように画像の一部分だけを変化させるようなスタイル変換としてはCycleGAN(論文)等が挙げられますが、問題としては2つのドメイン間しか往復できないことにありました。例えば、髪色を例にとると一つの学習器では黒→白と白→黒だけしか変換出来ません。別の髪色に変換しようとしたら更に学習器が必要となります。そこで、多ドメインを多ドメインへと変換出来るような学習器を用意する必要がありますが、そこで今回検討したのがStarGAN(論文)です。今回はこのStarGANを用いて、キャラクターの髪色を様々な色へと変化させることを行いました。

StarGAN

この記事では、詳細は割愛します。簡潔に述べると、Generatorに今どのドメインへと変化させようとしているか表すベクトルをconcatして加え、Discriminatorにその画像のReal/Fakeを見分けるだけでなく、どのドメインの画像かの分類も同時に行うようにしています。これによって、多ドメインの多ドメインへの変換を一つの学習器によって行うことが可能となります。

出典 : Yunjey Choi, et al., “StarGAN : Unified Generative Adversarial Networks for Multi-Domain Image-to-Image Translation”.

実際に、StarGAN論文でも2つのデータセットを用いて学習させることで髪色の変換だけでなく、表情変換も可能となっています。

Datasets

safebooruからpink_hair, blonde等髪色に関するタグを持つ画像を集めました。その後、白髪、青髪、ピンク髪、金髪、黒髪のキャラクターの画像の顔を切り出し、それぞれ2000枚ずつ用意しました。従って、今回は5つのドメインを5つのドメインへと変化させる事を行います。

Results

まず、訓練データがうまく髪色を変換出来ているか見てみます。285epoch目における様子を以下に示します。

左端の列が元の画像で、左から順に白髪、青髪、金髪、ピンク髪、黒髪へと変換出来ているのが分かります。CycleGANでも見られるような、髪と関係ない背景も色が変換されている様子も確認出来ますが、一旦目的は果たせているとしてテスト用画像を用いて変換を行ってみます。テスト結果を以下に示します。

という訳で我らが加藤恵に髪色変換を行ってもらいました。白髪が微妙ですが他の色は問題なく出来ていることが分かります(元画像が黒髪というよりは茶髪っぽいのが問題かも….)。どの髪色でも可愛いですね流石加藤恵。

Summary

今回は、StarGANを用いた髪色変換を行いました。5ドメインを5ドメインに変換しましたが、髪色自体はもっと存在するので望めば緑髪、茶髪等への変換もデータを増やせば可能です。

また、StarGAN論文でも述べられているようにベクトルの加算によって新たな髪色を創出することも可能なのではと考えています(訓練データではそういった傾向が見られたのですが、テストデータでは見られなかったので今回の記事では割愛しました)。例えば、青髪を表すベクトルと赤髪を表すベクトルを加算したベクトルをGeneratorに与えることによって、紫髪へと変換出来るのでは、です。

ドメインとしては今回のように髪色だけでなく、論文のように表情だってなり得ます。個人的には加藤恵の髪型を作中よろしく様々に変化させてみたいですね。

最後になりますが、ご指摘等ありましたら遠慮無くお願いします。

Environment

OS : Ubuntu 16.04 LTS (64-bit) CPU : Intel(R) Core(TM) i5–4590 CPU @ 3.30 GHZ GPU : NVIDIA GTX970 メモリ : 8GB

Lento

Written by

Lento

Kawaii makes world accelerate