✍️

(自分用メモ)User-Guided Line Art Flat Filling with Split Filling Mechanism

2021/03/30に公開

論文サイト:https://lllyasviel.github.io/SplitFilling/

どんなもの?

線画とヒント(走り書き)から平坦な(アニメ)塗りをしてくれるアーキテクチャ。

先行研究と比べてどこがすごい?

以下の図を見てください。自明。

技術や手法のキモはどこ?

概要

ユーザの走り書き(色のヒント)UN個のグループに分割して、グループインデックスを示すi∈{1, ..., N}を持つN個の分割走り書きマップU_i∈R^{w×h×4}(RGB+A(アルファ値)なので4)を得ます。各グループの色C_i∈R^{w×h×3}と影響範囲I_i∈R^{w×h}を推定し、それらを統合して結果Yを得ることが目的となります。先に図6(下の方にあります)を見たほうが理解しやすいかもしれません。

Splitting user scribbles

ユーザの走り書きマップUに使われている色を、k-meansクラスタリングアルゴリズムを用いてN個のクラスタにクラスタリングし、得られた色クラスタを用いて、ユーザーのらくがきマップUを分割走り書きマップの集合{U_{1...N}}に分割します(図3(a)参照)。

ここで注意すべきなのはRGB空間のk-meansアルゴリズムは、知覚的に区別できるわずかな色相/彩度の違いには比較的弱いので、色彩度変換を用いて次のように強調します。

そして色彩強度と彩度の重要性のバランスをとるために、色彩強度をβでスケーリングします。

Masking scribbles

図3(a)に示すように、学習タスクを簡単にするために、走り書きマスクM_iを計算する。各マスクM_iでは、U_iの走り書きのピクセルは"1"とマークされ、Uの残りの走り書きのピクセルは"-1"とマークされ、その他のピクセルは"0"となります。

Estimating influence areas and resulting colours

畳み込みニューラルネットワーク(CNN)を訓練して、各走り書きグループの影響領域と結果の色を推定します。線画X、分割走り書きマップU_i 、分割走り書きマスクM_iを入力とし、出力は予測領域スケルトンマップS′_i 、カラーマップC′_i 、影響マップI′_iとなる。
これらのカラーマップと影響マップは,flat fillingのラフな初期値として機能する。
このスケルトンマップは、領域スケルトン強度アプローチを用いて計算され、end-to-endの領域操作が可能になります。任意の離散領域は、skeleton-from-region変換により、学習可能なピクセル単位のスケルトン強度に変換することができ、また、このようなスケルトンは、region-from-skeleton変換により、元の領域を再構築することができる。

Interpreting regions

図3-(c)に示すように、全ての推定したスケルトンマップの平均値を

として計算し、region-from-skeleton変換を用いて、領域{Ω_{i...n}}を得ます。
最終的なカラーマップC_iは,予測されたカラーマップC′_iからサンプリングされた中央値の色ですべての領域を埋めます.
同様に、最終的な影響マップI_iは,各領域で最大の値を持つ最良のi番目の影響マップに"1"を設定し、他のものに"0"を設定することによってI′_iから計算される。

Finalizing results.

最終的なマージの出力は次のように計算されます(図2(g))。

colour consistency optimization

ユーザーの走り書きや入力された線画に応じて、モデルがスマートかつ選択的に複数の領域をマージして一貫した色で着色できるように学習します。
特に各分割された走り書きマスクM_iが、領域セットΨ_iを次のように示すことに注目します。

マージが可能な領域ペア(Ω_a,Ω_b)のセットを推定します。

  • N(Ω_i)Ω_iに隣接する領域の集合
  • \bar{Ω_i}Ω_iの平均色値
  • ||・||_2はユークリッド距離
  • τは閾値ハイパーパラメータ

{(Ω_a,Ω_b)}は、ブルートフォース(しらみつぶし)で解くことができます。
このセットから領域ペアをマージして色の一貫性を確保するために、それらの色をそれらを覆う走り書きの色に置き換えます。

Dataset synthesis

図4に示すように、線画マップX、分割走り書きマップU_i 、分割落書きマスクM_i 、スケルトンマップS、カラーマップC、影響マップI_iのペアデータを用いて、モデルを学習するためのデータセットを合成します。
具体的には、Danbooruデータセットより100万枚のイラストをサンプリングし、各イラストにSimo-Serraらの方法で線画マップXを生成し(図4(b))、Zhangらの方法で初期領域Ω_{i...n}を抽出します(図4(b))。そして、skeleton-from-region変換を用いて、これらの領域をスケルトンマップSに変換します(図4(b))。
イラストからサンプリングした色の中央値ですべての領域を塗りつぶすことで、平坦なカラーマップCを得ます(図4(b))。
k-meansを用いて、平坦なカラーマップCをクラスター化し、影響マップI_iを得ます(図4(c))。
各影響マップI_iに対して、分割された走り書きマップU_iを合成し(図4(d))、これらの分割された走り書きマップを1つのUに統合する(図4(e))。最後に、各分割された走り書きマップU_iに対して、走り書きマスクM_iを計算します(図4(f))。

User scribble simulation

各分割された走り書きマップU_iを模倣するために、2つのポイントp1,p2∈R^2の間に3pxの幅を持つ直線を使用します。走り書きの色は,p1Cの値を用い,端点{p1,p2}は,現在のi番目の影響マップI_iで指定された領域セットΦ_iに属するランダムな領域Ω_jからランダムに取り出されます。


一般的なユーザの落書きをいくつか観察し,3つの問題について指摘します。

  1. 図5(a)のようにどの領域が描く走り書きの影響を受けるべきなのかが明らかじゃないこと。近い領域のみから伝搬してほしいときもあるし、遠くから伝搬してほしいときもあります。
  2. 図5(b)のように領域を超えて走り書きをしてしまう場合があります。
  3. 図5(c)のように平坦な塗りが良いときもあれば色のバリエーションがあったほうがいいときもある。

まず1つ目の問題に対してはモデルが各走り書きの影響を受ける適切な領域を推定することを学習できるようにします。p1p2で同じ領域Ω_jからサンプリングするのではなく、領域セットΦiの中でp1から到達可能な領域からp2を取得できるようにします。
Ω_jからランダムウォークを行い、p2をサンプリングするランダムなkステップの近傍領域Ω_kを見つけます。k=3ステップのランダムウォークを行い、遠すぎる領域を得ないようにします。

次に2つ目の問題に取り組みとして、サンプリングされた領域外の粗い走り書きを模倣し、領域を中心に半径rピクセル周囲の領域(デフォルトではr=15)からもサンプリングします。

最後に3つ目の問題の解決として、色の不確実性をシミュレートするために各カラーマップC_iにおいてcolour consistency optimization(前述)を行います。

Training

以下の図6に示すように1つのエンコーダーと3つのデコーダーをもつFully Convolutional Neural Network(FCNN)を用いています。
それぞれカラーマップC'_i、影響マップI'_iそして領域スケルトンマップS'_iを推定します。

損失関数は以下で定義されます。

どうやって有効だと検証した?

実際に使ってみたら有効だった()

議論はある?

画像の構造を壊してしまうときがあるらしい。

次に読むべき論文は?

スケルトンマップの生成(画像処理)をそもそも知らなかったので軽く知っておこう。

感想

colour consistency optimizationがいまいちピンときていないので誰か要約して教えて...。
データや手法など既存の技術をふんだんに組み合わせているなと思いました。

Discussion