アドバンストビジョン

第11回: NeRFと3DGS

千葉工業大学 上田 隆一


This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.

アドバンストビジョン第11回

今日やること

  • SfM(structure from motion)
    • 本当は細かくやるべきだけど概要だけ
  • NeRF(neural radiance fields)
  • 3DGS(3D Gaussian splatting)
アドバンストビジョン第11回

SfM

  • カメラ画像からカメラの位置・姿勢と被写体の3次元形状を復元する問題・技術
  • SLAMとの違い
    • Visual SLAMとあまり変わらないが、より被写体の形状に興味がある
      • 基本的なSfMはカメラの移動量を画像だけから求めようとする
      • SLAMはロボットの移動する空間にも興味がある
      • SLAMでは同じ被写体が念入りに撮れないことがある
  • ここではCOLMAP[Schönberger2016]に基づいて説明
アドバンストビジョン第11回

特徴点を利用したSfMの処理の流れ

  • カメラを用意
  • 被写体をいろんなところから写して画像を得る
    • 画像を得る
  • 各画像からSIFT等の特徴点をとる
    • 画像に対し、を得る
      • が画像上の座標、が特徴量のベクトル
  • 共通の特徴点を持つ画像のペアを見つけていく
    • ペア:
    • 特徴量のペアもできる
      (右図。SfMのものじゃないけど)

画像: CC BY-SA 3.0 by Indif

アドバンストビジョン第11回

特徴点を利用したSfMの処理の流れ(続き)

  • 各画像のペア: について互いが撮影されたときのカメラの相対位置を計算
    • 相対位置の計算方法(手法により異なる)
      • 基本行列を求める(カメラのキャリブレーションが済んでいる場合)
      • 基礎行列を求める(↑済んでいない場合に対応するとき)
      • 他、ホモグラフィー行列や三焦点テンソルなど
  • 世界座標系にひとつずつカメラの姿勢を置いていく
  • バンドル調整この出力をNeRFに使う
    • graph-based SLAMの要領(最小二乗法)で全カメラの姿勢を調整
  • 各画像のピクセルの位置を世界座標系で確定させていく
アドバンストビジョン第11回

NeRF(neural radiance fields)[Mildenhall2020]

  • 前ページのように、カメラの姿勢と画像のペアから3次元空間を復元していく
  • 従来のSfMの手法と何が違う?
    • 光の透過も扱えて再現性が高い(論文中に多くの例、比較あり)
  • 使用例
アドバンストビジョン第11回

色の表現方法

  • ある3次元空間中の点の光(radiance、輝き)を次の関数で表現
      • 点の位置と視線の向きで色を決める
      • 図4に視点で色を変える効果の例
      • 点の位置で「密度」を決める
        • 密度が低いほど光が透過
  • まとめてをANNで表現
アドバンストビジョン第11回

学習方法

  1. SfMでどこから撮影したか分かっている画像を用意
  2. 画像が撮られた姿勢からを使って画像を復元
    • 視線上のの値から各画素の色を決定
  3. 1の画像と2の画像の各ピクセルの2乗誤差を損失関数に
アドバンストビジョン第11回

構造(論文の図7)

  • 基本は全結合層+ReLUで構成
    • 図中の「」についてはあとで
  • 入力(3箇所)
    • 最初に位置を入力
    • 中間で再度、位置を連結
    • 後ろの層でを連結
  • 出力(2箇所)
    • を連結する層の1つを値に
    • 最終層の出力を値に
アドバンストビジョン第11回

図中の「

  • 位置や向きのベクトルを倍に拡張
    • 論文の実装では
      • (3次元)を60次元に
      • (2次元)を40次元に
  • 拡張の式(位置埋め込みに似ている)

      • にはが入る
  • なんで拡張するのか?
    • 値の桁の小さいところも強調して、色の変化量が大きいところの解像度を上げたい(図4に比較)
アドバンストビジョン第11回

3D Gaussian splatting(3DGS)[Kerbl2023]

  • NeRFのような光の表現を、ガウス分布を空間中に置いて表現
    • 人工ニューラルネットワークは使わない(使う必要がなかった)
      • 講師の解釈: たぶん局所的な計算で済むのでそんなに複雑な関数(ANN)の表現が不要
      • 計算時間も少ない(論文の図1): NeRFの48時間に対して6分
  • 使用例
    • 水面への映り込みなどに注目
  • NVIDIAのチュートリアル
アドバンストビジョン第11回

空間中に置くガウス分布と付随するパラメータ

次のような数十パラメータの要素(ガウス分布+付帯するパラメータ)を数百万使用

    • : 3次元空間中の位置(中心。3パラメータ)
    • : 共分散行列(7パラメータ。後述)
  • )で(不)透明度を表現(1パラメータ)
    • 誤差を微分で補正するためにシグモイド関数で表現
  • 球面調和関数のパラメータ(27パラメータや48パラメータなど。後述)
    • NeRFと同様、見る方向によって色を変えるために使う
    • ANNなら勝手に計算してくれるが、ANNでないのでモデル化が必要
アドバンストビジョン第11回

共分散行列の表現

  • 計算にはという表現を使用
    • : スケーリング行列(3次元の対角行列なので3パラメータ)
    • : 回転行列(クォータニオンでパラメータづけられ4パラメータ)
  • 理由: 共分散行列として必要な要件を満たすように
    • なんでこれが共分散行列として適切なのか
      • : 対角成分が以上の行列に(楕円体の各軸の分散が並ぶ)
      • を両側からで挟むと任意の向きに回転できる
    • 確率ロボティクスのスライドも参照のこと
アドバンストビジョン第11回

球面調和関数(spherical harmonics)を利用した色(放射輝度)の表現[Sloan2002]

  • 球面調和関数
    • 雑な説明: 球面上でのフーリエ変換のようなもの
    • RGBそれぞれに対して用意すると、球面上の任意の点のRGBを表現できる
    • ラプラス方程式の解で構成(電子軌道と同じ)
      • 高い周波数成分を増やしていくと細かい表現が可能に
    • 左: 球面に数値の大小を濃淡で描いたもの
    • 右: 数値の大小を中心からの高低で描いたもの

(画像: Image by Daigokuz CC BY-SA 3.0)

アドバンストビジョン第11回

球面調和関数を利用した色の表現(詳細)

  • ひとつの色に対して
    • : パラメータ
    • : 基底関数(関数を分解した部品)
    • 極座標
      • 球面の点の極座標をで表現
  • 原子ではの数が電子軌道の数に相当
    • が軌道
    • に対してパラメータ数は
      • だとそれぞれ
アドバンストビジョン第11回

基底関数

アドバンストビジョン第11回

学習

  • NeRFと同様、モデルから画像を作って元の画像と比較してパラメータ修正
  • ガウス分布の個数の調整
    • 初期化ではSfMで計算に使った特徴点の数だけで、必要な数より少ない
    • 数を増やしていく
  • ガウス分布を加減する操作
    • 増やす操作(あるガウス分布の誤差が大きいとき): cloneとsplit
      • clone(ガウス分布が小さい場合): ガウス分布を複製してそばに置く
      • split(ガウス分布が大きい場合): ガウス分布を分割
    • 減らす操作: pruning
      • が閾値以下 or 共分散が大きすぎると消去
アドバンストビジョン第11回

まとめ

  • SfM、NeRFと3DGSを概要だけさらっと
    • さらっとですみません
  • NeRFと3DGS
    • 点に単色を割り当てるSfMに対し、視線で色を変えることで表現力をあげた
アドバンストビジョン第11回