JA EN

NeRF による 3D シーン再構成の基礎

· 約 9 分で読めます

NeRF とは - ニューラルネットワークで 3D シーンを表現する

NeRF (Neural Radiance Fields) は 2020 年に UC Berkeley の研究チームが発表した手法で、複数視点から撮影した 2D 画像群からニューラルネットワークを使って 3D シーンの暗黙的表現を学習します。従来のメッシュやポイントクラウドとは異なり、連続的な 3D 空間を関数として表現するため、フォトリアリスティックな新規視点画像の合成が可能です。ECCV 2020 で Best Paper Honorable Mention を受賞し、3D コンピュータビジョン分野に革命をもたらしました。

基本的なアイデア:

3D 空間の各点 (x, y, z) と視線方向 (θ, φ) を入力として、その点の色 (RGB) と密度 (σ) を出力するニューラルネットワーク F: (x, y, z, θ, φ) → (r, g, b, σ) を学習します。密度は視線方向に依存せず、色は視線方向に依存することで、鏡面反射などの視点依存効果を表現できます。ネットワークは 8 層の MLP (多層パーセプトロン) で構成されます。

従来手法との比較:

ボリュームレンダリング - レイマーチングによる画像生成

NeRF は学習した放射輝度場からボリュームレンダリングにより 2D 画像を生成します。カメラから各ピクセルに対応するレイ (光線) を飛ばし、レイ上の点をサンプリングしてネットワークに入力し、得られた色と密度を積分して最終的なピクセル色を計算します。

レンダリング方程式:

レイ r(t) = o + td (o: カメラ原点、d: 方向ベクトル) 上の色 C(r) は以下の積分で計算されます: C(r) = ∫T(t) * σ(r(t)) * c(r(t), d) dt。ここで T(t) = exp(-∫σ(r(s))ds) は累積透過率で、手前の点がどれだけ光を遮るかを表します。実際には離散的なサンプル点で近似計算します。

階層的サンプリング:

NeRF は粗い (coarse) ネットワークと細かい (fine) ネットワークの 2 段階でサンプリングを行います。まず 64 点を均等にサンプリングして粗いネットワークで密度を推定し、密度の高い領域に追加の 128 点を集中的にサンプリングして細かいネットワークで最終的な色を計算します。これにより空の領域での無駄な計算を削減します。

位置エンコーディング:

ニューラルネットワークは低周波関数に偏る傾向があるため、入力座標にフーリエ特徴 (位置エンコーディング) を適用します。γ(p) = [sin(2^0πp), cos(2^0πp), ..., sin(2^(L-1)πp), cos(2^(L-1)πp)] で高周波成分を明示的に入力し、細かいテクスチャの再現を可能にします。

NeRF の訓練プロセス - データ準備からモデル最適化まで

NeRF の訓練には、複数視点の画像とそれに対応するカメラパラメータ (内部パラメータと外部パラメータ) が必要です。訓練はピクセル単位の再構成損失を最小化する形で行われ、シーン全体を 1 つのネットワークに記憶させます。1 シーンにつき 1 モデルを訓練するため、汎化ではなく過学習 (memorization) が目的です。

データ準備:

COLMAP などの SfM (Structure from Motion) ツールで画像群からカメラポーズを推定します。通常 50-200 枚程度の画像が必要で、シーンを様々な角度からカバーする撮影が重要です。カメラの焦点距離、主点、歪み係数などの内部パラメータも必要です。画像間の重複率は 60% 以上が推奨されます。

訓練の流れ:

各イテレーションで訓練画像からランダムにレイをバッチサンプリング (通常 4096 本/バッチ) し、ボリュームレンダリングで予測色を計算します。損失関数は予測色と実際のピクセル色の MSE: L = Σ||C_pred(r) - C_gt(r)||^2 です。Adam オプティマイザで学習率 5e-4 から開始し、指数的に減衰させます。通常 200,000-500,000 イテレーションで収束します。

訓練時間とリソース:

オリジナルの NeRF は 1 シーンあたり NVIDIA V100 で約 1-2 日の訓練が必要でした。MLP は 8 層 x 256 ユニットの比較的小さなネットワークですが、1 ピクセルあたり数百回のネットワーク評価が必要なため、全体の計算量は膨大です。後述の高速化手法でこの問題は大幅に改善されています。

高速化手法 - Instant NGP と 3D Gaussian Splatting

オリジナル NeRF の訓練・推論速度の遅さを解決するため、多数の高速化手法が提案されています。特に Instant NGP と 3D Gaussian Splatting は実用的な速度を実現し、産業応用を可能にしました。

Instant NGP (Neural Graphics Primitives):

