1 of 109

CVIM & PRMU 研究会 チュートリアル

微分可能レンダリング

2022-03-10

加藤 大晴 (Preferred Networks)

1

入力: 2D画像

出力: 3Dモデル

2D画像

ニューラル�ネットワーク

微分可能

レンダリング

誤差

最適化

Example from [Kato+ 2018]

2 of 109

自己紹介

加藤大晴(かとうひろはる)

  • 博士(情報理工学)
  • Preferred Networks, Inc. リサーチャー
  • 職歴
    • 2014-2018 ソニー (株)
    • 2018- 現職
  • 専門: 3Dコンピュータビジョン
  • 論文リストなど hiroharu-kato.com
  • 問い合わせ hiroharu.kato.1989.10.13@gmail.com

#2

3 of 109

目次

  1. 微分可能レンダリングの考え方
  2. 微分可能レンダリングの使い道
    1. 3Dシーンの最適化
    2. 3D再構成の学習
    3. NeRF によるビュー補間
  3. 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  4. 微分可能レンダリングのライブラリ

#3

4 of 109

たくさんの画像から3Dモデルをつくりたい

#4

観測画像 (2D)

ほしいもの (3D)

5 of 109

たくさんの画像から3Dモデルをつくりたい

#5

観測画像 (2D)

ほしいもの (3D)

カメラ姿勢は既知であると仮定

典型的な方法

特徴点を検出し,画像間で対応点を探し,� 三角測量で3D空間での位置を求める

微分可能レンダリング

”観測画像のように見える” 3Dモデル最適化で直接求める

6 of 109

たくさんの画像から3Dモデルをつくりたい

#6

観測画像 (2D)

ほしいもの (3D)

”観測画像のように見える” 3Dモデルを求める

3Dモデル π はどう “見える” か?

レンダリングして画像に変換してみればよい

3Dモデルをレンダリングして画像にする関数を R とすると,

見え方 I’ = R(π)

と書くことができる

2D画像

7 of 109

たくさんの画像から3Dモデルをつくりたい

#7

観測画像 (2D)

ほしいもの (3D)

”観測画像のように見える” 3Dモデルを求める

その見え方 I’ は “観測画像 I のように見える” か?

画像同士の違いを測る適当な方法を使えばよい

画像同士の距離を測る関数 L を用いて

観測画像のように見えない度 = L(I, I’)

と書くことができる

8 of 109

たくさんの画像から3Dモデルをつくりたい

#8

観測画像 (2D)

ほしいもの (3D)

”観測画像のように見える” 3Dモデルを求める

結局,観測画像のように見える3Dモデル π*

π* = argminπ L(I, I’) = argminπ L(I, R(π))

と書くことができる

3Dモデルを�レンダリングした画像

観測画像

画像の違い

9 of 109

たくさんの画像から3Dモデルをつくりたい

#9

観測画像 (2D)

ほしいもの (3D)

そのような π* をどうやって求めるか?

素朴に考えると,適当な初期値 π から勾配法で最適化したい

更新式: ππ - μ ∂L/∂π = π - μ (∂L/∂R)(∂R/∂π)

距離関数 L が微分可能であると仮定すると,

∂R/∂π つまり “レンダリング関数 R を3Dモデル π で微分した値” さえわかればよい

→ 微分可能レンダリング

10 of 109

NeRF: Neural Radiance Fields

#10

ニューラルネットワークで表される3Dシーン π

微分可能なボリュームレンダリング関数 R で驚異的な性能を達成

入力画像

得られたもの

詳細は後述

11 of 109

PFN 3D Scanner (公式ページ)

#11

PR

12 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#12

13 of 109

微分可能レンダリングとは

#13

∂ピクセル/∂3D形状

∂ピクセル/∂物性・色

∂ピクセル/∂照明

∂ピクセル/∂カメラ

微分可能レンダリング

(Differentiable rendering, DR)

→ これらが提供されるレンダリング関数

3D形状

物性・色

照明

カメラ

3Dシーン

レンダリング

2D画像(ピクセル)

14 of 109

微分可能レンダリングによる3Dシーンの最適化

#14

∂ピクセル/∂3D形状

∂ピクセル/∂物性・色

∂ピクセル/∂照明

∂ピクセル/∂カメラ

3Dシーン

2D画像

なんらかの

目的関数

評価値

これらがわかると,画像の “良さ” を高めるように,�3Dシーンのパラメータを勾配法で最適化できる

最適化

“良さ” を計算

レンダリング

15 of 109

物体の3D位置の最適化

#15

レンダリングされた画像

誤差

与えられたターゲット画像に似るように物体の3D位置を最適化

(∂誤差/∂物体の位置) を使って�3D位置を勾配降下法で最適化

ターゲット画像

物体の3D位置

その他シーン情報

最適化中の様子

16 of 109

照明とカメラの位置の最適化

#16

17 of 109

3D形状とテクスチャの最適化

#17

18 of 109

クルマの3D位置推定

#18

クルマの

  • 3次元空間上での位置
  • 形状パラメータ
  • テクスチャパラメータ

カメラに映っているクルマは何メートル先にあるのか?

(Preferred Networks, TRI, Woven の共同研究)

誤差

レンダリング

最適化

PR

