1
Neural Radiance Flow for 4D View Synthesis and Video
Processing (NeRFlow)
2021.08.06 Presenter: Tatsuya Matsushima @__tmats__ , Matsuo Lab
NeRFを動的シーンを学習できるように拡張したNeRFlowを提案
• 動的なシーンの中を動く少数個のカメラから得られた(動)画像を
用いて,ある時刻での新しいviewからの画像を生成する問題
• 動的なシーンの例:物体やロボットが動く
• 2つのfield(radiance, flow)の同時学習により実現
• Flow fieldはoptical flowを用いて学習
• 論文を見るかぎり複数のシーンには汎化してない
• シーンぞれぞれに対してモデルを学習する必要有
概要
2
Neural Radiance Flow for 4D View Synthesis and Video
Processing
• Yilun Du1, Yinan Zhang2, Hong-Xing Yu2, Joshua B. Tenenbaum1,


Jiajun Wu2
• 1MIT, 2Stanford
• 最後2名は直観物理学系の研究をたくさん出してる(例:ジェンガのロボット)
• https://arxiv.org/abs/2012.09790 (2020/12/17)
• ICCV2021 accepted(著者のページによる)
• プロジェクトページ https://yilundu.github.io/nerflow/
• コードは近日公開予定らしい・・・
※特に出典が明記されていない図は当論文・サイトから引用
書誌情報
3
最近,Implicit Neural Representation (INR)やNeRF周りの研究がたくさん出ている
①NeRF @DL輪読会 2020/3/27(土居さん)
• https://www.slideshare.net/DeepLearningJP2016/dlnerf-representing-scenes-as-neural-radiance-fields-for-view-
synthesis
② NeRFの派生研究まとめ @DL輪読会 2021/3/19(土居さん)
• https://www.slideshare.net/DeepLearningJP2016/dlneural-radiance-field-nerf
③ NeRF-VAE @DL輪読会 2021/4/16(谷口さん)
• NeRFを潜在変数モデル(VAE)と組み合わせて複数のシーンに汎化させる.ICML2021.
• https://www.slideshare.net/DeepLearningJP2016/dlnerfvae-a-geometry-aware-3d-scene-generative-model
④GIRFFE @DL輪読会 2021/4/30(松嶋)
• 複数のNeRFを組み合わせてシーンのdisentangleを目指す.CVPR2021 best paper.
• (すみません近日中にアップロードする予定です)
⑤Grasping Field @DL輪読会 2021/6/18(近藤さん)
• INRの一種のDeep SDFを複数組み合わせて手と物体の衝突や把持を扱う.3DV2020 best paper.
• https://www.slideshare.net/DeepLearningJP2016/dlgrasping-field-learning-implicit-representations-for-human-
grasps
本発表について(背景の解説資料)
4
本発表のアウトライン
1. 前提知識
• Neural Radiance Fields (NeRF)
2. 手法:NeRFlow
3. 実験
4. 議論・まとめ
5
1. 前提知識
3次元座標 ( ) と視線方向 ( ) を


入力として輝度 ( ) と


密度 を出力するNN (シーン関数)


様々な角度から撮った写真で学習


➡︎
別の角度から撮った写真を


 生成できる(novel view synthesis)
x d
r, g, b
σ
Fθ : (x, d) ↦ ((r, g, b), σ)
NeRF (谷口さんのDL輪読会スライド)
7
https://www.slideshare.net/DeepLearningJP2016/dlnerfvae-a-geometry-aware-3d-scene-generative-model
NeRF (谷口さんのDL輪読会スライド)
• シーンを3次元座標と視線方向から輝度と密度 への関数として表現
• この関数がわかると、volume renderingを用いて任意の視点から
の画像を生成可能(詳しくは土居さんの資料参照)
8
https://www.slideshare.net/DeepLearningJP2016/dlnerfvae-a-geometry-aware-3d-scene-generative-model
• 学習はレンダリングした画像と


真の画像との2乗誤差の最小化
• volume renderingが微分可能なので


end-to-endに学習可能
• レンダリング時に使うサンプル点の


選び方などには様々な工夫あり
NeRF (谷口さんのDL輪読会スライド)
9
https://www.slideshare.net/DeepLearningJP2016/dlnerfvae-a-geometry-aware-3d-scene-generative-model
NeRF (谷口さんのDL輪読会スライドを編集)
Pros
• 連続的な3D表現として画期的
• 従来は点群・メッシュなどの
離散的な表現を利用
Cons
• シーンごとにたくさんの画像
を用意して学習が必要
• 未知のシーンに汎化しない
• 基本的にレンダリング手法
• 獲得される表現に関して


