the onishimemo

Pix2Pixで着色する

Pix2Pixを触ってみた。何を覚えさせようかな〜と考えて思いついたのは、けいおんの平沢唯ちゃんだった。なぜなら私は平沢唯ちゃんがとても好きだからだ。AIが唯ちゃんを生み出してくれると嬉しい。

しかし、さすがのAIもゼロから唯ちゃんを錬成することはできないだろう。ということで、線画を渡したら唯ちゃんぽく塗ってもらうことにした。

まず学習用画像を集める。最初、GoogleのAPIを叩いていたんだけど、全然数が集まらなくておかしいなと思ったら、どうやら制限があるらしい。
参考:Googleの画像検索APIを使って画像を大量に収集する – Qiita

何回もやり直していたらクエリーの上限にも引っかかってしまったし、結局別のやり方でスクレイピングした。集めた枚数は500枚ほど。でも中にはフィギュアやギターの写真のような唯ちゃんが写っていない画像もあるので、ふるいにかける必要がある。

というわけで、顔認識を使う。lbpcascade_animefaceを使って、アニメの顔があるかどうかをチェックする。
参考:OpenCVによるアニメ顔検出ならlbpcascade_animeface.xml – デー

Pix2Pixの学習用画像はインプットとアウトプットの画像を並べる必要がある。つまり、今回の場合、線画と着色したものを並べなければいけない。なので、画像に顔が写っていれば顔周りを切り抜いて線画抽出し、元画像と並べるようにした。

作ったのはこれ。
https://github.com/nisio-k/anime-face-outline
顔がなかったり、複数人写っている場合は処理を飛ばす。あとで気づいたけど、カラーかどうかを判断する処理を入れておけば良かった。

出力された画像。

そんなこんなでふるいにかけていくと、手元に残った唯ちゃんは200人程度だった。出力された画像の中にはモノクロのイラストやフィギュア写真も紛れ込んでいた。精度を上げるには、もっと数が必要だ。検索ワードを「けいおん 唯」とかに変えて元画像を再度集めてみたものの、それでも十分と言える数は集まらなかった。

学習用データは水増ししてもいいらしい。でも、水増し画像を作るのが面倒くさい。悩んだ末に平沢憂ちゃんも投入することにした。憂ちゃんは唯ちゃんの妹。唯ちゃんにそっくりで、もちろんかわいい。髪型は違うけど、今回覚えるのは色だから問題ないだろう。憂ちゃんを入れて何とか500枚程度のデータを用意することができた。

あとはGoogle Colaboratoryを使って学習させるだけ。
参考:AIに眼を書かせてみた👀 (無料でGPUを使ってpix2pixを試す) – Qiita

エポック数は30くらい。学習結果はこちら。

一番上は完璧すぎるので、学習用画像に同じ画像があるんだと思う。

けいおんは部活の話のため、唯ちゃんは紺色の制服を着ていることが多い。それを覚えてしまったので、真ん中の画像を見て分かるように首周りには青っぽい色をつけられる傾向がある。一番下は唯ちゃんではなく、ドラムの律ちゃん。当然だけど、律ちゃんを入れても平沢姉妹カラーで出力される。

というわけで、私は手軽に唯ちゃん(の色を塗ったイラスト)を手に入れられるようになった。精度を上げるか迷ったけど、線画の色塗りは既にすごいサービスがあるので一旦終わります。

Pix2Pixがあまりにも手軽で面白いので、もっと他のことできないかな?と考えて思いついたのが、廃盤になったフィルムの色再現。一回やって失敗しちゃったんだけど、良い方法を思いついたので近日試してみようと思う。

/