論文ノート NeRF: ビュー合成のためのニューラル放射フィールドとしてのシーンの表現

NeRF はニューラル ネットワークを使用してシーンを表現します。与えられたシーンで、シーンのいくつかの視点から画像を入力すると、NeRF はシーンの新しい視点から画像を合成できます。
ここに画像の説明を挿入します

神経放射線分野

Neural Radiance Field (NeRF) は、5D ベクトル値関数を使用してシーンを表します。
入力は連続 5D 座標 (位置x = ( x , y , z ) \mathbf x = (x,y,z) を含む) です。バツ=( x ,z )と視野角方向d = ( θ , ϕ ) \mathbf d = (\theta, \phi)d=(ϕ ) )、出力は発光色c = ( r , g , b ) \mathbf c = (r, g, b)c=( r ,g b )と体積密度σ \sigmaσ
具体的には、完全に接続されたネットワークを使用してこのシナリオを近似します。つまり、F Θ : ( x , d ) → ( c , σ ) F_{\Theta}:(\mathbf x, \mathbf d) \rightarrow (\mathbf) を学習します。 c , \sigma)FTh:( x ,d )( c σ )
著者らは、かさ密度を場所だけに依存させることを推奨しています。したがって、ネットワーク構造は、最初に位置x \mathbf xx、出力σ \sigmaσと固有ベクトル。次に、特徴ベクトルと視野角方向が結合され、最終的にc \mathbf cc色。
シナリオごとに 1 つの NeRF をトレーニングする必要があることに注意してください。

位置エンコーディング