19 of 109

複雑な評価関数を使った最適化

#19

評価関数はターゲット画像との平均二乗誤差ではなく

微分可能な関数 (ニューラルネットワーク etc.) が出力するなにかでもよい

3Dシーン

2D画像

評価値

最適化

NN

微分可能

レンダリング

New!

20 of 109

画像のスタイルを3Dモデルへ転移

#20

3Dシーン

評価値

最適化

画像のスタイルの近さを測るNN

最適化結果

2D画像

21 of 109

ニューラルネットが苦手なケースを探す

#21

3Dモデル,�ライティング

レンダリング

最小化

画像

訓練済みの

ニューラルネット

標識だと

思う度

標識だと認識されるものについて,

光の当て方を変えて,そう認識されないようにする

初期状態:

標識と認識

最適化後:

給水塔と認識

22 of 109

3D ディープドリーム

#22

3Dシーン

なにかが�映っている度

最適化

画像識別器

最適化結果

2D画像

SKIP

23 of 109

微分可能レンダリングを用いた3D推定の弱点

#23

写真を見せるだけでなんでも3Dにできるようになる? → そうはならない

  • 勾配法でよい解に到達するのは難しく,�正解にかなり近い状態から始めないとうまくいかない
  • 画像に合う3Dシーンというものは無数にある

24 of 109

3Dシーンの最適化 まとめ

  • 微分可能レンダリングで,3D形状,物性,照明,カメラを�レンダリングした画像期待する出力画像に合うように最適化できる
  • 「画像の違い」を測るのは NN でもよい
    • e.g. 画像のスタイルの近さを測るNN
  • 目的関数は画像との比較でなくてもよい
    • e.g. 画像識別器の予測結果

#24

3Dシーン

2D画像

なんらかの

目的関数

評価値

最適化

25 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#25

26 of 109

ディープラーニングは微分可能な層の組み合わせ

#26

最初の層 W

なんらかの層

なんらかの層

イヌ画像に対して高い「犬度」を出力するように�ニューラルネットワークを学習したい

最初の層がパラメータ W を持つとすると

WW + μ ∂犬度/∂W

という形でパラメータを更新する

∂犬度/∂W を計算するには、後続の層すべてが

微分可能である(勾配が計算できる)必要がある

逆に,微分可能な処理ならばだいたい何でも

ディープラーニングの層として使うことができる

Wを少し変えたとき

犬度はどう変わるか?

27 of 109

深層学習とつなげる

#27

微分可能レンダリングで,3Dシーンのパラメータではなく

3Dシーンを出力するニューラルネットワーク (NN) も最適化できる

3Dシーン

2D画像

ターゲット画像との差

最適化

なにか

NN

New!

New!

微分可能

レンダリング

28 of 109

一般化したパイプライン

#28

2D画像

評価値

微分可能

レンダリング

NN画像認識�モジュールなど

最適化

3Dシーン

NNシーン生成�モジュールなど

なんらかの入力

最適化

微分可能レンダリングは巨大なNNを構成するモジュールのひとつとみなせる

SKIP

29 of 109

教師付き学習による3D推定

#29

画像から3Dモデルを推定する NN を考える

素直な方法は {2D画像, 3Dモデル} の学習データを用いた教師付き学習

予測された

3Dモデル

2D画像

NNなど

予測誤差

正解の

3Dモデル

誤差が小さくなるように最適化

30 of 109

教師付き学習はデータセット作成が大変

#30

{2D画像, 3Dモデル} のデータの作成

  • 専門的なスキルが必要になる
  • 専門家に依頼するとたいへんな�時間とお金がかかる
  • あるいは正確さを犠牲にすることになる

似た形のものをデータベースから選び画像にフィッティング [Xiang+ 2014]

3Dモデルを使わずに学習したい

31 of 109

そこで微分可能レンダリング

#31

レンダリングを介することで2D画像を教師データとして使うことができる

予測された

2D画像

予測された3Dモデル

予測誤差

正解の2D画像

2D画像

NN

レンダリング

学習データを作成するコストが下がる

正解の3Dモデル

予測誤差

32 of 109

3D再構成を2D画像から学習

#32

学習データ = {物体をいろいろな視点から見た画像, レンダリングのためのカメラ情報}

3Dシーン

最適化

3D推定NN

ターゲット画像

画像

2D画像

33 of 109

典型的なユースケース

#33

画像から3D構造を推定するニューラルネットワークを学習したいが

  • 3Dの学習データが手に入らない
  • 手に入るが数が少ない/あまり正確でない

場合に,代わりにレンダリングされた画像を学習に使うことで

  • 学習の実現
  • 補助情報として使い精度向上

を目指す

SKIP

34 of 109

パラメトリック形状モデル

#34

3D構造を推定するNNが簡単に設計できるとカンタン

例: 身体や手については,いくつかのパラメータを受け取り形状・ポーズを出力するモデルが広く用いられている

NNはそのパラメータを予測すればよい

MANO hand model [Romero+ 2017]

SMPL body model [Loper+ 2015]

35 of 109

身体の3D再構成

#35

キーポイントと

シルエットを推定

人体モデルの変形

パラメータの推定

レンダリングして

合っているかを確認

36 of 109

手のポーズの推定

