ちょっと前に「猫の線画を書くと自動着色できる」というWeb上のデモが話題になりました。 Image-to-Image Demo – Affine Layer (web) [1611.07004] Image-to-Image Translation with Conditional Adversarial Networks (元論文) phillipi/pix2pix: Image-to-image translation with conditional adversarial nets (著者によるTorch実装) affinelayer/pix2pix-tensorflow: Tensorflow port of Image-to-Image Translation with Conditional Adversarial Nets 他複数のフレームワークによる実装あり ニュース記事 線画の猫をリアルにしてくれるWebツールが登場 夢に出てきそうな猫ちゃんが生み出される – ねとらぼ 手書きの「絵」から本物そっくりの「写真」を作るアプリがすごい―でも失敗すると… [インターネットコム] 他いろいろ 著者は、このデモに関するデータセットをいくつか公開してくれていますが、この妙に話題になった「猫画像の変換」に必要なデータセットのみ配布をしていません。 なんとか自分でも再現したいと思い、いろいろとトライしてようやく結果を出せそうなところまできました。 データ収集 まず猫画像の収集をやりました。最初はWikipediaからの取得を考えていたのですが、現在Wikipediaが用意しているダンプに画像ファイルは含まれておらず、そもそも画像に関してはWikipedia標準のライセンスであるとは限らないと公式に書かれていました。 しかたなく、Google画像検索でライセンスを「商用を含めた二次利用許可」に絞って探していたら、やたらPixabayというサイトの画像が出てくるのでよくよく調べてみると、なんとこのサイトはすべてCC0(public domain)ということなので、ここから画像を集めました。画像URLのリストをgithubで公開しています。 https://github.com/knok/pixabay-cat-images データ分類 Pixabayの検索結果には実際には猫ではない画像も割と混じっているので、ChainerCVの事前学習モデルを使ってある程度自動分類してから、手動でpix2pixに使えそうな画像を選別しました。 ChainerCVを用いて猫画像を分類する – Qiita 猫部分の抽出 集めた画像には背景が含まれています。これを除去する作業を最初はgimpやAndroidアプリを使って手動でやっていたのですが、なかなか大変なので自動で行うアプローチを模索し、セマンティックセグメンテーションを用いておおよそ望みの結果が得られました。 猫画像から猫部分のみを抽出する(matting/semantig segmentation) –… Continue reading 猫の線画を着色させたい