あいどる💖たいむ

あいどるやってます。

deepcolorを動かしてみた

巷で話題のPaintsChainer.その類似手法つかった「deepcolor」を試した.

deepcolorの概要

github.com

PaintsChainerと同じように,ディープラーニングで学習し,線画への着色を自動で行うアプリ.

PaintsChainerの作者さんが,このアプリの手法の論文を紹介されてたので気になってた.

つおい人は年齢に関係なくつおいんだなぁ(ノ゚ρ゚)ノ

学習の概要

英語をあんまり読めないので,ざっくりとまとめ.

着色学習

GANと同様にdiscriminatorとgeneratorを同時に学習させる.
ネットワークはU-NETという構成.ダウンサンプリングの出力結果をアップサンプリングの対応する層の入力としてつかう.(ググって画像見たほうが理解しやすい)

入力は線画(図左)とヒント画像(図中). ラベルは着色画像(図右).
generatorは,入力に対し偽物の着色画像を作る.
discriminatorは,与えられたラベルが本物か偽物かを判断する.
discriminatorに本物の着色画像を与えたときの結果と,generatorが生成した偽物の着色画像を与えたときの結果をもとに,generatorとdiscriminatorが学習していく.
(generatorはより騙せる画像を生成するように,discriminatorはより正確に本物か偽物か見分けるようにってかんじ.)
f:id:shiccocsan:20170708015915p:plain

画像は以下から引用
https://www.pixiv.net/member_illust.php?mode=medium&illust_id=50913967

ヒント画像

訓練データのヒント画像は,着色画像をランダムで数点白抜きし,blur処理を行っている.
このようにヒント画像からの情報を減らすことで,補完して着色してくれるようになるっぽい.すごい!

自動着色

自動着色は,generatorを使って行う. 学習させたgeneratorに線画とヒント画像を与えれば,本物っぽい着色後画像を出力してくれるはず.

実装メモ

main.py

discriminatorとgeneratorの学習を行う.

guess_colors.py

ヒント画像の学習を行う. 自動着色時,ヒントを自分で与えない場合はこれのgeneratorから取得した画像をヒントとして使用する.
今回は動かしてない.

実際に動かしてみる

Python3対応

Python2で作成されているようだが,環境をもってなかったのでPython3用に少し書き換えた .

https://github.com/momocalc/deepcolor/tree/python3-support

学習

クローラを作ってまったり画像を9000枚程度集めたので,それを訓練データとして20epoch学習させた.
処理時間は,GPUがGTX1050-Tiで10時間程度だった.

学習過程

左から,5epoch,10epoch,15epoch,20epoch後のgeneratorの出力 f:id:shiccocsan:20170708014954p:plain

画像は以下から引用

https://www.pixiv.net/member_illust.php?mode=medium&illust_id=62817600

https://www.pixiv.net/member_illust.php?mode=medium&illust_id=50913967

10epoch後は,あまり変化がないようにも見えるが,すこしずつディテールが変化してる感じもする (・_・)

自動着色

学習させたモデルで実際に着色してみる.
server.pyを実行しwebサーバを起動し,デモ画面から自動着色を行う.

左から順に,用意した線画,2値化された線画,ヒントをつけた画像 f:id:shiccocsan:20170708022042p:plain

自動着色結果

f:id:shiccocsan:20170708022221p:plain

神絵師には程遠い_| ̄|○

考察

PaintsChainerさんは訓練に60万もの画像を使ったと書かれてて,訓練画像の少なさに不安があったが以外にうまくいってる気がする.
以下の疑問があるので,もう少し継続して触っていきたい.

  • 線画に2値を使っているが,グレースケールにしたら結果は変わるのか
  • 今回はランダムに画像を集めたが,特定の画風だけを訓練データとした場合,その画風の着色となるのか
  • ぼやけた感じの自動着色臭さ(良くいえば水彩風)を減らすことはできるのか
  • 学習のヒント画像の白抜きを減らしたり,blurを弱めたりしたらどうなるか

おわりに

TensorFlowの実践的なコードを読むことができてよかった.
英語ができないことがめっちゃ足枷になってる.論文読めない (/ω\*)ウゥ…