#36

手のスケルトンを学習データとして�使えるが,それは粗い情報しか含まない

2D画像の手のシルエットを追加の�教師情報として用いることで性能向上

入力

シルエットを使わない

学習の結果

シルエット使用

37 of 109

ニューラル形状生成モデル

#37

複雑な形状を球の頂点の位置を動かすことで生成可能 [Kato+ 2018] [Wang+ 2018]

  • だが,トポロジーが変えられない

Graph Convolution, AtlasNet [Groueix+ 2018], 頂点の逐次的な生成 [Nash+ 2020] など

  • 微分可能レンダリングと組み合わせるにはまだ至っていない

38 of 109

物体の3D再構成の学習

#38

入力

出力

パラメトリック生成モデルがない物体カテゴリも扱える

3D形状,照明,テクスチャ画像を推定するNN

レンダリングした画像を入力画像と近付ける,という基準で学習

3D再構成の例

39 of 109

深度推定による顔画像の3D化

#39

顔画像の集合だけから3D形状 (= 深度),色,視点,照明推定を学習

画像さえあれば追加情報が不要なので�いろいろな物体カテゴリ(e.g. ネコ)に適用可

[Wu+ 2021] ほか [Zhou+ 2020] など

40 of 109

教師データをどこまで減らせるか?

#40

物体を複数の視点から見た画像,

視点情報,シルエット�[Kato+ 2018]

物体をひとつの視点から見た画像,

視点情報,シルエット

[Kato & Harada 2019a]

物体をひとつの視点から見た画像だけ

[Kato & Harada 2019b]

入力画像

[Kato+ 2018]

[Kato & Harada 2019a]

入力画像

出力

学習データ

入力画像

出力

PR

SKIP

41 of 109

3D再構成の学習 まとめ

  • 微分可能レンダリングを使うと,3Dシーンを直接最適化するだけでなく�3Dシーンを推定するNN画像を使って学習できる
  • 3Dの教師データが不要になることが利点
  • さまざまな実応用の可能性がある
    • ロボットの物体把持,3Dモデリング
    • アバター生成,アニメーション制作
    • ロボットの移動,自動運転

42 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#42

43 of 109

NeRF によるビュー補間

#43

これまで紹介した手法のほとんどは,3D表現としてメッシュを用いていた

NeRF は neural radiance field という3D表現を用いる

σ = NNσ(p), c = NNc(p, d)

ニューラルネットで複雑なシーンを柔軟に表現できる

p にモノがありそう度

3D座標

p の色

見ている向き

44 of 109

NeRFの最適化

#44

  1. 訓練画像からランダムにピクセルを選ぶ
  2. そのピクセルを通るレイ上で,たくさんの点を適当に選び�その点にモノがありそうか,その点のNN に問い合わせる
  3. カメラから出発してピクセルに向かって進んでいくと�どのあたりでモノにぶつかるか,の確率分布を計算する
  4. それをもとにピクセルの色の期待値を計算する
  5. それが正解のピクセルの色に近付くように�NN を最適化する

後述

45 of 109

NeRFによるビュー補間

#45

観測画像

観測にない視点からレンダリング

NNを最適化

46 of 109

NeRFによるビュー補間

#46

視点によって

見え方が変わる

47 of 109

動画への拡張

#47

静止した NeRF

σ = NNσ(q)

c = NNc(q, d)

に加えて,その変形を最適化

q = NNq(p, t)

各フレームでの3D座標

時刻

静止した空間�での3D座標

48 of 109

動画への拡張

#48

SKIP

49 of 109

撮影条件が揃っていない写真からのNeRF

#49

  • 定常的なものと一時的なもの(観光客など)の2種類の NeRF を同時学習
  • 画像ごとに少し見え方が変わってもよい,とする

50 of 109

街のNeRF

#50

51 of 109

カメラポーズの最適化

#51

SKIP

52 of 109

NeRFの問題点

#52

レンダリングに時間がかかる

  • ブルドーザーは1枚1分

最適化に時間がかかる

  • ブルドーザーは4時間 (1GPU),ブランデンブルク門は2日 (8GPUs)

ジオメトリが不正確

たくさんの視点からの画像が必要

  • ブルドーザーは100枚,サンフランシスコは300万枚

ある点にモノがあるかは NN に�問い合わせないとわからない

モノがありそう度の

閾値の決定が難しい

53 of 109

レンダリングの高速化

#53

シーンを大きな NN 1つで表すのではなく

グリッドごとに小さな NN を持つことで

レンダリングを2500倍高速化

まず普通の NeRF を得てから

その知識を転移する ← 最適化は速くならない

54 of 109

最適化の高速化

#54

NeRF の NN

σ = NNσ(p)

p をいい感じの特徴量に変換するのに時間をかけている

ハッシュ化とグリッドを駆使して p を前処理しておくことで NN を小さくでき,最適化を4時間から5秒にまで高速化

3D座標

55 of 109

ジオメトリの精緻化

#55

σ = NNσ(p)

とすると,「モノがありそう度」から�表面の位置を求める閾値の設定が難しい

NN の出力が「モノがありそう度」と�「SDF」(出力がゼロのところが表面) の�両方の役割を果たすようなパラメタ化を行うことで,表面の位置を精緻に表現

