NeRF for Outdoor Scene Relighting

김민솔·2024년 10월 3일
0

NeRF

목록 보기
5/10

NeRF-OSR은 outdoor scene relighting을 NeRF-based 모델을 활용하여 구현한 논문입니다.
가짜연구소 NeRF with Real-World 모임에서 NeRF-OSR 코드 리뷰를 맡았습니다! 슬라이드 링크는 아래에 기재하였습니다.


1. Introduction

real scenes에 대한 lighting editing을 위해서는, 1️⃣ image formation process를 명시적으로 모델링하는 것과, 2️⃣ 물리적 특성과 scene illumination을 정확하게 추정해야 합니다. relighting을 통해, albedo(물체의 내재적 color)와 geometry 같은 scene 구성요소를 유지한 채로 빛만 조절하는 것이 challenge가 됩니다.
또한, indoor data와 outdoor data를 구성하는 요소들이 매우 다르기 때문에 indoor relighting과 outdoor relighting은 다른 task로 분류됩니다. NeRF-OSR은 outdoor scene relighting에 중점을 두었습니다.



2. Related works

vanila NeRF 모델을 relighting에 사용하게 될 경우, 1️⃣ 특정 클래스에 대해서만 렌더링이 가능하고, 2️⃣ outdoor illumination을 구현하지 못한다는 문제점이 존재합니다. NeRF-W의 경우, 1️⃣ intrinsic image 분해가 안되고, 2️⃣ shadow나 albedo와 같은 parametric 조절이 불가능하다는 단점을 갖고 있습니다.
[2] Self-supervised Outdoor Scene Relighting 논문에서도 relighting을 적용한 연구를 하였지만, 1️⃣ single image로 학습되었으며, 2️⃣ camera viewpoint를 조절할 수 없다는 한계점을 가집니다.



3. Method

NeRF-OSR의 Input은 RGB images(with different timings, viewpoints)이며, output은 임의의 viewpoint와 다양한 illuminations로 구성된 렌더링 scene입니다. NeRF-OSR은 scene instrinsic을 명시적으로 추론하기 위해 albedo, depth, shadow를 직접 학습하였습니다. 또한, uncontrolled setting의 outdoor data에 대한 self-supervised training이 적용되었습니다.


3.1 NeRF

3D point x\mathbf{x}에 대해, NeRF 모델은 density σ(x)\sigma(\mathbf{x})와 color c(x)\mathbf{c}(\mathbf{x})를 정의합니다. 이미지 렌더링을 위해, camera origin o\mathbf{o}와 direction d\mathbf{d}로부터 ray casting하여, 이를 output pixel에 매핑합니다. NdepthN_{depth} points {xi}i=1Ndepth\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}가 각 ray에서 샘플링되며, xi=o+tid\mathbf{x}_{i} = \mathbf{o} + t_{i}\mathbf{d}의 수식으로 얻을 수 있습니다. 이때 tit_{i}는 ray depth가 됩니다.

NeRF depth sampling

uniform distribution으로부터 stratified sampling을 적용하여 depth를 얻습니다. 이때 near, far camera plane을 설정한 후, 해당 공간에서부터 depth를 얻게 됩니다.
또한 hierarchical volume sampling 방법을 활용하는데, coarse 모델에서 얻은 weights에서 depth를 다시 샘플링하여 더 밀도 있는 곳에서 depth를 샘플링하는 방법입니다.

NeRF 렌더링

C(o,d)=C({xi}i=1Ndepth)=i=1NdepthT(ti)α(σ(xi)δi)c(xi)\mathbf{C}(\mathbf{o}, \mathbf{d}) = \mathbf{C}(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}) = \sum\limits^{N_{depth}}_{i=1}T(t_{i})\alpha(\sigma(\mathbf{x}_{i})\delta_{i})\mathbf{c}(\mathbf{x}_{i})
  • T(ti)=exp(j=1Ndepth1σ(xj)δj)T(t_{i}) = \exp \Big(\sum\limits^{N_{depth}-1}_{j=1}\sigma(\mathbf{x}_j)\delta_j \Big): transimittance
  • δi=ti+1ti\delta_{i} = t_{i+1} - t_{i}
  • α(y)=1exp(y)\alpha(y) = 1 - \exp(-y): volume density
    위의 수식을 통해 최종적으로 color 값을 렌더링합니다.

