DeepLearning
Cesium
pix2pix
WebDNN

はじめに

 ディープラーニングがバズ化してNHKの教育でも講座が開かれる昨今、皆様の周りもでも色々話題に上がることもあると思います。
 そしてFOSS4Gの周りでもディープラーニングを使った事例がちょくちょく出てきており、世はまさに大ディープラーニング時代!ということで今回はMakeGirlsMoeで有名になったWebDNNを使ったブラウザのみでのWebDNNタイル作成をご紹介します。

衝撃のアルベルト

 MakeGirlsMoeという名前で、かなりきれいな2次元アニメキャラっぽい画像を生成できるサービスがつい最近登場しました。twitterでもかなりバズったのでご存じの方も多いと思います。
 こちらの最大の特徴はGANによる生成で、人間が描いてると言われても違和感ないレベルの2次元キャラを生成することが出来ることです。通常GANは安定的に画像を生成することが難しく、それらを安定生成するためのテクニックが非常に多くの論文で発表されています。
 このため、ここまで破綻が少ない画像を生成できることがでできるということが、DNN界隈に大きな衝撃をもたらしました。
 しかしながら個人的に衝撃を受けたのが、MakeGirlsMoeのtipsで書かれていた、

This will enable the WebGPU backend, which is 100x faster than WebAssembly!

 という言葉です。
 おいおい、100倍はモリ過ぎじゃない?と思いつつ試してみたら、
 「この速さ・・・悪魔的っ・・・!圧倒的爆速っ・・・!」
 という感じでヤック・デカルチャーな体験を受け、ここまで早ければかなり応用ができそうだと感じ、タイルでも作ってみようかと思いつきました。
 ConvNetの成果をpix2pixで精度も速度も圧勝された苦い経験を持つ私ですが、正直1年でここまで高速化するとは思っていませんでした。今のとこsafari technology-previewのみで試せますが、正直ローカル実行と同じくらい早いんでないかというくらいの爆速でビビります。

とりあえず構想

 ではWebDNNでタイル作成というアイディアをどうやって実現するのか?
 ということで色々調査してみたところ、WebDNNで猫の線画着色モデルを動作させると言う@knokさんが書かれた記事がpix2pixをWebDNNで動かすという内容で、今回のケースに非常に似通っているため、参考にさせて頂きました。@knokさんありがとうございます!

 ということで、基本はChainerのpix2pixで学習させたモデルをwebdnnに変換させてから、Cesiumでcanvasタイルとして生成する感じで実装を進めました。
 ・・・が、案の定と言うかなんというか、予想通り様々な壁にぶつかります。
 (以下諸事情により割愛。あとで追記します)

結果

 色々とキャンバスに悩まされた感じでは有りますが、ついに完成しました!

CPUで動作
CPU

GPUで動作
GPU

 うーん、GPUだとばくそくっ!
 結構実運用に耐えそうな速さですね。
 今回はモデルやウェブタイルは決め打ちでやってますが、この辺を動的にアップする事で有用なモデルをgithubとかで共有して様々なDNNによる分析を誰でもどこでも(スマホでも!)簡単に分析できるようになると思います。

Code