p にモノがありそう度

SKIP

56 of 109

画像枚数が少ないときのNeRF

#56

入力枚数が少ないとき「そのシーンを表すNeRF」の�最適化は自由度が高すぎて困難

数枚の画像から NeRF を生成する NN

いろいろなシーンを使って事前に学習しておく

Input (3 views)

PixelNeRF

NeRF

57 of 109

画像枚数が少ないときのNeRF

#57

3D再構成の学習でメッシュを NeRF に置き換えたものと解釈できる

NN

NeRF

レンダリングされた画像

誤差

最適化

NN

微分可能

レンダリング

誤差

最適化

微分可能

レンダリング

58 of 109

NeRFによるビュー補間 まとめ

  • 画像集合をもとに,高品質な任意の視点から見た画像を生成
  • 3Dシーンを NN で表すことで複雑なシーンを柔軟に表現
  • 実用上いろいろな課題があるが1年で急速に片付けられている
    • レンダリング/最適化が遅い,ジオメトリが不正確,…
  • 今年も急発展すると思われるが,進展が速すぎてついていくのが大変

#58

59 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#59

60 of 109

ラスタライズ vs 物理ベースレンダリング

ラスタライズに基づくレンダリングは高速深層学習と組み合わせやすい

物理ベースレンダリングは複雑な素材や光の反射を扱えるが遅い

#60

Image: link

61 of 109

3D表現と微分可能レンダリング

ボクセルや点群は「レンダリングして見比べる」枠組みに不向き

メッシュとNN表現の微分可能レンダリングについて説明する

#61

メッシュ

ラスタライズ

メッシュ

物理ベース

NN

ラスタライズ

NN

物理ベース

レンダリング速度

激遅

複雑なマテリアル

学習/最適化

微分可能レンダリング

やや難

62 of 109

ラスタライズとピクセル積分

#62

スクリーン座標上の

三角形の集合

各ピクセルへ�三角形を割り当てる

(ラスタライズ)

ピクセル領域の色の平均

(ピクセル積分)

✔ 写実的レンダリングに拡張しやすい

✗ 計算が重い(モンテカルロ積分)

✔ 計算が高速

✗ 非写実的

メッシュ

SKIP

63 of 109

色勾配があるときのラスタライズの微分

#63

v1

v2

v3

w1

w2

w3

たとえば左図では

  • ピクセルの色 cp は各頂点色の�重み付け wi 和で表され,
  • その重み付け wi 各頂点の座標値 viを�用いて計算される
  • つまり cpvi の関数

p

✔ (∂ピクセル色/∂頂点座標) は解析的に計算できる

SKIP

64 of 109

素直な微分の問題点

#64

ピクセルの中心点の�三角形の色をサンプリング

三角形の色が一様な場合,�頂点座標を微小変化させてもピクセルの色は変わらない

→ “∂色/∂頂点座標” は常にゼロ

✗ 素直な微分では物体の形状の最適化が行えない

65 of 109

ラスタライズの微分のアプローチ

#65

レンダリング画像を変えずに

擬似的な勾配を計算

[Loper & Black 2014] [Kato+ 2018] [Laine+ 2020]

レンダリング画像をぼやかすことで�最適化に有用な勾配を得る

[Liu+ 2019] [Chen+ 2019]

Images: [Liu+ 2019]

3D

順伝播

(通常)

逆伝播

(工夫)

3D

順伝播

(工夫)

逆伝播

(通常)

✔ 画像の質が落ちない

✗ 勾配は疑似的

✔ 解析的に正しい勾配

✗ 画像の質が落ちる

66 of 109

どちらがいいのか?

#66

3D

順伝播

(通常)

逆伝播

(工夫)

3D

順伝播

(工夫)

逆伝播

(通常)

感覚としては,どの手法を使っても性能に大きな差はない

後者は「ぼやかし度」のパラメータのチューニングが必要

  • ぼやかさないと学習が進まないが,やりすぎると絵の品質が落ちる
  • よくチューニングすれば後者が若干良い
  • 雑なチューニングでは前者の方が良い

67 of 109

ラスタライズの微分による形状最適化

#67

レンダリング画像を変えずに

擬似的な勾配を計算

[Loper & Black 2014] [Kato+ 2018] [Laine+ 2020]

レンダリング画像をぼやかすことで�最適化に有用な解析的な勾配を計算

[Liu+ 2019] [Chen+ 2019]

Images: [Liu+ 2019]

3D

順伝播

(通常)

逆伝播

(工夫)

3D

順伝播

(工夫)

逆伝播

(通常)

✔ 画像の質が落ちない

✗ 勾配は疑似的

✔ 解析的に正しい勾配

✗ 画像の質が落ちる

SKIP

68 of 109

ラスタライズの逆伝播: 1枚のポリゴンを例に

#68

(a) 通常のラスタライズ

 

 

→ 誤差が逆伝播されない

SKIP

69 of 109

ラスタライズの逆伝播: 1枚のポリゴンを例に

#69

(a) 通常のラスタライズ

(b) 提案手法

 

しかし,これだけでは不十分

SKIP

70 of 109

ラスタライズの逆伝播: 1枚のポリゴンを例に

#70

(a) 通常のラスタライズ

