Closed6

【論文読解めも】NeRF--: Neural Radiance Fields Without Known Camera Parameters

takoroytakoroy

同一の物体を映した画像集合から、任意の視点から見た色と密度を表現するモデルを構築することで、新規視点合成(Novel View Synthesis)を実現するNeRF系の手法の新たなバリエーション。

従来のNeRF系の手法は、いずれもCOLMAPと呼ばれるStructure from Motionを利用した前処理によって各画像のカメラ位置と姿勢(外部パラメータ)やレンズの特性(内部パラメータ)を推定する必要があったが、本手法では、これらのパラメータも同時に推定する。これによって、COLMAPによる前処理が不要になり、かつCOLMAP依存で生じるエラーケースを回避したロバストな新規視点合成が可能にしている。

Wang, Zirui, et al. "NeRF --: Neural Radiance Fields Without Known Camera Parameters." arXiv preprint arXiv:2102.07064 (2021)
.

https://nerfmm.active.vision/

takoroytakoroy

NeRFの復習

N毎の画像\mathcal{I}=\left\{I_{1}, I_{2}, \ldots, I_{N}\right\}と、それぞれのカメラパラメータを\mathcal{\Pi} = \left\{\pi_{1}, \pi_{2}, \ldots, \pi_{N}\right\}とする。

NeRFの目標は、これらの情報から、連続関数F_{\Theta}:(\boldsymbol{x}, \boldsymbol{d}) \rightarrow(\boldsymbol{c}, \sigma)を表すモデルを構築することである。\boldsymbol{x}=(x, y, z)は3次元空間中の点、\boldsymbol{d}=(\theta, \phi)は視線方向、\boldsymbol{c}=(r,g,b)は色、\sigma$は密度を表す。

カメラの原点\boldsymbol{o}から\boldsymbol{d}の方向へと延びる光線は、パラメータhを用いて\boldsymbol{r}(h) = \boldsymbol{o} + h \boldsymbol{d}と表せる。密度\sigmaが方向\boldsymbol{d}に依存しないので、カメラパラメータが決められているときに、あるピクセル位置\boldsymbol{p}=(u,v)の値をレンダリングしてくれる関数\mathcal{R}を以下のように考える。なお、積分の部分は、光線上のいくつかのポイントをサンプルして足し合わせることで実現される。

\hat{I}_{i}(\boldsymbol{p})=\mathcal{R}\left(\boldsymbol{p}, \pi_{i} \mid \Theta\right)=\int_{h_{n}}^{h_{f}} T(h) \sigma(\boldsymbol{r}(h)) \boldsymbol{c}(\boldsymbol{r}(h), \boldsymbol{d}) d h

ここで、T(h)は、カメラの手前側にある密度の高い色のほうが優先的にレンダリングされるということを表す関数で、以下のように表される。

T(h)=\exp \left(-\int_{h_{n}}^{h} \sigma(\boldsymbol{r}(s)) d s\right)

このようにして、再構成画像\hat{I}_{i}が得られる。この再構成画像と元の画像の差異を損失関数とし、これを最小化するようにモデルは訓練される。

\mathcal{L}=\sum_{i}^{N}\left\|I_{i}-\hat{I}_{i}\right\|_{2}^{2}
\Theta^{*}=\arg \min _{\Theta} \mathcal{L}(\hat{I} \mid \mathcal{I}, \Pi)
takoroytakoroy

NeRF--

NeRF--では、カメラパラメータ\mathcal{\Pi}が未知のものとし、これ自体も最適化の対象とする。要するに以下の最適化問題を解くことになる。

\Theta^{*}, \Pi^{*}=\arg \min _{\Theta, \Pi} \mathcal{L}(\hat{\mathcal{I}}, \hat{\Pi} \mid \mathcal{I})

カメラパラメータの表現

カメラパラメータは、内部パラメータと外部パラメータに分けられる。それぞれ、以下に説明するように

内部パラメータの表現

内部パラメータは以下のようなKとして表現される。

K=\left(\begin{array}{ccc}f_{x} & 0 & c_{x} \\0 & f_{y} & c_{y} \\0 & 0 & 1\end{array}\right)

c_x, c_yは画像のサイズW, Hから、c_{x} \approx W / 2 , c_{y} \approx H / 2と決まり、推定の対象ではなく、推定の対象はf_x, f_yのみとなる。f_x, f_yは直接推定するのではなく、画像のサイズW, Hに対する比率\tilde{s}_{x}, \tilde{s}_{y}を用いて間接的に推定する。

\begin{array}{l}f_{x}=\tilde{s}_{x}^{2} W \\f_{y}=\tilde{s}_{y}^{2} H\end{array}

内部パラメータは全画像で共通とする。

外部パラメータの表現

外部パラメータ\boldsymbol{T}_{w c}=[\boldsymbol{R} \mid \boldsymbol{t}]は、\boldsymbol{\phi} \in \mathbb{R}^3, \boldsymbol{t} \in \mathbb{R}^3によって表現される。

skew行列\boldsymbol{\phi}^{\wedge}を以下のように定める。

\boldsymbol{\phi}^{\wedge}=\left(\begin{array}{l}\phi_{0} \\\phi_{1} \\\phi_{2}\end{array}\right)^{\wedge}=\left(\begin{array}{ccc}0 & -\phi_{2} & \phi_{1} \\\phi_{2} & 0 & -\phi_{0} \\-\phi_{1} & \phi_{0} & 0\end{array}\right)

正規化された\boldsymbol{\omega}を使い、\boldsymbol{\phi} = \alpha \boldsymbol{\omega}とすると、ロドリゲスの回転公式によって以下のように\boldsymbol{R}が算出される。

\boldsymbol{R}=\boldsymbol{I}+\frac{\sin (\alpha)}{\alpha} \boldsymbol{\phi}^{\wedge}+\frac{1-\cos (\alpha)}{\alpha^{2}}\left(\boldsymbol{\phi}^{\wedge}\right)^{2}

外部パラメータは全画像で異なる。

takoroytakoroy

光線の表現

光線は原点\boldsymbol{o}と方向\boldsymbol{d}によって表現されるが、先ほど求めたパラメータを用いて、光線を表現することができる。

im番目のピクセルに対応する光線\hat{\boldsymbol{r}}_{i, m}は以下のように表現される。

\hat{\boldsymbol{r}}_{i, m}(h)=\hat{\boldsymbol{o}}_{i}+h \hat{\boldsymbol{d}}_{i, m}

まず、\hat{\boldsymbol{o}}_{i}=\hat{\boldsymbol{t}}_{i}である。また、方向\hat{\boldsymbol{d}}_{i, m}は、推定された値を用いて以下のように表される。

\hat{\boldsymbol{d}}_{i, m}=\hat{\boldsymbol{R}}_{i}\left(\begin{array}{c}(u-W / 2) / \hat{f}_{x} \\-(v-H / 2) / \hat{f}_{y} \\-1\end{array}\right)
takoroytakoroy

訓練手順

訓練の手順は、以下の画像に示すとおりである。基本的にはNeRFと同様だが、画像集合全体で共有している焦点距離\hat{f}_x, \hat{f}_xと画像ごとに推定される回転・並進パラメータも同時に最適化していく。

画像ごとに、M個のピクセルをサンプルし、それに対応する光線を求め、そこから128ポイントをランダムにサンプルし、レンダリングする。これによって得られた値と真の値の差異を損失とし、NeRFモデルおよび内部パラメータ・外部パラメータに関するパラメータを訓練していく。

このスクラップは2021/03/19にクローズされました