논문 요약

[ICCV-2021] Nerfies: Deformable Neural Radiance Fields (2)

논문읽어주는석사생 2021. 6. 7. 17:10

* 본글의 모든 그림, 영상은 논문의 본문 및 발표영상에서 가져왔습니다.

 

1편에 이어서 구체적으로 어떤 regularization term을 사용해서 결과를 향상시켰는지 더 살펴보도록 하겠습니다.

이번 글에는 전반적인 구조에 대한 내용은 포함되어있지 않으니, 1편을 보시지 않은 분들은 1편부터 봐주세요!

 

Nerfies: Deformable Neural Radiance Fields (1) : https://reading-cv-paper.tistory.com/entry/archive-Nerfies-Deformable-Neural-Radiance-Fields-1

 

[archive] Nerfies: Deformable Neural Radiance Fields (1)

* 본글의 모든 그림, 영상은 논문의 본문 및 발표영상에서 가져왔습니다. 상당히 오랜만에 논문의 내용을 정리해봅니다. 뭐 이런저런 이유로 오늘은 좀 다른 내용의 논문을 들고 왔습니다. 요즘

reading-cv-paper.tistory.com

 

 

Nerfies 논문 전문 : https://arxiv.org/pdf/2011.12948.pdf

Nerfies 프로젝트 홈페이지 : https://nerfies.github.io/

[출처] Park, Keunhong, et al. "Deformable Neural Radiance Fields." arXiv preprint arXiv:2011.12948 (2020).

 

 

 

<알고리즘 설명>


4. Additional Regularization Method

모델의 전반적인 구조는 위에서 설명한 것이 다입니다. 

하지만, 저렇게만 돌린다면 아무래도 학습에 어려움이 많을 것입니다. 이미지의 variation이 크면 클 수 록 학습이 어려워지기 때문이죠. 이런 부분들에 prior를 주기 위해 본 논문에서는 여러가지 regularization term과 방법을 제안합니다. 

 

(1) Elastic Regularization

[그림 1]

어떤 물체를 deform 시킨 이미지를 얻을 때 어려운 부분, 즉 어색하게 보이게 만드는 부분이 바로 distortion입니다. [그림 1]은 nerfies를 학습시킬 때 어떤 이미지의 정면부를 제외하고 측면, 즉, 왼쪽 얼굴이나 오른쪽 얼굴로 치우쳐진 이미지 20장을 이용해 학습시킨 결과입니다. elastic regularization을 끄고 학습시킨 결과를 보면 왜곡이 생긴 것을 확인할 수 있습니다. 

 

사람의 얼굴이나 몸의 경우 각각의 부위가 따로 움직이기는 하지만, 현재와 같이 최대한 사람이 움직이지 않는 상황이라면, 눈은 왼쪽으로 움직이는데 코는 오른쪽으로 움직인다던가, 양쪽 눈이 서로 다른 방향으로 움직이는 상황은 발생하지 않죠. 확률이 낮죠. 

 

이러한 부분에 prior혹은 constrain을 줘서 학습을 시키는 부분이 바로 elastic regularization입니다. 

 

elastic regularization은 크게 두가지의 term으로 나뉩니다.

a. elastic energy

: 사람이 가만히 있는 상황에선 보통 몸은 같은 방향으로 움직입니다. 즉, 포인트 별로 다른 rotation, translation변환을 가질 확률이 매우 낮죠. 이게 따로 움직이게 된다면 위의 [그림 1]에서와 같이 왜곡이 발생하게 되는 것입니다. 이러한 부분을 없애기 위해, 입력 값으로 들어와 계산된 point들의 jacobian을 계산함으로써 한 방향으로 움직이도록 합니다. (하...저도 이 부분을 잘 이해를 못 했어요ㅠㅠ 저는 수식 바보랍니다ㅠㅠ)  

b. Robustness

: 위의 경우, 물체가 한 방향으로 움직이도록 하는 term이라면, robustness의 경우 구해진 elastic energy에 어느정도 유연성을 가합니다. 즉, 사람의 얼굴을 생각해보면, 웃음을 짓는 경우 얼굴의 각 포인트들은 서로 다른 방향으로 움직이게 됩니다. 위에서 말한 것과는 반대되게, 서로 다른 방향으로 움직일 경우가 발생하는 것이죠. 따라서 위의 값에 어느정도 제약을 주기 위해 robustness를 걸게 됩니다. 

 