(b) 提案手法

 

SKIP

71 of 109

メッシュの微分可能ラスタライズ まとめ

  • レンダリングが高速深層学習と組み合わせやすい
  • ピクセルの色が離散的なサンプリングで決定されるので�素直なレンダリングではメッシュの頂点の座標に勾配が伝わらない�(∂ピクセル色 / ∂頂点座標 = 0)
  • 「レンダリング画像を変えずに嘘の勾配を定義」「レンダリング画像をぼやかすことで勾配を伝える」の2つのアプローチがある
  • 比較的落ち着いた研究領域
    • 定番手法でほぼOK

#71

頂点を少し動かすとピクセルの色が少し変わる,ということがない

72 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#72

73 of 109

ラスタライズとピクセル積分

#73

スクリーン座標上の

三角形の集合

各ピクセルへ�三角形を割り当てる

(ラスタライズ)

ピクセル領域の色の平均

(ピクセル積分)

✔ 写実的レンダリングに拡張しやすい

✗ 計算が重い(モンテカルロ積分)

✔ 計算が高速

✗ 非写実的

メッシュ

74 of 109

物理ベース微分可能レンダリング

光の振る舞いをモデリングすることで,反射を考慮した複雑な最適化が行える

#74

75 of 109

ピクセルの色は積分を用いて定義される

#75

ピクセルの色 = そのピクセル内の点の色の平均

*この話は [Zhao+ 2020] に基づいています

SKIP

76 of 109

ピクセルの色は積分を用いて定義される

#76

ピクセルの色

その点を

どれだけ重視するか

ピクセル内の�あらゆる点について

その点の色

シーンの

パラメータ

SKIP

77 of 109

この積分はモンテカルロ法で求められる

#77

ピクセル内の

たくさんの点について

その点の色×重み

SKIP

78 of 109

自動微分による勾配

#78

この式は微分可能そうだし,これを PyTorch で実装すれば

自動微分でオールオッケーなのでは? ← そうはならない

「積分をモンテカルロ近似してから微分したもの」では

「積分を微分したもの」を近似できない

SKIP

79 of 109

なぜモンテカルロ近似ではだめか?

#79

一般に,被積分関数に不連続点があるとき,積分の微分は

interior term と boundary term に分けられ,それぞれがモンテカルロ近似できる

三角形の色が変わると�ピクセルの色はどう変わるか?

これは自動微分で計算できる

三角形の辺の位置が変わると�ピクセルの色はどう変わるか?

自動微分では計算できない

ピクセル内に三角形の辺があるとき

SKIP

80 of 109

Boundary term の微分

#80

三角形の面ではなく辺の上にサンプリング点を置くことで計算できる

この計算はすべてのエッジを探す必要があり大変なので,�簡単に行う方法の探索が盛んに行われている

[Zhang+ 2020] [Loubet+ 2019] [Bangaru+ 2020] [Zhou+ 2021]

Boundary term 向けの

サンプリング

通常のサンプリング

SKIP

81 of 109

Interior term の微分

#81

レイトレーシングを自動微分フレームワークで実装すれば

自動微分で「理論上は」計算できるが,それは現実的ではない

  1. 計算グラフが大きくなりすぎる
    1. 専用のフレームワークとコンパイラを実装 [Nimier-David+ 2019]
    2. 計算の方法の工夫で効率化 [Nimier-David+ 2020] [Vicini+ 2021]

  • 通常のレンダリングのサンプリング点の選び方は微分の計算に不向き

SKIP

82 of 109

物理ベース微分可能レンダリング まとめ

  • 物理ベースレンダリングは写実的な絵が得られるのが強み
    • 光の反射を考慮した複雑な最適化が可能
  • 微分可能物理ベースレンダリングは難しい
    • 自動微分ライブラリで素直に実装して得られる勾配は正しくない
    • 自動微分ライブラリで素直に実装すると計算が遅すぎる
  • アクティブな研究領域
    • SIGGRAPH / SIGGRAPH Asia で毎回数本ずつ新手法が登場
  • 現状,まだ速度が遅く,深層学習と組み合わせるのは難しい

#82

83 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#83

84 of 109

ニューラル場

#84

NeRF ではピクセルの色の決定にボリュームレンダリングを用いる

PyTorch などで素直に実装すれば,これは自然に微分可能である

NeRFの3D表現 neural radiance field(復習)

σ = NNσ(p), c = NNc(p, d)

p にモノがありそう度

3D座標

p の色

見ている向き

85 of 109

NeRFのボリュームレンダリングは素直に微分可能

カメラからピクセルに向かうレイ上の点 p1, p2, … で�密度 σi と色 ci を NN から得るとする*1

σi = NNσ(pi), ci = NNc(pi)

カメラから出発し pi に到達したときにそこでモノにぶつからない確率 αi

αi = exp(-σi δ)*2

と定義すると,カメラから出発し pi でモノにぶつかる確率 wi

wi = (Πj<i αj ) (1 - αi)

レイの色の期待値 c

c = Σ wi ci

これらの演算はすべて,特に工夫をしなくても微分可能

#85

*1 piはカメラから近い順とし,レイの向き d は省略する�*2 δpi のサンプリングの間隔

pi まで到達

pi でぶつかる