あまり議論されていない
10
https://www.slideshare.net/DeepLearningJP2016/dlnerfvae-a-geometry-aware-3d-scene-generative-model
https://www.matthewtancik.com/nerf
(余談)複数のシーンの学習
(私も最初にこの辺りの研究を見始めたとき勘違いしていたが)


オリジナルなNeRFはある一つのシーンに関して学習するのが前提
• 他のシーンへの汎化は考えられてない


i.e. データセットはある一つのシーンに関して色々な視点からみた画像から構成されている


(ある意味,特定のシーンに overfit させてる状態)
• 違うシーンになるたびに学習し直さなきゃいけないのは不便・・・
最近,複数のシーンに対応したNeRFが提案されている
• GRF https://arxiv.org/abs/2010.04595
• 単一モデルで複数のシーンを表現可能,土居さんDL輪読会
• NeRF-VAE https://arxiv.org/abs/2104.00587
• 未知のシーンの生成が可能なNeRF(GQNのgeneratorがNeRF)


2回前のDL輪読会(谷口さん)
• GIRAFFE https://arxiv.org/abs/2011.12100
• シーンを複数のNeRFの組み合わせとして学習してeditが可能
• どうやって複数シーンに対応させるかはお決まりの方法が現状あんまりない・・・?(各々やってる)
11
2. 手法:NeRFlow
時間的に変化する3Dのシーンを


radiance field とflow field の2つを組み合わせて表現
• Radiance field は画像の再構成で学習(普通のNeRFと同様)
• Flow field はoptical flowの再構成で学習
2つのfieldを同時に学習する際の工夫がいくつかある(後述)
Rθ Fθ
Rθ
Fθ
NeRFlowの全体像:2つのfieldの同時学習
13
NeRFの入力に時刻 を(単純に)追加し拡張
• 入力:6次元
• 位置+時刻:
• 視線方向:
• 注:この は角度(論文中でDNNのパラメータ と表記被ってる)
• 出力:4次元
• 色:
• 密度:
t
x = (x, y, z, t)
d = (θ, ϕ)
θ θ
c = (r, g, b)
σ
①Radiance Field Rθ
14
NeRFlowでは色 を2種類に分けて出力
• 視点不変な拡散光(diffusion)
• こちらの色を②のflow fieldにも用いる
• 視点依存の鏡面反射光(specularity)
• 鏡面反射光は拡散光に比べてレアなので


学習時は のL2制約の損失を加えているらしい
c
cdi
ff
use
cspecular
cspecular
①Radiance Field Rθ
15
②Flow Field Fθ
空間中の各点がどのように動くかをモデル化
• 入力:6次元
• 位置+時刻:
• 出力:3次元
•
各点の動き(flow):
• 時刻 でのある点 は


時刻 では に移動
x = (x, y, z, t)
f = (fx, fy, fz) =
(
∂x
∂t
,
∂y
∂t
,
∂z
∂t )
ts (xs, ys, zs)
tg (xs, ys, zs) +
∫
tg
ts
f(x, y, z, t)
16
2つのfieldの同時学習
NeRFlowでは


Radiance field と Flow field を同時に学習する
• 損失として,以下の2つを利用
• I. 色の再構成誤差
• II. Optical flowの再構成誤差


Rθ Fθ
17
I. 色の再構成誤差 ℒRender
NeRFと同様に,radiance fieldの出力値を使って


volume renderingすることで画像を再構成
• 再構成した画像とデータセットの画像の色のMSEを損失として学習


ℒRender = cr − RGB
18
(recap)(本来の)NeRFのvolume rendering
NeRFではシーンのジオメトリと見た目をNNで表現
 
• :3次元座標, :視線方向, :輝度, :密度
• 密度 は視線方向 とは独立なのに注意
• 具体的には,先に を出力し,その後 を入力し を出力
f : (x, d) ↦ (c, σ)
x d c = (r, g, b) σ
σ d
σ d c
19
I. 色の再構成誤差
https://arxiv.org/abs/2003.08934 ※表記はNeRFのもの
(recap)NeRFのvolume rendering (土居さんスライド)
20
I. 色の再構成誤差
https://www.slideshare.net/DeepLearningJP2016/dlnerf-representing-scenes-as-neural-radiance-fields-for-view-synthesis


