550 Views
October 28, 22
スライド概要
2022/10/28
Deep Learning JP
http://deeplearning.jp/seminar-2/
DL輪読会資料
Novel View Synthesis with Diffusion Models Naruya Kondo (Digital Nature Group M2) 1
書誌情報 ● Novel View Synthesis with Diffusion Models ○ Arxiv (Submitted on 2022/10/6) ○ 著者:Google ■ Daniel Watson, William Chan, Ricardo Martin-Brualla, Jonathan Ho, Andrea Tagliasacchi, Mohammad Norouzi ○ プロジェクトページ (⇦ 必見) ● ひとことで言うと ○ Diffusion modelで1枚の画像からNovel View Synthesis (NVS)する 3DiM を提案 ○ (不可能なはずの)厳密な三次元復元にはあまりこだわらないかわりに、高品質な画像生成と高い三次 元の一貫性を出せるのが特徴 ● 選んだ理由 ○ 何かしらdiffusion系をちゃんと読んでおきたいと思い ○ (結果が良すぎて嘘くさい気がした) 2
プロジェクトページ 3
本論文の貢献 1. Novel View Synthesis のための Diffusion Model である 3DiM を提案 (3DiM: 3D Diffusion Model) 2. diffusion step で確率的に(input viewの)条件付けを行う、 "stochastic conditioning" を提案 3. 三次元の一貫性を高めるために UNet を改良した X-UNet を提案 4. 三次元の一貫性を考慮するための新しい評価方法 "3D consistency score" を提案 4
(前提知識) 5秒でわかる Diffusion Model • 基本だいたい Denoising Diffusion のこと (要出典) • ノイズからデータを生成できるやつ • 学習時: • 推論時: • 様々な加減(1000段階くらい)でノイズを足し (x_{t} = x_{t-1} + noise), 足されたノイズをUNet等で予測する (noise = UNet(x_{t})). 予測したnoiseのL1 or L2 lossを最小化する (だけ) 学習したモデルで、ただのノイズ画像から1000回くらいノイズを除去 猛者による1ファイル完結の実装: https://github.com/lucidrains/denoising-diffusion-pytorch/blob/main/denoising_diffusion_pytorch/denoising_diffusion_pytorch.py 5
既存手法の問題点 • Few shotなNeRF系 (reg nerfなど) – 他のシーンで学習した知見を活用できない – 見えない部分がぼやける • Few shotで空間にencodeする系 (pixel nerfなど) – 他のシーンに知見を活用できるが、エンベディングベースなのでぼやける ⇨ あらゆるシーンのNVSに活用できて、ぼけない手法が欲しい 6
3DiM: 3D Diffusion Model 7
Pose Conditional Diffusion Model • 3DiM が基本的にやりたいこと – ⇨ input {pose + view}, target pose から target viewを生成したい! 推論時は完全な ノイズからスタート R: 回転行列, t: 並進ベクトル (target/query両方の R と t を入れる) 実際には、各 pixelに対応する 光線の始点と向き (0~1) を、 sin cos で positional embedding – ⇧ 基本このDiffusion Modelを学習させる (割と強引な気もする(?)) • 生成は普通のdenoising diffusion同様にUNet系を使う (UNetが単純に強い(重要)) – Poseは Positional Embedding をして、画像と一緒に入力 8
3DiM: 3D Diffusion Model ⇦ このdiffusion stepは 250回 (注: 恐らくサイコロの絵はただ ランダムだと言いたいだけで、 傾きは関係なさそう) • 3次元の一貫性を出すため、input view + 生成したview の全てで条件付けして、新しいviewを生成 • conditioningするviewはdiffusion step枚にランダムに選択 – (⇧生成した全viewも含めてconditioningするとメモリが大変なことになる問題への工夫) 9
XUNet • • 1. 2. 3. • タスク: (embeddingされた) input view, input noiseを入力にして、 noiseだけを出力する 基本UNet。違い⇩ 2枚のviewの処理に用いるNNの重 みを共有する pose と noise level をpositional encodingしてinputに追加する 基本は各viewで独立した処理をする が、途中でcross attentionを入れる 実装的には、 input view, input noise両方に対 してそれぞれの pose / noise level enbedding をし、それぞれの noise を出力する (重みの共 有をしているため ) 10
学習 • diffusion process z: noise付きのview σ: sigmoid 関数 k: 何個目のviewか • loss • diffusion reverse process (推論 / 条件付け用) ⇦基本(2)をx_kの式に 変えただけ x_iはランダムに選ぶ 11
評価 PSNR (peak signal to noise ratio): - とりうるmseのmaxと2画像のmseの比 SSIM (structure similarity): - 小さい領域の画素値の平均や分散で2画像の類似度を 定義 FID (Fréchet inception distance): - 画像の集合同士の距離を、各画像のinception netで 抽出した特徴量の距離で定義 • PSNR, SSIMは結構低い。FIDだけ良い 12
3D consistency score • 正当な評価ができていない! – PSNR / SSIM は正解画像と比較するので、悪化して当然 – そもそも1 viewで完全に正しい三次元構造を予測することは無理であり、正しい viewを生成することよりも、三次元の一貫性を評価するべき! • 3D consistency score – Geometry Free な NVS の三次元の一貫性を評価する新しい方法 – NVSで生成した画像を基にNeRFを学習させ、 NeRFがうまく学習できれば (生成した画像と比較して PSNR / SSIM が悪くないことが確認できれば)、 一貫性が高いと言える – ⇨ 本当は違うGeometryだったことにして、評価をし直してあげる 13
3D consistency score もともとのデータ セット(正しいジオメ トリ)でNeRFを学習 ⇨ 本当は違う ⇨ ジオメトリだったこ とにしてあげて、 3DiMで生成した画 像でNeRFを学習 PSNR/SSIMは悪化してな い! (既存手法はPSNR/SSIM が弱すぎる) 14
Ablation Im-to-Im - stochastic conditioning なし Concat-UNet - 単純にinputをconcatするだけの UNet - パラメタシェアとかなし Regression - 1 step のdiffusion model - 直接 target view を推定 • そもそもUNetだけでも割と構造的には正しい生成ができる (Concat-UNet) • が、それぞれ表現力は低い。 15
まとめと感想 • • • • • 3DiM: NVS のための diffusion model "stochastic conditioning" UNet を改良した X-UNet "3D consistency score" 厳密な三次元復元にはあまりこだわらないかわりに、高品質な画像生成と高い三次元 の一貫性を出せる • 結果の見た目が良すぎるのには納得した – UNetとposeのpositional embeddingでだいたい向きは合う +diffusionで最強 • 個人的に「厳密な三次元復元にこだわらない教」なのでぜひ使っていきたい 16