FURYU Tech Blog - フリュー株式会社

フリュー株式会社の開発者が技術情報を発信するブログです。

CycleGANでプリ画と逆プリ作ってみた

はじめまして。ガールズ総合研究所リサーチ部システム課の富士谷です。まだギリギリ新卒2年目です。

普段は、プリントシール(以下、プリ)機のビジネスに関わる情報収集システムの構築・運用をしています。

日夜、GIRLSをHAPPYにするにはどうするかを考えていて、たまに、画像処理関係の情報収集を行っています。

ちなみに、女子高生ミスコンの平均顔を作成する実装には私が関わりました。

さて、社内では、主にエンジニアが技術について発表する「技術交流会」というイベントがあるのですが、

そこで話した内容を抜粋し、プリ機の処理を真似られるか、CycleGANを使って試してみた話をご紹介したいと思います。

はじめに

プリといえば、何と言っても、その画像処理ですよね。

この画像処理の目的を端的に言えば、「画像の顔などを加工することにより、本人にとってより”好ましい”画像(いわゆる「盛れてる」画像)への変換を行うこと」と言えるのではないかと思っています。

画風変換に近いとも言えそうですが、個々人の感性に合う必要があるというのが難しいところですね。

さて、最近のディープラーニング、特に、GAN(Generative Adversarial Network)を使った画像生成は、ときには人を騙せるくらい、高精度に行えるようになってきています。

例えば、個人的に気になってるのは次のような技術です。

PGGAN (日本語での報道「どこかにいそうなセレブ」の顔、AIで生成– NVIDIAが実現

Bringing Portraits to Life

GANを使えば、プリの画像も生成(模倣)できる可能性があります。

もし、ディープラーニングを使ってプリの画像処理を真似することができれば、プリ機で利用している画像処理の要素要素に、色々と応用が効きそうですね。

 CycleGAN

CycleGANは、2017年に公開された、画像を異なる画像に”変換”(Translation)する手法です。

この手法より少し前に公開されたpix2pixと合わせて、pytorchによる実装も公開されていて、今回はこれを利用しました。

pytorch-CycleGAN-and-pix2pix

手法の詳細な解説は他に譲りますが、CycleGANの応用例は、プロジェクトサイトでも紹介されていて、「試してみた」レポートは日本語でもいくつかあります。

プリの場合、変換元と変換先で対応付けて画像を作成できるため、pix2pixでも良かったのですが、デフォルトのパラメータで簡単に試した限りでは、あまり精度が良くなかったためCycleGANを利用しました。

ニセプリと逆プリを作る

CycleGANを使って、プリ機の加工と、プリ画から元の画像(原画)への変換を学習してみたいと思います。

CycleGANで原画から生成したプリ画(fakeなプリ画)を「ニセプリ」、プリ画から生成した原画(fakeな原画)を「逆プリ」と呼ぼうと思います。

もしも、ニセプリをうまく生成することができれば、データセット次第ではあるものの、プリ画の作成に機械学習が役立つでしょう。

もしも、逆プリがうまくできれば、例えば、「化粧シミュレーター」アプリで、撮影者がしている化粧をキャンセルし、より自然な化粧をした画像の作成に役立つのではないかと思っています。

CycleGANを利用するにあたり、まずは、データセットを作ります。

画像に落書きや背景のコンテンツがあるとうまく学習できない可能性があるため、落書きなし・背景なしのプリ画を作成します。

プリ機の開発に利用するために許諾を得た約2500枚程度の原画を元に、あるプリ機の処理を使って落書きなし・背景なしのプリ画を作成しました。

また、プリと言えば顔の加工ですよね。まずはこの、顔の加工が学習できるのか見るために、

プリ画から顔のみを個別に切り出し、回転・縮小拡大により、顔の大きさと位置を整えた、原画とプリ画を約4000組準備しました。

これを元に、CycleGANで学習させて、別に撮影したモデル画像をテスト画像として、原画からプリ画を生成してみました。

今回は、その中から、公開について特別に許諾を得た、1人の画像をご紹介したいと思います。(ご協力ありがとうございます!)

その結果は以下のとおりです。

片方は本物の原画から本物のプリの処理を使って作成したプリ画です。

もう片方は、本物の原画からCycleGANによって生成したニセプリです。

みなさんどっちがニセプリかわかりますか?

正解は、向かって左側が本物、右側がニセプリです。

CycleGANでは、原画→プリ画のニセプリ変換だけではなく、プリ画→原画の変換(逆プリ)も同時に学習できるので、これも試してみました。

結果は次のとおりです。

向かって左側が本物、右側が逆プリです。

わかりにくいのでGIFにしました。(変換により画像は粗めです)

こうやってみると、質感・色味・明るさ変換・変形、背景切り出し等々、プリの様々な加工を学習していますが、プリほど高精度にはできてないことがわかります。

特に、ニセプリの方は若干変形が甘く、ややぼやけた画像になってしまっています。

(変形にはおそらくLossのL1距離が効いているように思うのですが、あまり実験できていません)

「ニセプリで女子高生を騙せるのか」といったような定量的な計測はできていませんが、社内の女性に聞いてみたところ、どっちが本物でどっちが偽物かがわかるようです。

「かなりいい線いってる」と私は思っていましたが、やはり見る人が見ればわかるようで、まだまだ、GANのDiscriminatorより、人のほうが精度高いようですね。

一方、逆プリは、変形で戻しきれておらず、また、肌が復元できていないようで、のっぺりした印象を持ちます。

とはいえ、ある程度自然な?逆プリが作れているのではないかと思います(データセットに含まれるプリ機限定ですが)。

まとめ

CycleGANでは、馬をシマウマにするのは容易で、犬を猫にするのは変形が必要なため苦手だと言われますが、学習途中の画像を見ると、この程度の変形であれば、じわじわ学習していくようです(結構驚きでした)。

精度や画像サイズ(画素数)の課題により、プリ機へのCycleGANの直接的な応用は難しそうですが、今後のディープラーニングの発展にも期待できる結果ではないかと思っています。

ディープラーニングに限らず新たな技術を上手く活用することで、女性の多様化・高度化する好みに応えられるのではないかと考えているので、GIRLSをHAPPYにするための情報収集や実装は今後も全力でやっていきたいです。

最後に

弊社では、プリに関わりたい方、スマホアプリを作りたいという方、女性をHAPPYにするため技術力を発揮したい方を募集しています。

詳細は以下のページを御覧ください。

 

※ 会社名、製品名、サービス名等は、それぞれ各社の商標または登録商標です。