CLIPasso: Semantically-Aware Object Sketching
2021.2.21
shibuya
どんなものか ( 要約、システムのI/Oなど)
写真内に写る対象物の本質を捉えた抽象的なスケッチを生成する。
https://scrapbox.io/files/620db5875cc7920022013974.png
先行研究と比べてすごいところ、貢献
機械学習でエッジを捉えたリアルなスケッチ生成は容易になったが、抽象的なスケッチを生成するのは難しい。
なぜなら、抽象化にはセマンティックな理解や、より高次元の概念の予備知識が必要だから。
CLIPassoでは CLIPを使用することによって、スケッチと画像から意味的な概念を抽出できる様にして、抽象化を達成した。
今までにも人間が描くようなスケッチを模倣する取り組みはあったが、それらは人間の描いたスケッチをデータセットとしており、「特殊なデータセットが必要となる」「表現がデータセットによって制限される」などの問題があったが、CLIPassoはそれらの問題を克服している。
手法
https://scrapbox.io/files/620dcbb83f4a7f001dec15dd.png
input画像Iのsaliency map(顕著性マップ)を作成する。
その画像を人が見ると、視線はどこに向くか?をピクセル単位で考えたものが Saliency Map(顕著性マップ) です。
https://qiita.com/ttyszk/items/833d3753248bbc8a211f
ストロークの最初の位置をsaliency mapを元に作成。
最適化の各ステップにおいて、ストロークパラメータを微分可能なラスタライザRに送り、ラスタライズされたスケッチを作成する。
生成されたスケッチと元のインプット画像をCLIPに送って損失をとり、バックプロパゲーションでストロークパラメータを更新する。
損失関数
semanticな損失
CLIPは最終層で高レベルの意味属性をエンコードする。
CLIPでインプット画像と生成されたスケッチ画像のコサイン類似度を取る。
https://scrapbox.io/files/620dde7fbfdc7d001ec7bfb3.png
geometricな損失]
CLIPの最終層のエンコードは姿勢や構造のような低次元の空間的な特徴をうまく取れないので、別に損失関数を用意してあげる必要がある。
CLIPの中間層を使って、インプット画像とスケッチ画像のユークリッド距離を計算する。
具体的にはResNet101 CLIPモデルのlayers3とlayers4を使用。
https://scrapbox.io/files/620de4bc091aa3001d388d8b.png
最終的な損失 ws = 0.1
https://scrapbox.io/files/620de57fe61093001ded3648.png
ストロークの初期位置について
https://scrapbox.io/files/620dede8d4267d00222127f8.png
初期位置をランダムにするとうまくいかない。
pretrainedのvision transformerでattentionを行う。
XDoGを使って線画抽出を行い、それらを用いてストロークの初期位置を決定する。(この辺りあまりよく分かってない。)
検証方法
定性評価
https://scrapbox.io/files/620e05bf692a01001d9db33b.png
https://scrapbox.io/files/620e05c840d30900204d0ce7.png
既存手法との比較
異なる抽象化レベルの比較
https://scrapbox.io/files/620e0659692a01001d9dbe9e.png
image to sketchとの比較
https://scrapbox.io/files/620e0773b35d2a001dfd2120.png
CLIPDrawとの比較
https://scrapbox.io/files/620e077bde8e7200231d3ff8.png
定量評価
table1
SketchyCOCOの動物のクラスを5つ用意して、それぞれモデルを変えたりストローク数を変えたりして、画像を生成。
category levelでは動物のカテゴリーの
instance levelでは同一カテゴリー内の
説明テキストとスケッチ画像の一致率を比較する。
https://scrapbox.io/files/620e0e175624a0001dbd8f93.png
議論、課題
背景がある画像では抽象度が高くなると、性能が低下する。
これの改善には自動のマスク生成が必要になり、新しい損失の定義が必要になる。
所望の抽象度を達成するためにはストロークの設定が必要。
次に読むべき論文
#tech_survey