読者です 読者をやめる 読者になる 読者になる

pixivのイラストで機械学習したらどうなるのっと ~pix2pixで自動彩色編~

この記事は、ピクシブ株式会社 Advent Calendar 2016 の17日目の記事です。

qiita.com

おはようございます。プログラマーのhakatashiです。普段はpixivコミックの開発をひっそりと手伝っていますが、今回もそれとは全く関係ない話をします。

前回の記事では、pixivに投稿された小説のデータを使用して機械学習を行いました。今回は引き続いて、最近発表されたpix2pixというライブラリで軽く遊んでみたので、簡単に紹介します。

pix2pixとは

pix2pixとは、11月下旬に発表された論文「Image-to-Image Translation with Conditional Adversarial Networks」で提案された機械学習のモデル、および論文と同時に発表された実装の名称です。論文を発表した Phillip Isola らはUCバークレーの人工知能研究所の研究者であり、彼らの研究所は10月にファーウェイとの産学連携を発表したばかりで、AI研究の分野においてなにやら急進の勢いを見せています。

さて、pix2pixは、名前の通り画像から画像への変換を行うアルゴリズムです。画像から画像への変換というと、これまでは画像認識のCNNを応用した(今となっては単純な)モデルによる生成が主でしたが、今回発表されたpix2pixでは、GANを応用させたcGAN(conditional GAN)というモデルを新たに導入しています。cGANの仕組みはGANを理解していれば容易に理解できるものなのでここでは説明を省略しますが、このpix2pixの恐るべき点はとにかくその驚異的な汎化能力にあります。論文で挙げられている例では、

  • 線画から写真の復元
  • 航空写真から地図画像の生成
  • 地図画像から航空写真の復元
  • 昼の風景から夜の風景への変換
  • モノクロ画像からカラー画像への変換

など、大掛かりなチューニングを行うことなく同じモデルで種々様々な画像変換タスクに応用できることが示されています。

f:id:hakatashi:20161215170936p:plain
“Image-to-Image Translation with Conditional Adversarial Nets” より引用

見ての通りどれも変換結果が優れており、しかも少ないデータセットでもかなり高い性能を発揮することが知られています。CNNへのGANの応用はつい昨年末に提案されたばかりだというのに、この分野の成長の速さには驚く一方です。

また、簡単に使える実装もGitHubで同時に公開されており、しかもこれが適当に画像を整形して突っ込むだけでいい感じに学習してHTMLで結果を表示してくれるなど、機械学習がよくわからなくても手軽に試せてしまうとてもありがたい設計になっています。

これはまさしく画像を取り扱うpixivで試してみない手はない、名前もなんだかpixivに似ているし⋯⋯ということで、筆者も機械学習がよくわからないなりに個人的に適当に遊んでみました。

試してみる

さて、pixivにはこんなユーザー企画があります。

塗り方を練習してみよう! by コット(レタス)今は、まよ on pixiv

2009年に投稿され現在でも脈々とイメージレスポンスが投稿されている有名企画の一つです。同じ1つの「元線画」に対して「厚塗り」「ギャルゲ塗り」「黒一色」「アニメ塗り」「水彩塗り」という5つの塗り方を練習する、という内容なのですが、こうした企画は入出力のフォーマットが統一されているので、データセットとして使用するにはまさしくうってつけです。公開されているレスポンス画像も800件近くあり、通常のCNNだとやや心もとないですがpix2pixなら行けるのではと思い突っ走ることにしました。

ちなみに、筆者のオススメはこんな感じです。

塗り練習 by usak on pixiv

イメージレスポンスしてみたかった by 豚ポタージュ@Twitter on pixiv

究極! by にゃー on pixiv

あんぱんまんで塗り練習 by :へ) わなげ on pixiv

by Du @ ドー on pixiv

こういったイメージレスポンスの中から規定の大きさ(1200x800)を満たしている約600件をフィルタリングし、train:validation:test=8:1:1の割合で分類して、これに上下左右の反転を加えてデータセットを4倍にしました。こうして1976件の学習データを作成し、「元線画」から5つの塗りそれぞれへの変換をpix2pixを用いて学習しました。パラメーターは時間の都合により標準で200epochとなっているところを10epochにした以外はすべてデフォルトのままです。

使用したマシンはいつも通り AWS EC2 のg2.2xlargeです。かかった時間は10epoch回すのに約2時間半、テストも含めて6個のモデルを学習したのでのべ約15時間でした。

結果

さて、さっそく結果を見てみましょう。学習したモデルをpixivに投稿されていない線画に適用してみました。生成された画像はすべて元画像と同じライセンスが適用されます。

注意: ここから先にはいささか心臓に悪い画像が含まれている可能性があります。

その1

ミク誕! by まほら licensed under CC BY-NC-SA 2.5

元画像

f:id:hakatashi:20161215181741p:plain

厚塗り

f:id:hakatashi:20161215194825p:plain

ギャルゲ塗り

f:id:hakatashi:20161215182047p:plain

黒一色

f:id:hakatashi:20161215182143p:plain

アニメ塗り

f:id:hakatashi:20161215182156p:plain

水彩塗り

f:id:hakatashi:20161215182207p:plain

その2

蘭丸ちゃん線画 by Risse licensed under CC BY 2.5

元画像

f:id:hakatashi:20161215182402p:plain

厚塗り

f:id:hakatashi:20161215194819p:plain

ギャルゲ塗り

f:id:hakatashi:20161215182414p:plain

黒一色

f:id:hakatashi:20161215182421p:plain

アニメ塗り

f:id:hakatashi:20161215182444p:plain

水彩塗り

f:id:hakatashi:20161215182451p:plain

その3

シーザー線画 by Risse licensed under CC BY 2.5

元画像

f:id:hakatashi:20161215182538p:plain

厚塗り

f:id:hakatashi:20161215194806p:plain

ギャルゲ塗り

f:id:hakatashi:20161215182545p:plain

黒一色

f:id:hakatashi:20161215182554p:plain

アニメ塗り

f:id:hakatashi:20161215182559p:plain

水彩塗り

f:id:hakatashi:20161215182607p:plain

その4

線画 by Motokazu Sekine licensed under CC BY-NC-SA 2.0

元画像

f:id:hakatashi:20161215182815p:plain

厚塗り

f:id:hakatashi:20161215194757p:plain

ギャルゲ塗り

f:id:hakatashi:20161215182902p:plain

黒一色

f:id:hakatashi:20161215182903p:plain

アニメ塗り

f:id:hakatashi:20161215182904p:plain

水彩塗り

f:id:hakatashi:20161215182905p:plain

感想

標準200epochのところを10epochしか回さなかったせいか、完璧な彩色!とはいきませんでした。ただ、髪・肌・目の塗り分けはおおよそできており、それぞれの塗り方の特徴も何となくつかめているように見えます。また時間があったらちゃんと200epoch回した結果を見てみたいところです。

最後に

ピクシブ株式会社では、5つのEC2サーバーにログインしてcGANの出力結果を収集して一つのブログ記事にまとめるめんどくさい作業が嫌いな、怠惰なプログラマーを募集しています。いつか機械学習で仕事を駆逐しましょう。アルバイトインターンもあるんだよ。