86 of 109

ニューラル場の微分可能レンダリング まとめ

  • NeRF のボリュームレンダリングは,特別な工夫は必要なく�素直に自動微分フレームワーク (PyTorch etc.) で実装すればよい

  • ニューラル場で表される signed distance function (SDF) の�微分可能レンダリング [Niemeyer+ 2020] も実用的だが,省略した
    • こちらは勾配計算にやや工夫が必要になる

#86

87 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#87

88 of 109

微分可能レンダリングを使う

#88

nvdiffrast

2019年以降,いくつものライブラリがリリースされている

2022年3月現在のおすすめライブラリ

深層学習?

使いやすさ? 速さ?

PyTorch? TensorFlow?

No

Yes

TF

PT

使いやすさ

速さ

89 of 109

#89

  • メッシュ,ラスタライズ
  • Facebook の3Dビジョンの研究者らが開発
  • PyTorch 限定
  • いまもっとも勢いがあるライブラリ
    • 利用実績多数
    • ドキュメントやチュートリアルも充実
  • SoftRasをベースとする微分可能レンダリング手法

SKIP

90 of 109

nvdiffrast

#90

  • メッシュ,ラスタライズ
  • NVIDIA のリアルタイムレンダリングの研究者らが開発
  • PyTorch/TensorFlow をサポート
  • 条件によっては PyTorch3D より1000倍くらい高速

  • インストールがやや大変
  • 商用利用不可

SKIP

91 of 109

#91

  • メッシュ,物理ベースレンダリング
  • EPFL のコンピュータグラフィクスの研究者らが開発
  • PyTorch をサポート
  • 研究用のレンダラーとして定評ある Mitsuba の最新版

  • 物理ベース微分可能レンダリングは発展途上で,決定版のライブラリがない
    • SIGGRAPH / SIGGRAPH Asia で毎回数本ずつ新手法が発表されている

SKIP

92 of 109

#92

  • 加藤が東大・原田研究室で開発
  • Chainer 版がオリジナルだが PyTorch 版もあり
  • 84本の論文で使用されている(2022年3月現在)
  • 今となっては使う理由があまりない

PR

SKIP

93 of 109

目次

  • 微分可能レンダリングの考え方
  • 微分可能レンダリングの使い道
    • 3Dシーンの最適化
    • 3D再構成の学習
    • NeRF によるビュー補間
  • 微分可能レンダリングの仕組み
    • メッシュ (ラスタライズ)
    • メッシュ (物理ベースレンダリング)
    • ニューラル場 (Radiance Field)
  • 微分可能レンダリングのライブラリ

#93

94 of 109

微分可能レンダリング まとめ

#94

  • 微分可能レンダリングを使うと,レンダリングした見た目を評価することで3Dシーンの最適化3Dシーンを推定する NN の学習を行える
  • ニューラル3D表現との組み合わせで高品質に画像生成できる (NeRF)
  • メッシュのラスタライズは高速で深層学習と組み合わせやすいが,�勾配の計算にいくつか工夫が必要
  • メッシュの物理ベースレンダリングは難しく,発展途上
  • ライブラリを使って簡単に始めることができる
    • PyTorch3D,nvdiffrast,Mitsuba 2

NN

微分可能

レンダリング

誤差

最適化

95 of 109

物理ベース微分可能レンダリング 論文早見表

#95

被積分関数に不連続面があるとき,�その微分は interior term と boundary term に分けられる

  • Interior term について
    • 効率的な実装方法の検討 [Nimier-David+ 2019] [Nimier-David+ 2020] [Vicini+ 2021]
    • 効率的なモンテカルロ積分の検討 [Zhang+ 2021] [Zeltner+ 2021]
  • Surface rendering の boundary term について
    • 境界面上でのサンプリングの検討 [Li+ 2018] [Zhang+ 2020]
    • サンプリングが容易な形式の検討 [Loubet+ 2019] [Bangaru+ 2020]
    • 解析的に積分を計算 [Zhou+ 2021]
  • Volume rendering の boundary term について
    • 境界面上でのサンプリングの検討 [Zhang+ 2019] [Zhang+ 2021]

包括的なチュートリアル [Zhao+ 2020]

From [Zhao+ 2020]

96 of 109

References

#96

Rasterization-based differentiable rendering (mesh)

  • [Chen+ 2019] W. Chen, H. Ling, J. Gao, E. Smith, J. Lehtinen, A. Jacobson, and S. Fidler. “Learning to predict 3D objects with an interpolation-based differentiable renderer.” NeurIPS 2019.
  • [Kato+ 2018] H. Kato, Y. Ushiku, and T. Harada. “Neural 3d mesh renderer.” CVPR 2018.
  • [Liu+ 2019] S. Liu, T. Li, W. Chen, and H. Li. “Soft rasterizer: A differentiable renderer for image-based 3D reasoning.” ICCV 2019.
  • [Loper & Black 2014] M. Loper, and M. Black. “OpenDR: An approximate differentiable renderer.” ECCV 2014.
  • [Murthy+ 2019] J. Murthy, E. Smith, J-F Lafleche,C. Tsang, A. Rozantsev, W. Chen, T. Xiang, R. Lebaredian, and S. Fidler. “Kaolin: A PyTorch Library for Accelerating 3D Deep Learning Research.” arXiv 2019.
  • [Ravi+ 2020] N. Ravi and J. Reizenstein and D. Novotny and T. Gordon and W-Y Lo, J. Johnson and G. Gkioxari. “PyTorch3D.” 2020.
  • [Valentin+ 2019] J. Valentin, C. Keskin, P. Pidlypenskyi, A. Makadia, A. Sud, and S. Bouaziz. “TensorFlow Graphics: Computer Graphics Meets Deep Learning.” 2019.