그 두개를 합친 수식은 위와 같습니다. 로우 안에 들어가는 x가 elsatic energy를 jacobian으로 구한 부분이고, 로우 수식을 통해 일정 값 이상으로 커지지 않도록 제어를 합니다. 

 

 

(2) Background Regularization

두 번째로 추가된 term입니다. 이 term은 background가 너무 맘대로 움직이지 않도록 제약을 걸어주도록 합니다. 

이 논문 같은 경우 foreground만 rendering하는 것이 아니라 background에 대해서도 진행이됩니다. 이때, 한가지 제약 조건을 거는데요. 배경의 경우 움직이지 않는 static background라는 것입니다. 즉, 앞에 사람의 경우 약간의 움직임이 발생할 수 있지만, 배경은 움직이지 않는다는 가정이 포함된 것이죠. 

 

이러한 제약 조건을 넣기 위해, 다음의 수식을 통해 정규화를 해줍니다. 

먼저, 앞서 preprocessing으로 sfm 알고리즘을 사용함으로써 어떤 point가 정적인 point인지, dynamic한 point인지를 찾아내게 됩니다. 이때 찾아진 background point들(xk)에 대해서 T인 deformed field를 통과했을 때 어떠한 움직임도 존재하지 않도록 제어를 걸어줍니다. 즉, 두 값의 차이가 0이 되도록 loss를 추가해주는 것입니다.

 

논문 저자에 따르면, background에 대한 rendering을 돕는 역할도 할 뿐만 아니라, background에 대한 prior를 통해 앞의 물체의 움직이는 방향과 같은 prior에 대한 정보도 함께 주는 역할도 할 수 있다고 합니다. 

 

(3) Coarse to Fine Deformation Regularization

NeRF 논문을 보신 분들은 아실테지만, NeRF 논문에서 얘기하는 Coarse to fine도 있지만! 여기서는 전혀 다른 coarse to fine 방식을 제안합니다.  

[그림 2]

위의 [그림 2]에서 보이는 것 처럼 동작이 큰 head turn과 동작이 작은 smile의 경우 각자가 잘 표현해낼 수 있는 frequency가 다릅니다. 즉, smile 처럼 움직임의 범위가 작은 동작의 경우 m=8인 high frequency에서 잘 표현되지만, head turn처럼 움직임의 범위가 큰 경우에는 m=4인 low frequency에서 잘 표현됩니다. 

 

본 논문에서는 둘 다 잘해내기 위해 iteration을 돌아가면서 low frequency 부터 high frequency까지 적용하는 방식을 제안합니다. 이때 low와 high는 positional encoding을 할 때의 주파수가 됩니다. 실제로 실험 결과를 보면 위의 [그림 2]에서 c2f의 결과가 두 경우 모두 잘 찾아내는 것을 확인할 수 있습니다. 

 

여기서 그럼 먼저 positional encoding이 무엇인지 알아야 할텐데요. 이 방식은 NeRF 모델에서도 제안된 것과 똑같은 것으로, 실제로 x,y,z 좌표와 카메라의 viewing direction만 input으로 사용하려고 하면 dimension이 너무 낮습니다. 즉, 복잡한 모델을 학습시키기에 너무 단순한 데이터라는 것이죠. 그래서 이 데이터의 차원을 높히기 위해서 positional encoding을 하게 됩니다. 이 encoding하는 방식이, sin과 cos함수로 좌표를 표현하게 하는 방식인데요. 이때 frequency를 조절함으로써 coarse to fine deformation을 하게 됩니다. (이 부분도...확실하지 않아요ㅠㅜㅠㅠㅠ)

 

<다른 논문과의 비교>


제가 1편의 서두에서 이러한 컨셉을 가진 여러 논문이 동시에 많이 쏟아져 나왔다고 말씀드렸습니다. 각각의 논문이 어떻게 다른지도 이 논문에서 가볍게 다루는데요. 저도 한번 가볍게 다뤄보도록 하겠습니다ㅎㅎ

 

(1) [CVPR-21] D-NeRF: Neural Radiance Fields for Dynamic Scenes

논문 전문: https://arxiv.org/pdf/2011.13961.pdf

[출처] Pumarola, Albert, et al. "D-NeRF: Neural Radiance Fields for Dynamic Scenes." arXiv preprint arXiv:2011.13961 (2020).

 

이 논문의 경우 CVPR 2021에 publish된 논문으로, 컨셉자체는 nerfies와 거의 똑같습니다.

[그림 3]

[그림 3]이 해당 논문의 큰 컨셉을 표현한 그림입니다. 보시면 아시겠지만, 정말 거의 똑같은 구조입니다. 

 

