論文まとめ：Non-Rigid Neural Radiance Fields: Reconstruction and Novel View Synthesis of a Dynamic Scene From Monocular Video

# はじめに
ICCV2021より以下の論文
[1] Non-Rigid Neural Radiance Fields: Reconstruction and Novel View Synthesis of a Dynamic Scene From Monocular Video
のまとめ

- project page
https://vcai.mpi-inf.mpg.de/projects/nonrigid_nerf/

- cvf open access
https://openaccess.thecvf.com/content/ICCV2021/html/Tretschk_Non-Rigid_Neural_Radiance_Fields_Reconstruction_and_Novel_View_Synthesis_of_ICCV_2021_paper.html

- github
https://github.com/facebookresearch/nonrigid_nerf
MIT license

<font color="blue">一部書きかけ</font>

# 概要
- 単眼ビデオから変形する物体の3d再構築や新視点生成を行うモデル（NR-NeRFという）
- rigidity networkとray-bending networkを使ってcanonical volumeへ変換し、そこでNeRF的なレンダリングを行う
- カメラパラメータの推定では COLMAP を用いている

![スクリーンショット 2022-05-22 4.46.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/6ffaa281-fd1e-42b4-e738-ea08a784943d.png)

この図で左が入力動画の１フレーム、そのフレームをモデルがレンダリングしたものがその右、さらに右はビデオ内に無い新視点に対してレンダリングしたもの。

# 手法
## 全体像
変数等
$\{ \hat{\rm \bf c}\_i \}^{N-1}\_{i=0}$: Nフレームのrgb画像  
$\{{\rm \bf R}\_i, {\rm \bf t}\_i \}^{N-1}\_{i=0}$: その画像に対応するカメラ外部パラメータ
$\{{\rm \bf K}\_i \}^{N-1}\_{i=0}$: 同内部パラメータ
$\{{\rm \bf l}\_i \}^{N-1}\_{i=0}$: deformationに関する latent code
$\bar{\rm \bf r}$: 点 x を通る光線

以下の図で見ると、

![スクリーンショット 2022-05-22 9.40.23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/d7934473-342b-b8e6-1485-0a8cec11a55f.png)

左側、各画像（フレーム）上の deformed volume 上の点 x をフレームに依存しない右側 canonical volume へ変換する。

canonical volume上で色と密度を取得する。これによりレンダリングが可能となる。

deformed volume から canonical volume への変換は以下のように考える。

## deformed volume から canonical volume への変換
画像中には変形する物体と固定した物体があるので、まず変形する物体から考える。

変形する物体の点 ${\rm \bf x}$ と latent code から変形による差分を求める。つまり変形後の座標は

```math
{\rm \bf x} + {\rm \bf b}({\rm \bf x}, {\rm \bf l}_i)
```

となる。

変形しない物体に対してはマスク $w({\rm \bf x}) \in [0, 1]$ を使って 0 とする。そうすると x に対応する canonical volume 上の任意の座標は

```math
{\rm \bf x} + w({\rm \bf x}) {\rm \bf b}({\rm \bf x}, {\rm \bf l}_i)
```

となる。

# Loss
## 学習対象
以下の図のように latent code l、deformな座標から canonicalな座標への変換に関する ψ、canonical volume上でのneural rendering filedであるθ。

![スクリーンショット 2022-05-23 1.38.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/116706/1088ab9a-e6dc-f1b8-3e67-efc773d763cb.png)

## reconstruction loss
NeRF系でお馴染みのreconstruction loss。

光線に対して C を粗いサンプリング、 F を細かいサンプリングとして、

```math
\begin{eqnarray}
\bar{C} = \{ \bar{\rm \bf r}(j) \}_{j \in C} \\
\bar{F} = \{ \bar{\rm \bf r}(j) \}_{j \in F}
\end{eqnarray}
```

をそれぞれ deformed volume 上の粗いサンプリング点の座標、細かいサンプリング点の座標とする。

これらに対する canonical volume上の座標はそれぞれ