高周波関数を使用して入力をネットワークに渡す前に高次元空間にマッピングすると、高周波変動を含むデータによりよく適合させることができます。したがって、Transformer と同様に、著者はx, d \mathbf x, \mathbf dを変換することを提案します。× dは三角関数を使用して高次元空間にマッピングされ、ネットワークに入力されます:
ここに画像の説明を挿入します
pppは各座標の値です (x \mathbf xx中的 x , y , z x,y,z × z

放射フィールドを使用した立体レンダリング

放射線照射野を一致させるために、作成者はボリューム レンダリングを使用して画像をレンダリングします。
立体視レンダリングについては、https://zhuanlan.zhihu.com/p/595117334
を参照してください。体積密度σ ( x ) \sigma(\mathbf x)σ ( x )は、位置x \mathbf xの光として解釈できます。xにおける無限小粒子で終わる微分確率
ステレオスコピック レンダリングでは、カメラ レイr ( t ) = o + td \mathbf r(t) = \mathbf o + t\mathbf dr ( t )=ああ+t dの範囲は[tn, tf] [t_n, t_f][ tt]希望の色C ( r ) C(\mathbf r)C ( r )は次のように計算します。
C ( r ) = ∫ tntf T ( t ) σ ( r ( t ) ) c ( r ( t ) , d ) dtここで、 T ( t ) = exp ⁡ ( − ∫ tnt σ ( r ( s ) ) ds ) C(\mathbf r) = \int_{t_n}^{t_f} T(t) \sigma(\mathbf r(t)) \mathbf c(\mathbf r(t), \mathbf d) dt \\ ここで~~ T(t) = \exp(-\int_{t_n}^t \sigma(\mathbf r(s))ds)C ( r )=ttT ( t ) σ ( r ( t )) c ( r ( t ) d ) d tここT ( t ) _  =exp ( tσ ( r ( s )) d s )連続神経放射場からのビューをレンダリングするには、目的の仮想カメラのカメラ光線上のすべてのピクセルをトレースして、積分C ( r ) C(\mathbf r)C ( r )

上の式の積分は実際には数値的に計算され、サンプリングと合計が必要になります。ただし、サンプリングが特定の点で固定されている場合、表現の解像度は制限されます。この問題を解決するために、著者は層化サンプリング法を使用することを提案します。まず、[tn, tf] [t_n, t_f][ tt]これを同じサイズの N 個のバケットに均等に分割し、各バケットでサンプルをランダムにサンプリングします。
ti 〜 U [ tn + i − 1 N ( tf − tn ) , tn + i N ( tf − tn ) ] t_i \ sim \mathcal U [t_n + \frac{i-1}{N}(t_f - t_n), t_n + \frac{i}{N}(t_f - t_n)]t私はU [ t+N1( ttt+N私は( tt)]サンプリングされたサンプルは依然として離散的ですが、最適化プロセスは周期的であり、複数のサンプリングが必要です。各サンプリングは異なる位置にサンプリングできるため、連続位置での最適化と同等です。サンプリングされたサンプルを使用してC ( r ) C(\mathbf r)C ( r )の方法は次のとおりです。
C ^ ( r ) = ∑ i NT i ( 1 − exp ⁡ ( − σ i δ i ) ) ciwhere T i = exp ⁡ ( − ∑ j = 1 i − 1 σ j δ j ) (1) \hat C(\mathbf r) = \sum_{i}^{N} T_i (1-\exp(-\sigma_i \delta_i)) \mathbf c_i \\ ここで~~ T_i = \exp(- \sum_{j=1}^{i-1} \sigma_j \delta_j) \tag{1}C^ (r)=NT私は( 1exp ( p私はd私は)) c私はここT _  私は=exp ( j = 1i 1pjdj( 1 )その中δ i = ti + 1 − ti \delta_i = t_{i+1} - t_id私は=t+ 1t私はさらに、C ( r ) C(\mathbf r)を推定します。C ( r )の方法は微分可能であるため、パラメーターを簡単に最適化できます。

階層的なステレオサンプリング

NeRF 値が各カメラ レイに沿った N クエリ ポイントで密に計算される場合、レンダリングされたイメージに寄与しない空き領域とオクルージョン エリアがオーバーサンプリングされるため、このようなレンダリング戦略は非効率的です。
この問題を解決するために、著者は 2 つのネットワーク、1 つは粗粒度 (粗い) で、もう 1 つは粒度の細かい (細かい) ネットワークをトレーニングすることを提案しました。まず、粗粒度ネットワークが階層的にサンプリングされますN c N_cNc点を計算し、C ^ c ( r ) \hat{C}_c(\mathbf r) を計算します。C^c(r)
ここに画像の説明を挿入します标准化 w ^ i = w i ∑ j w j \hat{w}_i=\frac{w_i}{\sum_j w_j} w^私は=jwjw私は、分布の確率密度関数を取得できます。この分布に従って、逆変換サンプリングを使用してN f N_fを取得します。Nポイント。このN f N_fNポイントは、レンダリングに対する重要性に基づいて取得されます。
次に、きめの細かいネットワークを使用して、このN c + N f N_c + N_fを計算します。Nc+Nポイントの値、式 (1) を使用して最終的な光の色C ^ f ( r ) \hat{C}_f(\mathbf r)を計算します。C^( r )
この階層的方法では、表示部分内のより多くのポイントをサンプリングできます。

電車

各シナリオには個別の NeRF トレーニングが必要です。入力には、シーンの RGB イメージのセットに加えて、対応するカメラ位置、カメラの内部パラメータ、およびシーン境界 (COLMAP などのモーションからの構造ライブラリを使用して推定できます) も含まれます。
トレーニングされた損失関数は、レンダリングされたピクセルと実際のピクセルの間の二乗誤差です。
ここに画像の説明を挿入します
ここで、R \mathcal RR は光線のバッチ コレクションです。トレーニングの各ループでは、カメラ レイのバッチがピクセルからランダムにサンプリングされます。
最終的なレンダリング イメージは細粒ネットワークによって生成されますが、粗粒ネットワークはサンプリング ポイントの位置を提供するため、粗粒ネットワークもトレーニングする必要があります。

おすすめ

転載: blog.csdn.net/icylling/article/details/129064698