97 of 109

References

#97

Rasterization-based differentiable rendering (neural fields)

  • [Mildenhall+ 2020] B. Mildenhall, P. Srinivasan, M. Tancik, J. Barron, R. Ramamoorthi, and R. Ng. “NeRF: Representing Scenes as Neural Radiance Fields for View Synthesis.” ECCV 2020.
  • [Niemeyer+ 2020] M. Niemeyer, L. Mescheder, M. Oechsle, and A. Geiger. “Differentiable Volumetric Rendering: Learning Implicit 3D Representations without 3D Supervision.” CVPR 2020.
  • [Yariv+ 2020] L. Yariv, Y. Kasten, D. Moran, M. Galun, M. Atzmon, R. Basri, and Y. Lipman. “Multiview Neural Surface Reconstruction by Disentangling Geometry and Appearance.” NeurIPS 2020.

98 of 109

References

#98

Physics-based differentiable rendering (1)

  • [Bangaru+ 2020] S. Bangaru, T.-M. Li, and F. Durand. “Unbiased Warped-Area Sampling for Differentiable Rendering.” SIGGRAPH Asia 2020.
  • [Li+ 2018] T.-M. Li, M. Aittala, F. Durand, and J. Lehtinen. “Differentiable Monte Carlo Ray Tracing through Edge Sampling.” SIGGRAPH Asia 2018.
  • [Loubet+ 2019] G. Loubet, N. Holzschuch, and W. Jakob, I. Gkioulekas, and S. Zhao. “Reparameterizing Discontinuous Integrands for Differentiable Rendering.” SIGGRAPH Asia 2019.
  • [Nimier-David+ 2019] M. Nimier-David, D. Vicini, Ti. Zeltner, and W. Jakob. “Mitsuba 2: A Retargetable Forward and Inverse Renderer.” SIGGRAPH Asia 2019.
  • [Nimier-David+ 2020] M. Nimier-David, S. Speierer, B. Ruiz, and W. Jakob. “Radiative Backpropagation: An Adjoint Method for Lightning-Fast Differentiable Rendering.” SIGGRAPH 2020.
  • [Vicini+ 2021] D. Vicini, S. Speierer, and W. Jakob. “Path Replay Backpropagation: Differentiating Light Paths using Constant Memory and Linear Time.” SIGGRAPH 2021.

99 of 109

References

#99

Physics-based differentiable rendering (2)

  • [Zeltner+ 2021] T. Zeltner, S. Speierer, I. Georgiev, and W. Jakob. “Monte Carlo Estimators for Differential Light Transport.” SIGGRAPH 2021.
  • [Zhang+ 2019] C. Zhang, L. Wu, C. Zheng, I. Gkioulekas, R. Ramamoorthi, and S. Zhao. “A Differential Theory of Radiative Transfer.” SIGGRAPH Asia 2019.
  • [Zhang+ 2020] C. Zhang, B. Miller, K. Yan, I. Gkioulekas, and S. Zhao. “Path-Space Differentiable Rendering.” SIGGRAPH 2020.
  • [Zhang+ 2021a] C. Zhang, Z. Yu, and S. Zhao. “Path-Space Differentiable Rendering of Participating Media.” SIGGRAPH 2021.
  • [Zhang+ 2021b] C. Zhang, Z. Dong, M. Doggett, and S. Zhao. “Antithetic Sampling for Monte Carlo Differentiable Rendering.” SIGGRAPH 2021.
  • [Zhao+ 2020] S. Zhao, W. Jakob, and T.-M. Li. “Physics-Based Differentiable Rendering: A Comprehensive Introduction” SIGGRAPH 2020 Course.
  • [Zhou+ 2021] Y. Zhou, L. Wu, R. Ramamoorthi, and L.-Q. Yan. “Vectorization for Fast, Analytic, and Differentiable Visibility.” SIGGRAPH 2021.

100 of 109

References

#100

3D hand/body/face reconstruction (1)

  • [Baek+ 2019] S. Baek, K. Kim, and T Kim. “Pushing the envelope for rgb-based dense 3d hand pose estimation via neural rendering.” CVPR 2019.
  • [Lassner+ 2017] C. Lassner, J. Romero, M. Kiefel, F. Bogo, M. Black, and P. Gehler. “Unite the people: Closing the loop between 3d and 2d human representations.” CVPR 2017.
  • [Pavlakos+ 2018] G. Pavlakos, L. Zhu, X. Zhou, and K. Daniilidis. “Learning to estimate 3D human pose and shape from a single color image.” CVPR 2018.
  • [Wang+ 2020] M. Wang, F. Qiu, W. Liu, C. Qian, X. Zhou, and L. Ma. “EllipBody: A Light-weight and Part-based Representation for Human Pose and Shape Recovery.” arXiv 2020.
  • [Wu+ 2020] S. Wu, C. Rupprecht, and A. Vedaldi. “Photo-geometric autoencoding to learn 3D objects from unlabelled images.” CVPR 2020.

