なにかのまねごと

A Journey Through Imitation and Expression

最新の自動ペン入れ技術を試してみた

 ネットをフラフラしていたら、こんなウェブサービスを見つけました。

Sketch Simplification・ラフスケッチの自動線画化

 どうやら人工知能を使ってラフ画にペン入れをしてくれる技術らしいです。面白そう!というわけで、試してみました。

 私は絵を描くとき、ラフ>下描き>ペン入れという工程をなぞるわけですが、このうち、ラフ、下描き、ラフ+下描き、の3つの絵をこの自動線画化ツールに放り込んでみました。このツールには簡略度というパラメータがあるので、それも、弱、中、強、というように3種類に分けて試してみました。その結果が以下です。

ラフ 原画>簡略度弱>簡略度中>簡略度強

f:id:KZE:20160912124117j:plain

下描き 原画>簡略度弱>簡略度中>簡略度強

f:id:KZE:20160912124136j:plain

ラフ+下描き 原画>簡略度弱>簡略度中>簡略度強

f:id:KZE:20160912124151j:plain

 

 この中で一番いい感じなのは下描きの簡略度弱ですね。

 また、簡略度を強にすると元絵の描画が極端に排除されます。これをよく見てみると、シンプルな線になってるところはうまく抽出するけど、線が込み合ってるところは無視されてしまう傾向があるみたいです。

 ちなみに、自分でペン入れをすると以下のようになります。

f:id:KZE:20160523174142j:plain

どうやってるの?

 どうやってこの人工知能を作ったのか?という話ですが、論文とかプレゼン用のスライドとか読んでも私の英語力ではいまいち読解できず…。でも手元の機械学習の入門書とつき比べてみて、何とか分かったところをメモしておきます。

 そもそもコンピュータは、「入力」に対して「出力」を返してくれるシステムです。このインターネットを見ているときも、上のほうにあるアドレスバーにURLを「入力」したら、そのURLに対応するページが「出力」されてきます。

 普通はこの入力に対する出力は、人がルールを作ってプログラミングします。

 この入力に対する出力を、機械がルールを作るようにするのが人工知能です。

 機械にルールを作らせるにはどうすればいいのか?という疑問がわきますが、それは機械に学習をさせることで実現します。

 この学習をする方法はいくつか種類がありますが、今回の自動ペン入れ技術は「畳み込み(convolution)ニューラルネット」というやつを使っているらしいです。

 畳み込みって何をやってるの?という点ですが、特徴を割り出す、ということをやっているらしいです。で、ニューラルネットという仕組みを使って一つの入力画像に対して何回も特徴を割り出し、最終的な出力画像を出しているようです。

 その特徴の割り出し部分は、ラフと線画をセットにしたデータをあらかじめ学習させておいて、その学習結果を用いているようです。

 ここまでも十分大雑把ですがもっと大雑把に言うと、ラフを入力したら、そのラフ線の特徴を割り出してきれいな線にしている、というイメージです。

 つまり、上記画像で簡略度を強にしたときは、特徴の割り出しを強めにやっているのでしょう。この「強め」にやるというのが、畳み込みの回数を増やすことで実現しているのか畳み込みの時の特徴割り出しを荒くやることで実現しているのかはイマイチよくわかりませんでした…。

まとめ

 今回思ったのは、この技術は要らない線を省くことに重点を置いているな、ということです。偉そうなことを言いますが、ペン入れって要らない線を省くことではなくて、必要な線を選ぶことだと思うのです。だから、線が足らないところには線を足すという判断も必要だと思います。

 例えば、下描き画像の左側のサイドバングの髪の毛、ここの線は隣とつながっていてほしいわけですが、そういうところの判断が弱いように感じられました。

 この点は学習データによって改善されるのか、そもそも特徴割り出しのアルゴリズムの変更が必要なのか、はっきりとは分かりませんが、線を足す判断も出来るようになったらもっとよくなるように思いました。

 最後に、人工知能スゲー!