Upgrade to Pro — share decks privately, control downloads, hide ads and more …

[論文読み] GroomCap: High-Fidelity Prior-Free Hair ...

[論文読み] GroomCap: High-Fidelity Prior-Free Hair Capture

・多視点画像から高品質な3D髪型を復元
・大規模データpriorに頼らないため、多様なスタイルに対応可能
・髪の3D方向をニューラル陰関数で推定するのに、確率分布を使う新しいアプローチ
・頭皮から3D方向をトレースすることで初期カーブを生成し、3DGSで最適化
・[Limitation] 強いカールや薄毛はうまく扱えていない

[関連研究]
・CT2Hair: https://yuefanshen.net/CTHair
・Dr.Hair: https://dr-hair.github.io/Dr-Hair/
・Neural Haircut: https://samsunglabs.github.io/NeuralHaircut/

Spatial AI Network

October 15, 2024
Tweet

More Decks by Spatial AI Network

Other Decks in Technology

Transcript

  1. GroomCap: High-Fidelity Prior-Free Hair Capture SIGGRAPH Asia 2024 (Journal Track)

    高山 健志 October 9, 2024 https://calciferzh.github.io/ https://arxiv.org/abs/2409.00831 プロジェクトページ等は無い模様 Spatial AI Network 勉強会
  2. やりたいこと: 高品質な3D髪型復元 • 入力は多視点撮影画像 çè CT2Hair (SIGGRAPH23) • “大規模”データの事前学習はやらない çè

    NeuralHaircut (ICCV23) • Dr.Hair (CVPR24) と似た動機 (引用なし) • カーブが必ず頭皮に接続 • シミュレーションに適用可能
  3. 入力データの前処理 • 背景/hair領域/non-hair前景のマスク • 不正確でも良い • 外部サーフェスをラフに復元 (outer mesh) •

    Google内製 The Relightable • 顔パラメトリックモデルをフィッティング (inner mesh) • 髪領域を包含するバウンディングボックス • マスク画像から生成 • (オプション) 分け目のアノテーション • ここだけ手動 分け目
  4. 次に、髪のoccupancyと3D方向を学習する • レイ上の各点における3D方向をブレンドする方法を提案 ∈ ℝ! ∈ ℝ! ∈ ℝ! ∈

    0,1 ∈ 0,1 " ∈ 0, 𝜋 " ❄ ❄ 🔥 {髪, ボディ}領域のoccupancy 髪の3D方向の極座標表現 🎥 𝐫(𝑡) = 𝐨 + 𝑡𝐪
  5. 髪の3D角度を確率分布として表現 • ある地点 𝐱 ∈ ℝ' における髪の3D角度が (𝜃𝐱 , 𝜙𝐱

    ) であるとき、 これを確率分布に変換する: • 古典的なボリュームレンダリングで、レイ上の3D角度分布を積分 ℎ𝐱 " 𝜃, 𝜙 = - #$%& & - '$%& & 1 𝛽 𝜃 − 𝜃𝐱 + 𝑖𝜋 ( + 𝜙 − 𝜙𝐱 + 𝑗𝜋 ( + 𝛿 ℎ𝐱 𝜃, 𝜙 = 1 𝐶𝐱 ℎ𝐱 " 𝜃, 𝜙 𝜃𝐱, 𝜙𝐱 = 36°, 18° が表す確率分布 𝜃𝐱, 𝜙𝐱 = 162°, 126° が表す確率分布 6:4の比率でブレンド 𝜃 𝜙 周期性を考慮 正規化 ・𝛽と𝛿はハイパラ ・Gaussianカーネルも試したが、良くなかった
  6. 3D角度分布を2D角度分布に変換し、ロスを計算 𝑓(𝜂) = 1 𝐶6 max (7,8)∈: 𝑔 𝜃, 𝜙

    2D平面に投影すると角度が 𝜂 となる ような3D角度の集合 (事前計算可能) 入力画像に対する Gaborフィルタのレスポンス 𝜂
  7. 髪/ボディ領域のoccupancy 𝜌! , 𝜌" の学習 • NeRFでRGBの代わりに 𝜌) , 𝜌*

    を描画 è ラベルマップ 𝜓) , 𝜓* を得る • 複数種類 (𝑚=3) の教師データを組み合わせる è NeRFにより自然と3D空間的整合性が 保たれて、ベストな結果が得られる • 最終的なロス: • レイの範囲を限定するためにouter meshを利用 100 ℒ+,- + 0.02 ℒ+.. GT GT
  8. 前進オイラー法によるトレーシング • 髪ボリューム領域に一様にシード点を生成 • 髪の密度 𝜎 " 𝜌! を優先度として priority

    queue に入れる • 最も優先度の高いシード点を起点として、 NeRFで推定した3D方向 𝐠 に沿って伸ばしていく • 以下の条件を一定回数満たしたら停止 • 先端における 𝜎 または 𝜌" が閾値未満 • 先端がバウンディングボックスまたは outer mesh の外に出ている • トレースしたカーブの付近に存在するシード点の優先度を下げる 成長方向 慣性 前後の向きを選択 inner meshへのめり込みを防ぐ 先端の頂点座標 3mm (基本的に先行研究を踏襲) (説明が雑)
  9. 前進オイラー法によるトレーシング • 先述の方法で生成したカーブを volume hair と呼ぶ • volume hair が頭皮と接続することは稀

    è 頭皮からもトレースし (scalp hair) 、うまくvolume hairと繋げる • 頭皮上で一様にシード点を生成 • 初期の成長方向は頭皮法線 • 各volume hairが頭皮に接続していない場合、付近のscalp hairをランダムに選 び、それに沿ってvolume hairを頭皮に向かって伸ばす • この方法で99%のvolume hairは頭皮に接続できる • 接続できないものは捨てる • 分け目のアノテーションがある場合、 それを横切るカーブを捨てる • 最終的に約3万本のカーブを得る (説明が雑)
  10. 3DGSのパラメタ • 中心位置 ∈ ℝ' • 共分散行列 ∈ ℝ'×' •

    色 ∈ ℝ' • Hallucinationを防ぐため、 SH係数は使わない • 透明度 ∈ (0,1] 𝐯; + 𝐯;<= 2 𝐶 = 𝐸𝐷>𝐸? 𝐸 = 𝐞# , 𝐞# ", 𝐞# "" ) 𝐷 = diag 𝜏* , 𝜏+ , 𝜏+ 𝐞# = norm 𝐯#,& − 𝐯# 𝜏* = ⁄ 𝐯#,& − 𝐯# 2 𝜏+ = ⁄ 𝑑 2 カーブ1本あたりのパラメタ: • 形状を表す潜在変数 𝐥 ∈ ℝ=>P • 色 𝐜 ∈ ℝP×R • 太さ 𝐝 ∈ ℝP • 透明度 𝑜= , 𝑜> ∈ 0,1 > è 合計162次元 𝐯# 𝐯#,& 向き 大きさ Hallucinationを防ぐため自由度を減らす 𝐞! に直交するベクトル
  11. ロス • Photometric loss ℒ- • Volume guidance • 陰関数の3D方向に沿わせる

    • 貫通を防ぐ • 潜在変数が初期値からあまり 離れないようにする • 半径を小さくする • Body radius (?) 重み1 重み1 重み0.05 重み1 重み1 splitする度に2倍 重み1000
  12. 実装と計算コスト • ステップ1 (陰関数の学習) • feat. & app. net. の学習を100万ステップ

    • struct. net. の学習を100万ステップ • 16枚のGoogle TPU v5で28時間 • ステップ2 (トレーシング) • 1枚のA100 GPUで1.5時間 • 陰関数のクエリがボトルネック è キャッシュしておくことで高速化できそう • ステップ3 (最適化) • カーブVAE: 6層のエンコーダ + 4層のデコーダ • 1枚のA100 GPUで100万ステップ è 2.5時間 • 3DGSによる最適化 • 3万本〜5万本を同時に描画できないので、1/3をランダムに選んで描画 • 8枚のH100 GPUで1.5万ステップ è 1.5時間 • 最後に後処理として splitting を行い、5万本è15万本に増やす 6 FC 2 FC 8 FC 隠れユニット数は全て1024