3.2 Spherical Harmonics NeRF

NeRF에서의 color c\mathbf{c}는 lighting encoding이 없이 MLP로 학습되기 때문에, fixed lighting으로 모델링되어 있다는 단점을 가집니다. 따라서, 2-order SH illumination model을 사용하여 렌더링 방정식을 재정의합니다.

C({xi}i=1Ndepth,L)=A({xi}i=1Ndepth)Lb(N({xi}i=1Ndepth))\mathbf{C}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L}\Big) = \mathbf{A}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big) \cdot \mathbf{L}\mathbf{b}\Big(\mathbf{N}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big)\Big)
  • A\mathbf{A}: albedo color R3\in \mathbb{R}^3
  • L\mathbf{L}: per-image learnable SH coefs R9×3\in \mathbb{R}^{9\times3}
  • b(n)\mathbf{b}(\mathbf{n}): SH basis R9\in \mathbb{R}^9
  • N(x)\mathbf{N}(\mathbf{x}): surface normal
    SH env map을 학습하는 방식으로, Lambertian model을 구성합니다.

Surface Normal

N({xi}i=1Ndepth)=N^({xi}i=1Ndepth)N^({xi}i=1Ndepth)2\mathbf{N}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big) = \frac {\hat{\mathbf{N}}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big)}{||\hat{\mathbf{N}}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big)||^{2}}
  • N^({xi}i=1Ndepth)=i=1Ndepth(σ(xi)xi)T(ti)α(σ(xi)δi)\hat{\mathbf{N}}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big) = \sum\limits^{N_{depth}}_{i=1}\Big(\frac{\partial{\sigma(\mathbf{x}_{i})}}{\partial{\mathbf{x}_{i}}} \Big) \cdot T(t_{i})\alpha(\sigma(\mathbf{x}_{i})\delta_{i})
    normal vector를 뽑기 위해서, ray point에 대한 density를 미분한 후 weights와 함께 축적합니다. 얻은 normal vector를 unit sphere에 정규화하여, 최종적인 surface normal을 얻게 됩니다.

3.3 Shadow Generation Network

shadow network S({xi}i=1Ndepth,L)\mathbf{S}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L}\Big)를 모델링하여, relighting 시 shadow를 직접적으로 조절합니다.

C({xi}i=1Ndepth,L)=S({xi}i=1Ndepth,L)A({xi}i=1Ndepth)Lb(N({xi}i=1Ndepth))\mathbf{C}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L}\Big) = \mathbf{S}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L}\Big) \mathbf{A}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big) \cdot \mathbf{L}\mathbf{b}\Big(\mathbf{N}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}\Big)\Big)

shadow model은 MLP를 통해 [0, 1] 범위의 scalar를 예측합니다. 또한 shadow Net에서는 SH coefs를 grayscale로 받아오는 점도 특징입니다. (LR1×9)(\mathbf{L} \in \mathbb{R}^{1\times9}) 그림자는 spatial light 분포에만 영향을 받기 때문입니다. 그림자를 따로 추정하여 더 효율적인 relighting을 이끌었다고, 저자들은 밝히고 있습니다.


3.4 Objective Function

L(C,C(GT),S)=MSE(C,C(GT))+λ MSE(S,1)\mathcal{L}(\mathbf{C},\mathbf{C}^{(GT)},S) = \text{MSE}(\mathbf{C},\mathbf{C}^{(GT)}) + \lambda \ \text{MSE}(S,1)

최종 loss식은 다음과 같습니다. first term은 reconstruction에 해당하며, NeRF에서와 동일합니다. first term에서 사용하는 예측 color C\mathbf{C}를 구하는 과정에, SH 계수나 network들이 모두 사용되므로, 해당 loss만으로 파라미터들을 업데이트합니다.
second term은 shadow를 정규화하는데, shadow network가 모든 SH로 표현할 수 없는 greyscale lighting을 모두 흡수하는 것을 방지하기 위해 사용합니다. 따라서 shadow net이 그림자 부분만 학습하도록 유도합니다.


3.5 Training Implementation Details

