Paper/Neural rendering

[NeRF] HyperNeRF: A Higher-Dimensional Representation for Topologically Varying Neural Radiance Fields

침닦는수건 2023. 4. 11. 23:51
반응형

HyperNeRF: A Higher-Dimensional Representation

for Topologically Varying Neural Radiance Fields

 

내 맘대로 Introduction

이 논문은 사진만 보아도 알 수 있듯이 Nerfies의 저자가 후속 연구로 진행한 것인데, NeRF를 확장하여 deformable NeRF를 (Nerfies 보다) 더 잘 만드는 논문이다. 단순히 물체의 이동이나 자세 변화 정도를 커버하는 것이 아니라 topology가 변화하는 수준까지 커버하는 것을 목표로 했으며 논문에서 대표적 예시로 극심한 얼굴 표정 변화를 사용하여 그 결과를 보여준다. 일단 project page의 데모 영상들만 보아도 압도적인 퀄리티를 자랑하는 것을 볼 수 있는데 성능 하나는 확실한 방법인 것 같다. 

 

핵심이 되는 아이디어는 observation-to-canoncial 컨셉이 그대로인 것은 맞는데 canoncial space를 굉장히 고차원으로 정의해서 time, topology 변화까지 잘 담을 수 있도록 변경한 것이다. 그것을 hyper space라고 부르면서 설명을 하는데 기본 개념이 level set method라는, 알고 보면 쉽지만, 생소할 수 있는 개념에서 시작해서 이 이상의 요약은 조금 어렵다. 

 

핵심 내용

먼저 컨셉을 이해하는 것이 중요한데 그 영감을 얻은 level set method을 보면 다음과 같다. 주의할 점은 level set method를 썼다는 것이 아니라 level set method에서 영감만 얻었다는 것이다. 

level set method는 간단하게 어떤 범위 내 값을 내뱉는 implicit function 하나가 있을 때, 공간을 이 함수를 이용해 값들로 가득채운 후 특정 값(level set)이 형성하는 surface를 얻는 방법이다. 우리가 흔히 알고 있는 SDF function을 이용하여 surface를 얻는 방법을 상상하면 된다. 위 그림은 2차원의 level set method 예시가 되겠다. 이를 3차원에서 생각할 수도 있다. (x,y,z) -> SDF 형태의 implicit function일 때 말이다.

 

논문에서 영감은 만약 z=1로 고정이 되어있는 상상으로 시작한다. (x,y,z)->SDF 형태에서 zero level set으로 3차원 토끼 mesh를 얻는 상황에서 z가 1로 고정되었다면, z=1 plane으로 3차원 토끼를 절단한 2차원 그림이 나올 것이다. 아래 그림을 보면 상상하기 편할 것이다. 

3차원(고차원)에서 특정 조건(z=1) 하나만 주어지면 2차원 그림이 나온다는 것인데. 그럼 만일 3차원이 geometric한 의미를 갖는 (x, y, z)가 아니라 (x, y, w)와 같이 geometric한 의미를 갖는 (x, y)와 latent code (w)로 이루어진 3차원이라면 어떨까?

 

가령 w가 토끼 크기에 관한 차원이라면 (x,y,w) -> SDF 일 때, w=1 plane으로 자르면 (x,y,w=1)의 zero level set이 의미하는 것은 크기가 1인 2차원 토끼가 될 것이다. 만약 4차원이라면? (x,y,z,w=1)->SDF에서 크기가 1인 3차원 토끼가 나올 것이다. 

 

SDF 예시에서도 벗어나, 계속 확장해서 만약 (x,y,z, w1, w2, w3, w4....wn) 총 n+3 차원이라고 했을 때 w1은 크기, w2는 색, w3은 성별 등등 다른 정보를 담고 있는 차원이라고 보고 (w1=1, w2=1.7, w3=0.8 ..., wn=2.0) plane으로 잘랐다고 상상하면 나오는 (x,y,z) zero level set이 만드는 결과는 w1~wn을 만족하는 결과일 것이다. 

 

HyperNeRF는 위 상상을 가져와서 NeRF의 초기 형태가 (x,y,z)->density, color 였던 것을 (x,y,z, w1, w2, ..., wn) -> density, color로 바꾼 것이다. Nerfies를 이러한 관점에서 보면 (x,y,z,t) -> density, color라고 할 수 있는데 더 더 확장해서 훨씬 더 많은 조건 w를 네트워크가 배울 수 있도록 capacity를 폭발적으로 늘린 것이다. 말 그대로 Hyper dimension space인 것이다. 

 

각 w가 어떤 정보를 내포한 차원인지 굳이 정의하진 않지만, 학습이 끝난 뒤 w들은 time, topology 등 다양한 deformation 유발 요소를 함축한 형태일 것이라는 것은 분명히 알 수 있다. 

 

전체 파이프라인을 가져와 다시보면, 일단 전반부는 Nerfies와 동일하다. observation-to-canonical 컨셉이지만 observation-to-hyper canonical이 된 차이가 있다. deformation field는 동일하게 rotation,translation을 내포한 screw axis representation으로 추정해서 x->x'로 옮기는 것이다.

 

ambient slicing surface는 hyper space를 어떤 w 조합으로 잘라야 지금 observation이 나오는지, 위 예시로 다시 말하면 hyper space를 어떤 (w1=??, w2=??, ... , wn=??)로 잘랐을 때 나온 결과가 지금 observation과 동일할지 맞춰주는 네트워크다.

 

이것을 heuristic하게 사람이 손으로 (1,0,0,...,0), (0,1,0,...,0), (0,0,1,...,0)과 같이 해줄 수도 있지만 굳이 이렇게 하는 이유는 다음과 같다. 

만약 사람이 heuristic하게 정해줘서 hyper space를 자를 경우, 위 그림에서 왼쪽 그림처럼 hyper space를 사람이 정한 plane으로만 단조롭게 자르는 것이 된다. hyper space가 복잡한 구조라면 문제가 되지 않을 수 있지만 위 그림처럼 복잡하지 않은 구조라면 공교롭게도 사람 딴에는 다양하게 하게 잘랐지만 결과가 같을 수도 있다. 이럴 경우 효율이 떨어질 것이라는 것은 직관적으로 알 수 있기에 네트워크에 맡겨 우측 그림과 같이 다양한 형태의 plane으로 자르는 것이다.

실제로 실험적으로 해보면 heuristic하게 지정한 plane을 사용했을 때 성능이 많이 떨어졌다고 한다.

 

이후 observation-to-hyper canonical space mapping이 되었다면, 뒤에는 똑같이 NeRF를 학습시키면 된다. appearance code나 latent code는 Nerfies를 비롯한 deformable NeRF에서 공통적으로 말한 바 있으니 생략한다. 

수식으로 보면 엄청 간단한데 그냥 NeRF에 (x,y,z)만 넣는 것이 아니라 (x,y,z,wi)를 넣어주면 끝이다.  

Nerfies를 베이스로 잡고 있기 때문에 Nerfies에서 입증된 효과적인 학습 방법은 그대로 다 가져와서 사용했다. 

 

Results

수식으로 보면 엄청 간단하지만 그 hyper space 컨셉을 도입한 것은 엄청난 효과를 보여주는 듯 하다. Nerfies의 결과도 엄청 완성도가 높았는데 그를 압도하는 모양이다. 프로젝트 페이지를 보면 훨씬 더 deformable object를 모델링했음을 알 수 있다.

반응형