```math
\begin{eqnarray}
\tilde{C} = \{ \tilde{\rm \bf r}(j) \}_{j \in C} \\
\tilde{F} = \{ \tilde{\rm \bf r}(j) \}_{j \in F}
\end{eqnarray}
```

と表わされる。canonical volume 上の粗いサンプリング点に対してカラーと密度を取得し、レンダリングした画像上の色は

```math
\begin{eqnarray}
{\rm \bf c}_c ( \tilde{C}) \tag{2a} \\
\end{eqnarray}
```

である。また canonical volume 上の粗いサンプリング点と細かいサンプリング点を合わせた点に対してカラーと密度を取得し、レンダリングした画像上の色は

```math
\begin{eqnarray}
{\rm \bf c}_f ( \tilde{C} \cup \tilde{F} )\tag{2b}
\end{eqnarray}
```

となる。reconstruction loss はこの(2a)式、(2b)式で得られるカラーと実際の色との差を計算する。

```math
L_{data} = \| {\rm \bf c}_c ( \tilde{C}) - \hat{\rm \bf c} ({\rm \bf r}) \|^2_2 + \| {\rm \bf c}_f ( \tilde{C} \cup \tilde{F} ) - \hat{\rm \bf c} ({\rm \bf r}) \|^2_2 \tag{2}
```

## Offsets loss

deformed volume から canonical volume への変位に対して正則化する。ただ画像上の色に関係ある点に対して行いたいので、密度が高く、その点から画像までに遮るものが少ない（つまり transmittance が大きい）点に対して重みを大きくする。

```math
\begin{eqnarray}
L_{offsets} &=& \frac{1}{|C|} \sum_{j \in C} \alpha_j \left( \cdot \| {\rm \bf b}'(\bar{\rm \bf r}(j)), {\rm \bf l} \|^{2 - w(\bar{\rm \bf r}(j))}_{2 - w(\bar{\rm \bf r}(j))} + \omega_{rigidity} w(\bar{\rm \bf r}(j)) \right), \tag{4} \\
\alpha_j &=& V(j) \cdot o(\bar{\rm \bf r}(j))
\end{eqnarray}
```

$\alpha$ はその重みで、transmittance と 密度との積としている。

右辺括弧内第１項に注目すると、
rigid な物体 -> mask w が 0 付近 -> L2
non-rigid な物体 -> mask w が 1 付近 -> L1
となる。

第１項だけだと不安定らしく、第２項で rigid な物体のマスク値を0に近づける。

## divergence loss

物体に対してできるだけrigidであるように正則化するloss。

offsets loss は offsetのうちの画像上の色に影響する部分・・・つまり物体表面に重点が置かれていたが、divergence loss では物体全体に対して考慮する。

```math
\begin{eqnarray}
L_{divergence} &=& \frac{1}{|C|} \sum_{j \in C} w_j' \cdot | {\rm div} ({\rm \bf b} ({\rm \bf r}(j), {\rm \bf l})) |^2 \tag{5} \\
w_j' &=& o(\tilde{\rm \bf r}(j)) \tag{5a} \\
{\rm div} ({\rm \bf b} ({\rm \bf x})) &=& {\rm Tr} \left( \frac{{\rm d} {\rm \bf b} ({\rm \bf x})}{{\rm d} {\rm \bf x}} \right) = \frac{\partial {\rm \bf b} ({\rm \bf x})_x}{\partial x} + \frac{\partial {\rm \bf b} ({\rm \bf y})_y}{\partial y} + \frac{\partial {\rm \bf b} ({\rm \bf z})_z}{\partial z} \tag{6} \\
\end{eqnarray}
```

(5a)式で密度を重みとかけるので、物体全体が考慮される。

また(6)式でdivergenceとしてJacobianの対角成分のみ考慮しているが、これは演算速度を考えてのことだそう。（FFJORD's の手法）

## Loss 全体
上記３つの合計。

```math
L = L_{data} + \omega_{offsets} L_{offsets} + \omega_{divergence} L_{divergence} \tag{8}
```

# 定量的評価
<font color="blue">書きかけ</font>

# ablation study
<font color="blue">書きかけ</font>