11.9K Views
March 20, 24
スライド概要
AI・機械学習を勉強したい学生たちが集まる、京都大学の自主ゼミサークルです。私たちのサークルに興味のある方はX(Twitter)をご覧ください!
2023年度論文読み会#11(3Dデータ論文読み会#6) 任意視点からの画像を生成するNeRF 京都大学理学部 3回生 松田拓巳 元論文 NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 0
NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis 目次 1. 論文の概要 2. 提案手法 3. 実験結果 1
1. 論文の概要 2
1. 論文の概要 1.1 複数視点の2D画像を使って、任意視点からの2D画像を生成 1. Input Images:複数視点からの2D画像を撮影する 2. Optimize NeRF:モデルを学習 3. Render new views:任意視点からの2D画像を生成 3
1. 論文の概要 1.2 論文手法 ⚫ 視線方向上の各点の色と不透明度*をNNで予測し、各点の情報を集約して1pixelの色を求める ⚫ NNの構造は、ちょっと工夫を入れたMLP(畳み込み不使用) ⚫ Diffuse Synthetic 360°,Realistic Synthetic 360°においてSoTAを達成 *論文では体積密度(volume density)と表記されているが、 本スライドではイメージのしやすさのため不透明度と表現する 4
1. 論文の概要 1.3 デモを見てみよう ⚫ こちらのサイトにたくさんの例が掲載されている https://www.matthewtancik.com/nerf 5
2. 提案手法 6
2. 提案手法 2.1 モデルの概要(forward) 1. ある視線方向 𝐫 上に何点かサンプリングする 2. 各点の(𝑥, 𝑦, 𝑧, 𝜃, 𝜑)をNNに入力し、点の色 𝒄 と不透明度 𝜎 を得る(色:𝑥, 𝑦, 𝑧, 𝜃, 𝜑に依存、不透明度:𝑥, 𝑦, 𝑧に依存) 3. 各点が発する色が視点に届いたときに何色になるかを計算(NNではない。式に代入して計算) 4. 視線方向を変えて上記を繰り返す(画像の全pixel分) 7
2. 提案手法 2.1 モデルの概要(学習) 1. ある視線方向 𝐫 上に何点かサンプリングする 2. 各点の(𝑥, 𝑦, 𝑧, 𝜃, 𝜑)をNNに入力し、点の色 𝒄 と不透明度 𝜎 を得る(色:𝑥, 𝑦, 𝑧, 𝜃, 𝜑に依存、不透明度:𝑥, 𝑦, 𝑧に依存) 3. 各点が発する色が視点に届いたときに何色になるかを計算(NNではない。式に代入して計算) 4. 実際の色との誤差(L2距離)を計算し逆伝播を行いNNの重みを更新 8
2. 提案手法 2.2 ① ある視線方向𝐫上に何点かサンプリングする ⚫ ほぼ等間隔に𝑁点を取る:𝑡𝑖 ∼ 𝒰 𝑡𝑛 + この点のRGBを 求めたい 𝑖−1 𝑁 𝑡𝑓 − 𝑡𝑛 , 𝑡𝑛 + 𝑖 𝑁 𝑡𝑓 − 𝑡𝑛 このスクリーン上に 画像を生成する 𝑡1 𝑡2 𝑡3 𝑡4 𝑡5 𝑡6 𝑡𝑓 𝑡𝑛 9
2. 提案手法 2.2 ② 各点の(𝑥, 𝑦, 𝑧, 𝜃, 𝜑)をNNに入力し、点の色 𝒄 と不透明度 𝜎 を得る 色 𝐜1 = (𝑟1 , 𝑔1 , 𝑏1 ) &不透明度 𝜎1 MLP 視線方向 (𝜃, 𝜑) 空間座標 (𝑥1 , 𝑦1 , 𝑧1 ) 𝑡1 𝑡2 𝑡3 𝑡4 𝑡5 𝑡6 𝑡𝑓 𝑡𝑛 10
2. 提案手法 2.2 ③ 各点が発する色が視点に届いたときに何色になるかを計算 𝑁 𝑖−1 𝐶መ 𝐫 = 𝑇𝑖 1 − 𝑒 −𝜎𝑖 𝛿𝑖 𝒄𝑖 , where 𝑇𝑖 = exp − 𝜎j 𝛿𝑗 𝑖=1 これでスクリーン上の 1点のRGBがわかった 𝑗=1 (𝐜6 , 𝜎6 ) (𝐜5 , 𝜎5 ) (𝐜4 , 𝜎4 ) (𝐜3 , 𝜎3 ) (𝐜2 , 𝜎2 ) 𝑡6 (𝐜1 , 𝜎1 ) 𝑡5 𝑡4 𝑡 3 𝑡2 𝑡𝑓 𝑡1 𝛿5 𝛿2 𝑡 𝛿 𝑛 1 11
2. 提案手法 2.2 ④ 方向を変えて繰り返す ⚫ これを全pixel分繰り返せば、この視点から見た の画像が完成する 12
2. 提案手法 2.2 学習するときはどうするか? ⚫ 真の画像とレンダリング後画像との誤差を計算し、逆伝播してNNの重み更新 ground truth レンダリング後画像 誤差 (L2距離) 誤差 (L2距離) ground truth レンダリング後画像 13
2. 提案手法 2.3 NNの詳細 – ポイント ⚫ 10層の全結合層をもつニューラルネットワーク ⚫ 入力する前にPositional Encodingを行う(下図の関数𝛾(⋅)に相当) ⚫ (𝑥, 𝑦, 𝑧)と(𝜃, 𝜑)は別の箇所から入力、出力も𝜎とRGBは別の箇所から出てくる 14
2. 提案手法 2.3 NNの詳細 – Positional Encoding 𝛾 𝑝 = sin 20 𝜋𝑝 , cos 20 𝜋𝑝 , ⋯ , sin 2𝐿−1 𝜋𝑝 , cos 2𝐿−1 𝜋𝑝 ⚫ 𝑝には𝑥, 𝑦, 𝑧, 𝜃, 𝜑が入る(予め[-1,1]に正規化しておく) ⚫ 𝑥, 𝑦, 𝑧に対しては𝐿 = 10、𝜃, 𝜑に対しては𝐿 = 4と本研究では設定 ⚫ Positional Encodingを行わないと、下図のようにぼやけてしまう(高周波表現が苦手) 15
2. 提案手法 2.3 NNの詳細 – 構造 ⚫ (𝑥, 𝑦, 𝑧)と(𝜃, 𝜑)は別の箇所から入力、出力も𝜎とRGBは別の箇所から出てくる ⚫ なぜそんなことをするのか? • 不透明度𝜎は、視線角度 𝐝 = (𝜃, 𝜑) に依存してほしくない • 色(RGB)は、位置 𝐱 = (𝑥, 𝑦, 𝑧) と視線角度 𝐝 = (𝜃, 𝜑) に依存してほしい 𝐱のみだと鏡面反射を表現できてない 𝐱の情報しか 見ずに出力 𝐱, 𝐝の情報を 見て出力 16
2. 提案手法 2.4 計算量削減の工夫 – 階層的ボリュームサンプリング ⚫ 何もない領域の点をサンプリングするのは効率が悪い ⚫ 「粗いNN」と「細かいNN」の2つを使う • 粗めに𝑁𝑐 個サンプルし「粗いNN」の出力にもとづいて重みをつける • 重みが大きい所を重点的に𝑁𝑓 個追加でサンプル • 𝑁𝑐 + 𝑁𝑓 個を使って画像レンダリング 𝑁𝑐 𝐶መ𝑐 𝐫 = 𝑤𝑖 𝑐𝑖 , where 𝑤𝑖 = 𝑇𝑖 (1 − 𝑒 −𝜎𝑖 𝛿𝑖 ) 𝑖=1 17
2. 提案手法 2.5 実装の詳細 ⚫ 損失関数 (c=coarse, f=fine, 𝐫=ray) ℒ= 𝐶መ𝑐 𝐫 − 𝐶 𝐫 2 መ𝑓 𝐫 − 𝐶 𝐫 + 𝐶 2 2 2 𝐫∈ℛ ⚫ 𝑁𝑐 = 64, 𝑁𝑓 = 128, ℛ = 4096ray ⚫ 最適化手法 • Adam(𝛽1 = 0.9, 𝛽2 = 0.999, 𝜖 = 10−7 ) • 学習率 = 5 × 10−4 exp 5 × 10−5 ⚫ NVIDIA V100 GPU1枚で学習に1~2日かかる(1万~3万iteration)←クソ遅い • 推論は1フレーム当たり30秒くらいかかる 18
■補足|NeRFの学習速度を爆速にしたInstant NGP ⚫ Multiresolution Hash Encodingという手法でNeRFの学習を5~15秒程度に ※JAXNeRF:NeRFをJAX(Google製の機械学習用ライブラリ)で実装したもので、元祖論文の実装(TensorFlow)よりも高速 • 参考サイト 複数の視点の画像から新しい視点の画像を生成する技術「NeRF」とその学習速度を大幅に改善した研究の紹介 (https://www.ibis.ne.jp/blog/20221117-nerf/) 19
3. 実験結果 20
3. 実験結果 3.1 従来手法との定量的な比較 ⚫ Diffuse Synthetic 360°,Realistic Synthetic 360°,Real Forward-Facingで評価 ⚫ 評価指標 • PSNR:ground-truthとの画素値誤差(MSE)に依存する類似度計算方法(大きいほど良) • SSIM:画素単体だけでなく画素周囲の情報も考慮した類似度計算方法(大きいほど良) • LPIPS:学習済みCNNで抽出した特徴量を利用した類似度計算方法(小さいほど良) 21
3. 実験結果 3.2 従来手法との定性的な比較 ⚫ 従来手法では表現でき ていなかった細部まで NeRFは表現可能に ⚫ 従来手法の論文リンク • LLFF(SIGGRAPH 2019) • SRN(NeurIPS 2019) • NV(SIGGRAPH 2019) 22
3. 実験結果 3.3 Ablation studies ⚫ Ablation study:削除実験。モデルのどの部分が結果に重要な貢献をしているか調べる 23
24