Neural Radiance Fields (NeRF) の手法解説

概要

Neural Radiance Fields (NeRF) は、複数の視点から撮影された写真群をもとに、シーンの3D表現をニューラルネットワークの重みとして学習する手法である。学習されたモデルを用いることで、そのシーン内の任意の新しい視点からの画像を非常に高い品質で生成(レンダリング)することができる。

NeRFの核となるアイデアは、シーンを「ある位置(x, y, z)からある方向(θ, φ)を見ると、どのような色(r, g, b)が見え、その空間にどれくらいの密度(σ)の物質が存在するか」を返す、連続的な5次元関数として表現することである。この関数をMLP(多層パーセプトロン)で近似し、古典的なボリュームレンダリングの手法と組み合わせることで、微分可能なレンダリングパイプラインを構築する。

1. Neural Radiance Fieldによるシーン表現

シーンは連続的な5次元ベクトル関数として表現される。この関数は、入力として3次元の位置座標 x = (x, y, z) と2次元の視線方向 d (単位ベクトル) を受け取り、出力としてRGB色 c = (r, g, b) とボリューム密度 σ を返す。

FΘ: (x, d) → (c, σ)

この関数 FΘ は、MLP(ニューラルネットワーク)によって近似される。多視点間で矛盾のない一貫したシーンを表現するため、以下のような制約を設けている。

  • ボリューム密度 (σ): 物体の形状を表し、視点方向には依存しない。そのため、位置座標 x のみから予測される。
  • 色 (c): 鏡面反射(スペキュラ)のように、見る角度によって変化する現象を捉えるため、位置座標 x と視線方向 d の両方から予測される。

ネットワーク構造

MLPは以下のような構造をしている。

  1. 入力された3D位置座標 x を8層の全結合層(ReLU活性化関数、256チャネル)に通す。
  2. 8層目の出力から、ボリューム密度 σ と256次元の特徴ベクトルを得る。
  3. この特徴ベクトルと、入力された視線方向 d を結合する。
  4. 結合したベクトルを1層の全結合層(ReLU活性化関数、128チャネル)に通し、最終的なRGB色 c を出力する。

2. Radiance Fieldを用いたボリュームレンダリング

5DのNeural Radiance Fieldから画像をレンダリングするために、古典的なボリュームレンダリングの原理を用いる。あるカメラレイ(光線)r(t) = o + tdoはカメラ原点、dはレイの方向)が最終的にどのような色になるかは、以下の積分式で計算できる。

C(r) = ∫tntf T(t) σ(r(t)) c(r(t), d) dt
ここで T(t) = exp(-∫tnt σ(r(s)) ds)
  • C(r): レイ r の最終的な色。
  • tn, tf: レンダリング範囲の近端と遠端。
  • σ(r(t)): レイ上の点 r(t) での密度。
  • c(r(t), d): レイ上の点 r(t) から方向 d に放射される色。
  • T(t): 透過率。レイが tn から t まで進む間に他の粒子に遮られなかった確率。

離散化と層化サンプリング

この積分をコンピュータで計算するために、離散的な点の集まりで近似する。NeRFでは、層化サンプリング (Stratified Sampling) という手法を用いる。

  1. レイ上のレンダリング区間 [tn, tf]N 個の均等な区間(ビン)に分割する。
  2. 各ビンの中から、ランダムに1点ずつサンプル点を抽出する。

このサンプリングにより、学習の過程でMLPが連続的な位置で評価されるため、高周波な詳細を持つシーンを表現することが可能になる。 サンプリングされた点群 (ci, σi) から最終的なピクセルの色 Ĉ(r) は、以下の離散的なボリュームレンダリングの式(実質的にはアルファコンポジティング)で計算される。

Ĉ(r) = Σi=1N Ti (1 - exp(-σiδi)) ci
ここで Ti = exp(-Σj=1i-1 σjδj)
αi = 1 - exp(-σiδi)

この計算過程はすべて微分可能であるため、勾配降下法によるネットワークの最適化が可能である。

3. Neural Radiance Fieldの最適化

上記の基本的な構成だけでは、複雑なシーンを高解像度で表現するには不十分である。そのため、NeRFでは以下の2つの重要な改良を加えている。

3.1 Positional Encoding

ニューラルネットワークは、一般的に低周波な関数を学習しやすいという特性がある。そのため、入力座標 (x, y, z) をそのまま利用すると、テクスチャや形状の細かい変化(高周波成分)を再現することが困難である。 この問題に対処するため、入力座標をPositional Encodingによって高次元空間にマッピングしてからネットワークに入力する。

γ(p) = (sin(20πp), cos(20πp), ..., sin(2L-1πp), cos(2L-1πp))

この関数 γ(・) を位置座標 x と視線方向 d の各成分に適用する。これにより、ネットワークは高周波な関数を学習しやすくなり、レンダリング品質が劇的に向上する。

3.2 Hierarchical Volume Sampling (階層的ボリュームサンプリング)

カメラレイに沿って一様に点をサンプリングする戦略は非効率である。なぜなら、空中の何もない空間や、他の物体に隠されて見えない領域にも多くの計算リソースを割いてしまうからである。そこで、より効率的にレンダリングを行うために階層的なサンプリング手法を導入する。

この手法では、"Coarse"(粗い)と"Fine"(細かい)の2つのネットワークを同時に最適化する。

  1. Coarse パス: まず、レイに沿って層化サンプリングで Nc 個の点をサンプリングし、Coarseネットワークで色と密度を評価する。
  2. 重みの計算: Coarseパスの結果から、レイ上の各点の色が最終的なピクセルの色にどれだけ貢献するかを示す重み wi を計算する。この重み分布は、物体が存在する可能性が高い場所を示す。
  3. Fine パス: この重み分布を確率密度関数(PDF)とみなし、逆変換サンプリングを用いてさらに Nf 個の点をサンプリングする。これにより、物体が存在する可能性が高い領域にサンプルが集中する。
  4. 最終レンダリング: 最初にサンプリングした Nc 点と、追加でサンプリングした Nf 点を合わせた全ての点でFineネットワークを評価し、最終的なピクセルの色を計算する。

この階層的サンプリングにより、計算リソースをシーンの重要な部分に集中させ、レンダリングの品質と効率を向上させる。

損失関数

学習時の損失関数は、CoarseとFineの両方のレンダリング結果と、実際の画像(Ground Truth)のピクセル色との二乗誤差の合計である。

L = Σr [ ||Ĉc(r) - C(r)||2 + ||Ĉf(r) - C(r)||2 ]

Coarseネットワークの損失も計算に含めることで、Fineパスのためのサンプリング分布が適切に学習されるよう促す。

まとめ

NeRFは、シーンを連続的な5次元関数(Neural Radiance Field)として表現する革新的な手法である。この関数はMLPによってパラメータ化され、任意の位置と方向における色と密度を出力する。古典的なボリュームレンダリング手法を応用することで、この連続的な表現から2D画像を微分可能な形でレンダリングする。特に、高周波な詳細を捉えるためのPositional Encodingと、効率的なレンダリングを実現する階層的ボリュームサンプリングが、高品質な結果を得る上で極めて重要である。これらの要素を組み合わせることで、NeRFは入力された画像群からシーンの複雑な形状と材質を学習し、フォトリアリスティックな任意視点画像を合成することを可能にした。

原著論文

本記事で解説した論文は、以下のリンクから閲覧できる。

Mildenhall, B., et al. (2020). NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis. In ECCV.