Frequency Annealing

  • γk(x):γk(x)βk(n)\gamma_{k}(\mathbf{x}): \gamma'_{k}(\mathbf{x})\beta_{k}(n) -> PE components
  • βk(n)=12(1cosπclamp(αi+Nfmin,0,1))\beta_{k}(n) = \frac{1}{2}(1-\cos{\pi}\text{clamp}(\alpha-i+N_{fmin},0,1)) -> annealing coefficient
  • α(n)=(NfmaxNfmin)nNanneal\alpha(n) = (N_{fmax}-N_{fmin})\frac{n}{N_{anneal}}: 시작 시점부터 끝 시점까지의 PE 사용 숫자(8->12) step
  • nn: current training iteration
    Deformable NeRF의 인코딩 기법을 차용하여 annealing coef βk(n)\beta_{k}(n)에 따라, iteration이 진행되면서 더 많은 Positional Encoding이 적용되도록 구현하였습니다.

Ray Direction Jitter

xi=o+ti(d+ψ)x_{i}=\mathbf{o} + t_{i}(\mathbf{d}+\psi)
  • ψ\psi: ray jitter (uniformly sampled)
    NeRF-OSR의 일반성을 위하여, ray에도 jitter를 걸어주었습니다.

Shadow Network Input Jitter

S({xi}i=1Ndepth,L)=S({xi}i=1Ndepth,L+ϵ)\mathbf{S}'\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L}\Big) = \mathbf{S}\Big(\{\mathbf{x}_{i}\}^{N_{depth}}_{i=1}, \mathbf{L} + \epsilon\Big)

training lighting의 과적합되는 것을 피하기 위해, shadow input에도 노이즈를 걸었습니다. greyscale SH map에 normal noise ϵ\epsilon을 더해주었습니다. 이를 통해 비슷한 조명 조건일 때, shadow가 크게 달리지지 않는다는 robustness 특징을 얻게 되었습니다.

Implementation

NeRF++ 모델을 base로 코드가 구현되어 있습니다. (코드가 매우 복잡합니다.. 코드리뷰 슬라이드는 위에 기재하였습니다.) background 모델을 따로 두어 360도의 environment map을 NeRF로 학습할 수 있도록 구현하였습니다.



4. New Benchmark for Outdoor Scene Relighting

기존 dataset의 문제점은relighting이 고려되지 않았기 때문에 (1) uncontrolled setting에서 사진들이 수집되었다는 점과, (2) environment map을 제공하지 않는다는 점입니다.
NeRF-OSR Dataset은 1️⃣ 8개의 site에 대해 다른 뷰와 시간을 제공하며, 2️⃣ colour callibration이 가능한 360도 environment map을 제공하고, 3️⃣ COLMAP을 활용하여 env map을 월드 좌표계에 적용한다는 contribution을 가집니다.



5. Results

Qualitative

[2] Self-supervised outdoor scene relighting(Philip)과 [3] Multi-view relighting using a geometry-aware network(Yu)와 NeRF-OSR의 qualitative 비교 결과입니다. Ground truth environment map에 대해 더 나은 illumination을 포착하는 것을 확인할 수 있습니다.

Quantitative

Site 1 ~ Site 3에 대한 metric 비교입니다. 모든 지표에 대해 NeRF-OSR이 가장 좋은 성능을 보였습니다. Ablation study에서는, annealing을 제거했을 때 성능이 가장 떨어지는 것을 확인할 수 있었습니다.



6. Conclusion

  • NeRF-OSR은 second-order SH를 활용한 relighting을 구현하였습니다.
  • albedo, shadow, depth로 network를 나누어 intrinsic image decomposition을 구현하였습니다.
  • camera viewpoint를 조정하여 relighting이 가능합니다.
  • environment map을 활용한 새로운 relighting 데이터셋을 구축하였습니다.


Reference

[1] NeRF for Outdoor Scene Relighting, https://arxiv.org/pdf/2112.05140
[2] Self-supervised outdoor scene relighting, https://arxiv.org/pdf/2107.03106
[3] Multi-view relighting using a geometry-aware network, https://repo-sam.inria.fr/fungraph/deep-relighting/

profile
Interested in Vision, Generative, NeRFs

0개의 댓글