101 of 109

References

#101

3D hand/body/face reconstruction (2)

  • [Zhang+ 2019] X. Zhang, Q. Li, H. Mo, W. Zhang, and W. Zheng. “End-to-end hand mesh recovery from a monocular RGB image.” ICCV 2019.
  • [Zhou+ 2020] H. Zhou, J. Liu, Z. Liu, Y. Liu, and X. Wang, “Rotate-and-Render: Unsupervised Photorealistic Face Rotation from Single-View Images.” CVPR 2020.
  • [Zimmermann+ 2019] C. Zimmermann, D. Ceylan, J. Yang, B. Russell, M. Argus, and T. Brox. “FreiHAND: A Dataset for Markerless Capture of Hand Pose and Shape from Single RGB Images.” ICCV 2019.

102 of 109

References

#102

3D object reconstruction

  • [Chen+ 2019] W. Chen, H. Ling, J. Gao, E. Smith, J. Lehtinen, A. Jacobson, and S. Fidler. “Learning to predict 3D objects with an interpolation-based differentiable renderer.” NeurIPS 2019.
  • [Kanazawa+ 2018] A. Kanazawa, S. Tulsiani, A. Efros, and J. Malik. “Learning category-specific mesh reconstruction from image collections.” ECCV 2018.
  • [Kato+ 2018] H. Kato, Y. Ushiku, and T. Harada. “Neural 3d mesh renderer.” CVPR 2018.
  • [Kato & Harada 2019a] H. Kato, and T. Harada. “Learning view priors for single-view 3d reconstruction.” CVPR 2019.
  • [Kato & Harada 2019b] H. Kato, and T. Harada. “Self-supervised Learning of 3D Objects from Natural Images.” arXiv 2019.
  • [Liu+ 2019] S. Liu, T. Li, W. Chen, and H. Li. “Soft rasterizer: A differentiable renderer for image-based 3D reasoning.” ICCV 2019.

103 of 109

ラスタライズ v.s. レイトレーシング

深層学習と組み合わせるときは主にラスタライズベースの手法が用いられる

  • 学習中に数十万枚~数千万枚をレンダリングする必要があり,描画速度が重要
  • 多くのビジョンのタスクでは写実性があまり重要ではない
  • 実画像では照明・物性などが複雑すぎて結局うまくモデル化できない

近年では物理ベースの手法の改善・高速化が著しいことからこの状況は数年以内には変わり得る(かもしれない)

#103

104 of 109

一般化したパイプライン

#104

2D画像

評価値

微分可能

レンダリング

ニューラルネットの

画像認識モジュールなど

3Dシーン

ニューラルネットの

シーン生成モジュールなど

なんらかの入力

コンピュータグラフィクス

コンピュータビジョン

微分可能レンダリングは

グラフィクスとビジョンを橋渡しするものとみなせる

105 of 109

ここまでのまとめ

#105

3Dシーンのパラメータ π を受け取り画像 I を出力するレンダリング関数

I = f(π) について,∂I/∂π計算できるとき f を微分可能レンダリング関数とよぶ*

微分可能レンダリングは

  • ターゲット画像に近づくように3Dシーンを最適化できる
  • 深層学習のレイヤーのひとつとして扱うことで複雑なタスクもこなせる

*数学用語の「微分可能」とはほとんど関係がない

106 of 109

NeRFも微分可能レンダリング

#106

From [Mildenhall+ 2020]

例: 与えられたターゲット画像に似るように3D形状と色を最適化

ターゲット画像

最適化された3Dシーン

107 of 109

その他 ライブラリ

#107

ラスタライズ (PyTorch)

  • Kaolin [Murthy+ 2019]: NVIDIA発の手法を複数サポート

ラスタライズ (TensorFlow)

  • TensorFlow Graphics [Valentin+ 2019]: レンダリング機能は充実していない

物理ベースレンダリング

  • redner [Li+ 2018]: 使いやすいという噂

108 of 109

なぜモンテカルロ近似ではだめか?

#108

f(p, π) = 1 if p in 赤い三角形 else 0

I(π) = meanp(f(p, π) * 赤 + (1 - f(p, π)) * 白)

このピクセル内の色を求める

ピクセル内のたくさんの点について

  • それが赤い三角形の内側にあれば「赤」
  • 外側ならば「白」

その平均を取ればピクセル色 I が求められる

π

ピクセル内の点

シーンのパラメータ,�ここでは三角形の頂点

109 of 109

なぜモンテカルロ近似ではだめか?

#109

f(p, π) = 1 if p in 赤い三角形 else 0

I(π) = mean(f(p, π) * 赤 + (1 - f(p, π)) * 白)

ほとんどすべての点 pf(p, π)/∂π = 0 なので

I(π)/∂π = mean(f/∂π * 赤 - ∂f/∂π * 白) = 0

π

ところで,頂点 x が右に動くと,このピクセルの色は少し濃くなるはず

つまり I/∂x ≠ 0 となるはずでは…?