NVIDIA が 2022 年に発表した手法で、マルチレベルハッシュエンコーディングにより訓練を数秒-数分に短縮します。空間をマルチ解像度のグリッドに分割し、各頂点に学習可能な特徴ベクトルを配置します。ハッシュ関数で衝突を許容しつつメモリ使用量を制限し、小さな MLP (2 層 x 64 ユニット) で高品質な結果を得ます。RTX 3090 で 5 秒程度の訓練が可能です。

3D Gaussian Splatting:

2023 年に発表された手法で、NeRF の暗黙表現とは異なり、3D ガウシアン (楕円体) の集合でシーンを明示的に表現します。各ガウシアンは位置、共分散行列 (形状)、色、不透明度のパラメータを持ち、微分可能なラスタライザで高速にレンダリングします。訓練は数分で完了し、リアルタイム (30fps 以上) のレンダリングが可能です。

速度比較:

実践的なワークフロー - 撮影から 3D モデル生成まで

NeRF ベースの 3D 再構成を実際に行うための撮影テクニック、ツール選択、品質向上のコツを解説します。適切なワークフローに従うことで、高品質な 3D シーンを効率的に生成できます。

撮影のベストプラクティス:

対象物を 360 度カバーするように 50-200 枚を撮影します。カメラ間の重複率は 60-80% が理想的で、急激な視点変化は避けます。照明条件は一定に保ち、動く物体 (人、車) はマスクで除外します。スマートフォンでも十分な品質が得られますが、RAW 撮影で露出を固定すると結果が向上します。

推奨ツール:

Nerfstudio はオープンソースの統合フレームワークで、データ処理からモデル訓練、ビューア表示まで一貫したパイプラインを提供します。COLMAP でカメラポーズを推定し、Instant NGP や Nerfacto (Nerfstudio 独自手法) で訓練します。Luma AI や Polycam はスマートフォンアプリとして手軽に NeRF を体験できます。

品質向上のコツ:

NeRF の応用と今後の展望 - 産業利用から研究最前線まで

NeRF 技術は研究段階を超え、様々な産業で実用化が進んでいます。不動産、EC、映画制作、自動運転など幅広い分野で 3D コンテンツ生成の革新をもたらしています。

産業応用:

不動産業界ではバーチャルツアーの作成に活用され、物件の 3D ウォークスルーを少数の写真から生成します。EC サイトでは商品の 3D ビューアとして、消費者が任意の角度から商品を確認できます。映画・ VFX 業界では実写シーンの 3D 化により、カメラワークの自由度が飛躍的に向上しています。

動的シーンへの拡張:

D-NeRF や HyperNeRF は時間軸を追加し、動的なシーン (人の動き、流体など) の再構成を可能にします。4D 表現として時間変化する放射輝度場を学習し、任意の時刻・視点からのレンダリングを実現します。ただし訓練データの取得が困難で、マルチカメラシステムが必要です。

テキストからの 3D 生成:

DreamFusion (Google) や Magic3D (NVIDIA) は、テキストプロンプトから 3D オブジェクトを生成します。事前訓練済みの拡散モデル (Stable Diffusion) を SDS (Score Distillation Sampling) 損失で NeRF の最適化に利用し、テキスト記述に合致する 3D 形状を生成します。

今後の課題:

関連記事

単眼深度推定の技術と応用 - 1 枚の画像から奥行きを推定する手法

単眼深度推定の原理から MiDaS、DPT などの最新モデル、自動運転や AR への応用まで、深度マップ生成技術を体系的に解説します。

拡散モデルの仕組み - Stable Diffusion の技術解説

拡散モデルの原理から Stable Diffusion のアーキテクチャまで解説。DDPM、潜在拡散、CFG、高速化技術を網羅します。

転移学習で少量データから画像分類器を作る - Fine-tuning 実践ガイド

事前訓練済みモデルを活用し、100 枚程度の少量データから高精度な画像分類器を構築する転移学習の手法を PyTorch コード付きで解説します。

点群データの基礎と 3D 再構成 - 取得から処理・可視化まで

点群データの基礎知識から実践的な処理手法まで網羅的に解説。LiDAR、SfM、深度カメラによる取得方法と Open3D での処理パイプラインを紹介します。

ステレオビジョンと距離計測 - 視差から 3D 情報を復元する技術

ステレオビジョンの原理から実装まで完全解説。エピポーラ幾何、ステレオマッチング、視差マップから距離計算までの手順をコード例とともに紹介します。

機械学習向けデータ拡張の実践 - 画像 Augmentation で精度を高める手法

機械学習の画像分類・物体検出で不可欠なデータ拡張 (Data Augmentation) の手法を体系的に解説。幾何変換からミックス系まで実装例とともに紹介します。

関連用語