Radiance fieldからのボリュームレンダリング 1
• 古典的なボリュームレンダリングの原理に基づいた⽅法を使⽤
• 1984年にKajitaらが提案した⼿法 (Ray Tracing Volume Densities) を引⽤していた
• Ray Tracingとは、カメラに届く光線を逆⽅向に辿ることにより画像を⽣成する⼿法のこと
• 本物の写真に近い画像をレンダリングできる⼿法として知られている
• レイトレーシングによるボリュームレンダリングでは、光線を逆⽅向に辿りながら、物体のvolume
density (透過率) を考慮しつつ各点の⾊を⾜し合わせ2D画像のあるピクセルの⾊を計算するイメー
ジ (私の理解です)
• 連続的なradiance fieldを考えるとボリュームレンダリングの以下のようになる
• カメラの光線を表すベクトル (oを通りdの⽅向に伸びる) :
• t_n, t_fは仮想的に設定した最も近い点と遠い点
• T(t)はt_nからtまでの光線に沿って積分した透過率 (volume density) を表し、光線がt_nからtまで
粒⼦にぶつかることなく移動する確率を表す (transmittance)
Radiance fieldからのボリュームレンダリング 2
• 実際にはradiance fieldを連続関数として積分するのではなくサンプルした点を⽤
いて区分求積法に基づいた近似計算を⾏う
• この⽅法についてはMaxのボリュームレンダリングのレビュー論⽂で議論されている
• サンプルする点の間隔は学習時には毎回ランダムに変化させている
(recap)NeRFのvolume rendering (土居さんスライド)
21
I. 色の再構成誤差
https://www.slideshare.net/DeepLearningJP2016/dlnerf-representing-scenes-as-neural-radiance-fields-for-view-synthesis
volume renderingが微分可能なので


レンダリングした色 と実際の画像の色 のL2 lossを取れば学習可能
̂
C(r) C(r)
II. Optical flowの再構成誤差 ℒCorr
Farnback法を使って求めたoptical flowをGTのflowとして利用


キーポイントの対応関係を損失に用いる
• 時刻 でのキーポイント に対して,時刻 では,flow fieldを用いて
として予測できる(実際の正解データは )
• 対応するキーポイントの予測のMSE を損失としてflow firldを学習
• (松嶋の疑問)
• キーポイントをどうやって求めている?
• カメラ自体の動きは引き抜いたoptical flowを計算して利用している…?


それとも視点移動を含めたoptical flowをそのまま使っている?
ts xs = (xs, ys, zs) tg
xc
g = xs +
∫
tg
ts
Fθ(x(t))dt xg = (xg, yg, zg)
ℒCorr = xc
g − xg
22
https://docs.opencv.org/3.4/d4/dee/tutorial_optical_flow.html
2つのfieldを同時に学習する際の工夫
Radiance field と Flow field を


同時に学習する際の制約項を提案
• A. 見た目に関する一貫性の制約 (appearance consistency)
• B. ジオメトリに関する一貫性の制約 (geometry consistency)
• C. 動きに関する一貫性の制約 (motion consistency)
Rθ Fθ
23
A. 見た目に関する一貫性の制約 ℒRGB
「物体の拡散反射光(diffuse)は,その物体が動き回っても


 変化しない」という制約


where
• つまり,元の拡散色と,移動先の拡散光が同じになるような制約
• 移動先はflow field で予測
• 動きが小さければ近似的に成り立つはずの仮定
• Optical flowのアルゴリズムの前提になっている仮定でもある
• 過去の色の情報を現在の時刻に伝播する役割を持つ項
ℒRGB = cdi
ff
use(x) − cdi
ff
use (xc) xc = x +
∫
tc
t
Fθ(x(t))dt
Fθ
24
2つのfieldを同時に学習する際の工夫
B. ジオメトリに関する一貫性の制約 ℒdensity
「物体の硬さ(?)(solidity)は,その物体が動き回っても


 変化しない」という制約


where
• この制約は流体のような粒子の表現に有益だったらしい
ℒdensity = σ(x) − σ (xc) xc = x +
∫
tc
t
Fθ(x(t))dt
25
2つのfieldを同時に学習する際の工夫
C. 動きに関する一貫性の制約 ,
ℒFlow ℒAcc
「(1)何も物体がない点の動きはゼロであり,


 (2)自然なシーンでは物体はなめらかに動く」という制約