몇가지 차이점이 있기는 합니다. 

a. deformation code 없이 frame의 순서에 대한 값을 code로 사용한다. 

: nerfies의 경우 1편에서 설명드린데로, 해당 이미지에서의 움직임 정보를 담고 있는 deformation code를 따로 계산해 학습에 추가해주는데요. 이 방식의 경우 이러한 움직임의 정보가 시간의 정보를 갖고 있는 frame t를 이용하여 처리합니다. (좀 더 implicit하다고 볼 수 있을 것 같네요.)

 

b. 특별한 regularization method가 추가되지 않았다.

: 즉, background에 대한 처리, rigidity에 대한 보장, frequency에 대한 처리 등과 같은 부분들이 빠져있습니다.

 

c. 실제 데이터로 테스트 되지 않음.

(아마도 그래서 특별한 term들이 없어도 학습이 잘 되었게 아닐까 싶기도 합니다..ㅎ)

 

(2) [archive] Non-Rigid Neural Radiance Fields: Reconstruction and Novel View Synthesis of a Dynamic Scene From Monocular Video

논문 전문: https://arxiv.org/pdf/2012.12247.pdf

[출처] Tretschk, Edgar, et al. "Non-Rigid Neural Radiance Fields: Reconstruction and Novel View Synthesis of a Deforming Scene from Monocular Video." arXiv preprint arXiv:2012.12247 (2020).

 

이 논문의 경우 NR-NeRF로 불리며, 아직 publish 되지 않은 논문입니다. 컨셉은 완전히 똑같습니다.

 

[그림 4]

그림에서 볼 수 있 듯이 살짝 다른 부분이 있는데요. 

a. rigidity를 위한 network가 따로 학습되고 있는 모습을 보입니다.

: nerfies 같은 경우에는 sfm을 통해 구해진 background point들을 rigid한 영역으로 취급했는데요. 이 논문 같은 경우는 따로 네트워크를 학습시켜 background를 분리해냅니다. 그 후 background라고 판단된 point들에 대해서는 w(x)를 0으로 둬, 해당 좌표가 deform되지 않도록 하는 것이죠. 

 

b. offset loss term 추가

: NR-NeRF의 경우, offset에 대한 loss term을 직접적으로 추가해줍니다. 

(이 부분은 좀 더 읽어봐야합니다ㅜㅜ 아직 다 못읽엇어요ㅠㅠ 제대로 읽으면 추가할게요.)

 

 

 

<사족>

 


기나긴 포스팅이었습니다..

오랜만에 좀 어려운 논문을 만나(정확히는 제 분야가 아닌 논문을 만나) 많이 헤맸습니다ㅜㅜ 

그래서 아마 논문 내용 중 틀린 부분들이 있을 수 있어요! 최대한 제가 이해한대로 풀어보려고 하였으나 부족하네요.

 

그래도 제가 생각했을 때의 몇가지 한계점을 짚어보자면.

1. resource에 대한 한계 : 일반 모든 NeRF가 그렇듯, 학습하는데 오래걸립니다. 아무래도 ray를 쏘고, point를 sampling하고 해당 포인트들에 대해 모두 네트워크에 넣으려고 하면 오래걸릴 수 밖에 없겠죠.

2. 움직임의 한계 : 이 논문의 경우 거의 물체의 움직임이 정적인 것에 가깝습니다. 즉, 사람이 가만히 있으려고 하나, 살짝 움직여지는 범위 내에서 동작을 하는 것이죠. 실제로 논문에서도 적혀있지만, 크게 물체의 geometry가 바뀌는 경우(즉, 들고 있던 물체를 내려놓는다거나, 안경을 벗는다거나) 하는 등의 큰 변화에 대해서는 반영해주지 못하는 한계점이 있습니다. 

 

이러한 한계점에도 불구하고, 사진을 동시에 찍어야하는 기존 NeRF에서 엄청난 진보를 보였고, 또 결과 또한 깔끔하기 때문에 대단한 논문이라고 생각합니다.

 

코드도 공개되어 쉽게 돌려볼 수 있습니다!

저는 아직 돌려보지 못했지만, 안에 jacobian 계산이나, deformation 코드 계산 등의 결과를 좀 보려면 코드를 돌려봐야할 것 같아요. 혹시 돌려보게 된다면, 후기 남겨놓겠습니다ㅎㅎ

 


틀린게 있거나, 궁금한게 있으시다면 언제든지 댓글 남겨주세요!

감사합니다!