StyleGANをイラスト、アニメに適用している人は多いようです。
(https://twitter.com/search?q=stylegan&src=typd)
StyleGANが画像のスタイルをうまく捉えられるということであれば、それが顕著なデータセットを用意したら面白い結果が得られるのではないかと思い、そのようなデータとしてVOICEROIDの立ち絵から顔画像を持ってくることを考えてみました。
VOICEROID立ち絵
VOICEROID素材まとめ Wiki*から画像を収集しました。
headless Chrome, selenium, BeautifulSoupでリンク先のプレビュー画像を取得し、lbpcascade_animeface.xmlにて検出できた領域を無理やり64x64にリサイズしたものを訓練データとしています。
結月ゆかり、弦巻マキ、琴葉茜・葵、東北ずん子、東北きりたんの6人分、画像数約6600枚を訓練データとしています。
ランダムな単一画像の出力
オリジナルのstyleganをsubmoduleとするリポジトリを用意し、手軽に試せるコードをGoogle Colaboratoryに用意しました。
evaluate-vroid.ipynb - Colaboratory
乱数のシードを30としたときの出力例を以下に示します。
2方向マッピング
StyleGANの2方向マッピング - Qiitaを参考に、使うモデルだけを変えて実行できるようにしました。
StyleGAN 2way mapping - Colaboratory
以下は出力例です。
感触
データ数が少ない割にはそこそこ結果を出せている印象です。ただ、画風がかなり異なる画像(線の太さ、デフォルメの強弱等)があるための影響が大きい感じがします。
また、取得した画像は他の画像と部分的にオーバーラップしているケースもあったため、その影響も見られます(上から2段目、3段目の左側)。
今回はプレビュー画像をそのまま使ったので、もっと綺麗な状態の配布素材画像を直接使うようにすればこの問題は解決できそうです。しかし、配布方法が人によって異なっており自動収集が難しいという課題があります。
課題
NVIDIAのStyleGAN実装は、推論にもGPUが必要です。計算グラフの中でGPUの指定が陽にされているためです。
allow_soft_placementを指定して無理やりCPUで処理させようとすると、
UnimplementedError (see above for traceback): Generic conv implementation only supports NHWC tensor format for now.
[[node Gs/_Run/Gs/G_synthesis/4x4/Conv/Conv2D (defined at <string>:168) ]]
conv2dがUnimplementedErrorを発生させて動きませんでした。NCHW形式にしたら動くんでしょうか。