• (1)rayの上で 個の点をサンプルし,残りの透過度が0.99以上に
なるように選んだ手前の 個の点 のflowのL2を制約項にする


• ray上のカメラと物体の間の何もない点のflowを0に近づける項になるはず
• (2)空間・時間のflowの勾配が小さくなるように制約
• ランダムに点をサンプルしてきて,その勾配のL2を制約項にする


N
K qk
ℒFlow = Fθ (qk)
ℒAcc = ∇Fθ(x)
2
26
2つのfieldを同時に学習する際の工夫
学習の詳細
• 色のレンダリングの損失 である程度学習(warm up)させて
から,他の損失を全部加えて学習させる
• 2つのfieldともに256 hidden unitの8layer MLPを利用
ℒRender
27
3. 実験
データセット
3種類のデータセットで検証
• Pouring
• シミュレータ上で液体を注ぐシーンの動画像
• Gibson
• 家庭内をturtlebotでnavigationするシーンの動画像
• シミュレータとしてiGibsonを利用
• 実画像
• 透明物体を含んだり室内のシーンの動画像
• Ice/vase
• 人間の動きを単眼カメラで撮った動画像 29
Full view synthesis
カメラのposeがランダムにサンプルされる設定
• Pouringの場合物体の周りの半球からサンプル
• 流体が飛び跳ねるパターンも学習できている
• ロボットのocclusionにも対応できている
30
https://yilundu.github.io/nerflow/
Limited camera view
2つの動き回るカメラから動画が得られる設定


       向き合ったカメラ(dual)  隣り合ったカメラ(stereo)




データセット





視点を固定した


動画を生成
• 本論文の提案のconsistencyが生成動画の質の向上に寄与している
31
https://yilundu.github.io/nerflow/
Temporal Interpolation
画像が時間的にスパースな場合の検証
• pouringでは元のデータセットの周波数を10分の1にして検証
• Consistencyの制約を加えることで,データセットになかった間の
ステップのレンダリングがなめらかになる
32
https://yilundu.github.io/nerflow/
Real Image
既存の手法(X-Fields)で捉えられていなかった,


透明な物体のレンダリングや多様な光源への対応ができている
33
Scene Structure and Dynamics Estimation
学習したfieldからdepthやflowを推定できる
• (左)consistensyによってflow fieldがdynamicsを


   より正確にモデル化できるようになる
• (右)単眼カメラから撮影した動画からdepthの推定ができる
34
https://yilundu.github.io/nerflow/
https://yilundu.github.io/nerflow/
Video Processing
NeRFlowをシーンに関するpriorとして動画を処理する
• 超解像・ノイズ除去に利用できる
35
https://yilundu.github.io/nerflow/
https://yilundu.github.io/nerflow/
4. 議論・まとめ
まとめ
• NeRFを動的なsceneに対応させたNeRFlowを提案
• radiance fieldとflow fieldを同時に学習させることで


少数の動くカメラからの動画像を使って,


4Dのview synthesisができるようになった
• 提案手法中のconsistencyの制約がダイナミクスのより正確な


モデル化や生成画像の質の向上に寄与している
37
感想
• アイデアはシンプルで良さそう
• 動的なシーンのNeRFを作る場合は,単に時刻入れればいいのか…
• Optical flowがどれだけ教師信号として良いのかはわからない


気がした(大体うまくいくのかな?)
• 実装しようとするとやや詳細が不明瞭な部分が存在


早く著者実装公開されるといいな…🥺
• 例:どうやってGTのoptical flowを求めた?


  depth推定で評価してるがNeRFからどうdepthを出した?
38
感想
最近INR系の研究が大量にあるが,いくつかの軸がある気がする
• 複数のシーンに汎化させているか?
• Ground Truthの3Dモデルは得られる前提か?
• 何のfieldとしてモデルを学習させているか?
• 座標(+時刻,視点方向…)を入力にして,


対応するなんらかのスカラー/ベクトルという基本構成は一緒


これの組み合わせや上手いlossの設計の提案が重要になっている?
• 出力の例:輝度,occupancy,サーフェスまでの距離
• この辺を綺麗にまとめて,統一した方法を提示したいところ…
39

[DL輪読会]Neural Radiance Flow for 4D View Synthesis and Video Processing (NeRFlow)