読者です 読者をやめる 読者になる 読者になる

「ラフスケッチの自動線画化」論文を読んでみた

機械学習 Deep Learning 画像処理 論文

gigazine.net

ちょっと前にネットを賑わわせたこの論文を読んだので、おもしろいなと思ったところをまとめていこうと思います。


まず、この論文にはアプリケーション(応用)として注目すべき点と、それを可能にした技術的なポイントがあるので、それを整理したいと思います。

アプリケーションとして

  1. 十分実用的な線画化ができているように見える
    • ユーザーテストで商業ソフトによるものを圧倒
  2. 任意のサイズのラスター画像を扱える
    • 既存の線画化技術の多くはベクター画像しか扱えない
    • 一般的な画像認識タスクに用いられる CNN では入力サイズが固定されているものが多い
  3. 閾値を手動で設定する必要がない
    • 商業ソフトのものは閾値を手動で調整する必要があった
  4. 実時間での処理が可能(?)
    •  1024\times1024 の画像に対し、GPU(TITAN X)を使えば 0.4 秒ほど
    • ただし、CPU だと 3.0GHz の 8 コアでも 20 秒程度

技術的な点

  1. All CNN[Springenberg 14] を使い、任意のサイズの画像を扱うことを可能にした
  2. 学習に効果的なデータセットを作成した

思いつく限り並べてみました。

やっぱり、すぐに応用に使えそうなところが目を引きますが、 技術的にも真新しいところがあるようです(でなければ SIGGRAPH に載りませんね……)。

これから、それぞれについて書いていきます。


アプリケーションとして

まず 1 つめですが、論文の冒頭に貼られた画像を見ると、オリジナルのラフ画像がきれいに線画になっています。かなり実用的なレベルまで線画化できているように見えますね。これがもちろん 1 つめのポイントです。

次に 2 つめですが、イラストレーターの方が実際に使う場面では、縦○○ピクセル横××ピクセルといった具合に、様々なサイズのラスター画像が対象になることが想定されます。

そのため、実際のアプリケーションへの転用を考えると、任意のサイズのラスター画像を扱えることが重要です。

しかし、閉鎖領域認識[Liu 15] のような既存手法では、線画化自体にはある程度成功しているものの、入力としてベクター画像しか取れないという弱点があったそうです。

また、ラスター画像を従来の一般的な CNN で学習しようとすると、特定の大きさ(例えば、 224\times224)しか扱えないという問題があります。

この論文では、それらの問題を解決し、任意のサイズのラスター画像を扱うことができるようになった、というのが 2 つめのポイントのようです。

さらに、利便化のためには、処理が自動で行われること(ポイント 3)や、処理が実時間で終了すること(ポイント 4)も重要であるように感じます。CPU を使うと時間がかかるのは、ディープラーニングの業というか、仕方ない気もしますね……。

ともあれ、この論文の手法は、実際に使われるということを念頭に置いて作られていることが分かります。著者の中に絵師さんとかいらっしゃるのかもしれませんね。

続いて、技術的な点です。


技術的な点

  1. All CNN[Springenberg 14] を使い、任意のサイズの画像を扱うことを可能にした
  2. 学習に効果的なデータセットを作成した

読んだ限りでは、この 2 つが大きいんじゃないかな、と思いました。

まず 1 つめの点ですが、画像を CNN で扱う場合、入力を特定のサイズに限定するのが一般的です。

たとえば、2014 年の画像認識コンテスト(ILSVRC)で人間に匹敵する成績を出した VGGNet は、 224\times224 の画像を入力に取りますが、 これをそのまま他のサイズの画像に使うことはできません。
畳み込み層やプーリング層だけであれば、画像のサイズによらず計算そのものは一定なので問題ないのですが、 最後の全結合層で学習する重みの数が入力画像のサイズに依存するため、一度あるサイズに合わせて学習してしまうと、 他のサイズを扱うことができないからです。
どうしても他のサイズの画像を扱いたければ、入力画像を成型する等の工夫が必要になります。

しかしこの論文では、最後の全結合層を畳み込み層で置き換えることにより、任意の大きさの画像を扱うことに成功しているそうです。

2 つめの点ですが、学習データの作成方法を若干工夫しているようです。

ラフスケッチの線画化に限らず、教師あり学習においては、入力データとは別に教師データ(正解データ)を用意し、 その教師データとの誤差がなるべく小さくなるように学習を進めていくのが普通です。

この論文でいえば、ラフを入力して線画を出力するわけですから、 絵描きにラフと線画をもらい、そのラフを入力として、線画を教師データとして学習させるのが自然な発想でしょう。

しかし、この方法には 1 つ問題点があります。 それは、絵を描いた人が、ラフの通りに線画を仕上げるとは限らないということです。

私も絵師さんの作業動画を見たことがありますが、線画にペン入れをするとき、 絵を描く人はラフスケッチを忠実に再現することより、結果としてよい絵になるような線を引こうとしているように見えます。
しかし、そうして作られた線画を教師データとして使うと、ラフと線画の線がずれているため、 「ラフを線画にする」という本来のタスクがうまく学習できないのです。

これを解決するために、この論文では、ラフから線画を作って教師データにするのではなく、 まず教師データとなる線画をもらってから、それをなぞってラフのデータを作り、入力データとしているようです。 つまり、通常のラフ→線画というフローを逆転させて、線画→ラフの順でデータを作っているのです。

このやり方は、他のいろいろなタスクにも応用できそうでおもしろいですね。

著者さんもドヤ顔で(?)「我々はこのデータセットの構成手法をデータセットの逆構成法と呼んでいる」 (We call this dataset construction approach the inverse dataset construction approach)なんて言っています。


おわりに

というわけで、「ラフスケッチの自動線画化」論文を読んで、おもしろいと思ったところをまとめてみました。

いやー……それにしてもディープラーニング、ヤバいですね。もう全部ディープラーニングでいいんじゃないかってくらいの勢いです。
というかあえて触れませんでしたけど、このかわいい絵がよく SIGGRAPH に載りましたね。最高です。

私も学部 4 年なので、そろそろ卒論のネタを探さなければならないのですが……。 この前研究室の先生に相談したら、「ディープラーニングはいろんな人がやってるから、結果を出すのが難しい」なんて言われてしまいました。

何はともあれ、これからも論文を読んでおもしろいと思ったら、記事にしていきたいと思います。

おかしなところなどあれば指摘していただけると幸いです。

ではでは。


参考文献

シモセラ エドガー*, 飯塚里志*, 佐々木一真, 石川博 ラフスケッチの自動線画化

[Liu 15] Xueting Liu, Tien-Tsin Wong, Pheng-Ann Heng Closure-aware Sketch Simplification

[Springenberg 14] Jost Tobias Springenberg*, Alexey Dosovitskiy*, Thomas Brox, Martin Riedmiller: STRIVING FOR SIMPLICITY: THE ALL CONVOLUTIONAL NET