Paper/3D vision

PET-NeuS: Positional Encoding Tri-Planes for Neural Surfaces

침닦는수건 2023. 6. 29. 12:10
반응형

내 맘대로 Introduction

이 논문은 NeuS 대비 속도, 성능 두 마리 토끼를 잡아 앞지르겠다는 논문이다. 1) TensoRF와 같이 데이터 representation을 바꾸는 것과 2) 바뀐 representation에 맞도록 positional encoding을 바꾸는 것, 3) self.attention convolution을 추가하는 것을 메인으로 다룬다. 추측컨대, 1)을 해보았을 때 아래 그림과 같이 단순히는 실패한다고 해서 2) 3)을 추가한 듯 하다.

 

 

메모하며 읽기


글은 길지만 핵심은 짧다.

커버하는 공간을 bounding box로 normalize하고, bounding box를 3개의 평면의 곱으로 분할한다는 것이다.

TensoRF에서 volume을 vector-matrix decomposition하는데 그 중 한 경우인, matrix-matrix decomposition이랑 같다. 

(matrix 사용시 연산량이 좀 뛰었던 것 같은데... 수렴 속도가 빠르니 감수하는 것 같다.)

feature vector는 평면마다 bilinear interpolation해서 총 3개를 얻어서 사용한다. 

feature vector를 어떻게 만들었는지는 뒤에 설명한다. tri-plane 컨셉이 우선이라 앞에서 설명하는 듯.

loss term은 저자의 이전 논문인 HF-NeuS에서 가져왔다.

Tri-plane represenation 쓸 때도 초기화를 해주는 것이 좋은데 MLP 하듯이 sphere 형태로 시작하는 것을 그대로 하면 조금 아쉬웠다고 한다.

그래서 1) 8 MLP을 sphere 형태로 초기화한 뒤, 마지막 3 MLP만 가져와서 tri-plane 뒤에 붙이고 2) 8 MLP 결과로 나온 feature volume 중 (x,y,0), (0,y,z), (x,0,z)와 같이 원점을 가로지르는 3평면에서 뽑은 값과 갖도록 한 번 더 초기화를 한다.  

꽤나 복잡해보이는데 이 방식으로 하니 아래 그림과 같이 더 나았다고 한다.

일단 tri-plane을 쓰면서 쪼개진 3개의 평면은 positional encoding만 단순히 넣어준다고 했을 때 MLP처럼 위치에 대한 inductive bias가 잘 반영되지 않는다. (이건 grid representation 연구들에서 많이 언급되는 문제)

그래서 특별히 평면 별로 나눠서 encoding을 하고 이를 곱해서 최종 형태를 만들기로 했다. 그 방법은 fourier decomposition을 기본으로 했다.

일단 시작은 수식(2)와 같이 position 정보를 fourier decomposition이 될텐데 생각해보면 MLP로 모델링 될 수 있다. 오히려 infitie M을 사용하지 못하고 finite M을 사용하므로 절삭되는 부분에서 오는 오차를 MLP가 커버할 수도 있으니 효과적으로 모델링 할 수 있다고 주장한다. 수식(3)까지 온 것이다.

notation이 기니까 좀 축약하면 수식(4)가 되고 평면 별 값을 다 곱해주면 최종적으로 수식(6)이 된다. 
여기부턴 정리 및 트릭이다.
수식(6)으로 정리는 했지만 fourier decomposition을 선택하고 전개한 것이지 이게 positional encoding 측면에서 grid representation에서 딱 맞는다고 확신할 수 없다.

그래서 조금이나마 더 grid representation에 잘 맞도록 유도하기 위해서 형태를 조금 변형해준다. 

일단 수식(6)은 x, y, z가 얽히고 설켜있으므로 x 기준, y 기준, z 기준으로 묶어서 분리를 해본다. 수식 (7-9) 꼴이 되고 수식(10-11)과 같이 새 변수를 정의해서 최종적으로 수식 (12)까지 간다.

수식(12)를 보면 x 관련 4개, y 관련 4개, z 관련 4개로 정리되는 것을 볼 수 있다. g, h, w를 까놓고 보면 각각이 완벽히 x에만, y에만, z에만 종속적인 것은 아니다. 수식(10, 11) 을 보면 안에 y, z 가 껴있으니 말이다. 

다만 의도적으로 x, y, z 각각 축 입장에서 재정리한 변수로 만들어서 중복되더라도 분리해서 넣어줌으로써 tri-plane이 조금 더 position에 대한 inductive bias를 잘 배워주길 기대하는 트릭인 것이다.

근데 하나 어이없는 것은 수식(12)까지 열심히 전개해놓고 마지막엔 다른 걸 쓴다.

다 만들고 생각해보니 plane feature에 해당하는 T들도 사실 positional 에 대한 feature이다. (이미지 feature를 입력으로 사용하지 않으니 positional만 입력으로 만든 feature가 무슨 정보를 담고 있겠는가?)

그럼 사실 T plane들과 g, h, z 변수들이 일맥상통하는게 아닌가?

실제로 관찰해보니 비슷했다고 한다. 그래서 수식 (12)에서 g, h, z에 해당하는 term들을 T plane 값들로 바꿔치기 하고 덤으로 원래 positional encoding을 맨 처음에 concat 해서 최종 tri plane positional encoding을 완성한다.

(이렇게 g, h, z를 T로 대체해서 씀으로써 T가 조금 더 position feature 역할을 강하게 할 수 있도록 유도하는 꼴이 될지도...)

여기서 하나 잊지 말아야 할 것은, 수식 (13)에서 간단히 적혀있어서 encoding 값이 짧을 것 같지만 실제로 frequency가 다양하므로 얼마의 frequency band를 쓰느냐에 따라 길이가 달라진다.

frequency 사용해서 열심히 feature를 만들어뒀는데 이걸 그냥 convolution을 해버리면 그 효용이 떨어진다.

그래서 multi frequency로 만들어둔 feature를 잘 aggregation하고 싶은데 일반적인 방식인 gaussian kernal로 smoothing해서 쓰는 것은 foreground와 background 경계 부분이 뭉개지면서 성능 하락이 보였다고 한다.

해결책은 Swin transformer의 self-attention convolution이다. frequency 별로 window size가 다른 SAC를 적용했다. 

연산량 증가가 문제가 될 수 있기 때문에 SAC 1 layer만 사용했고 stride를 조절해서 non-overlapping convolution이 이루어지도록 했다.

그리고 frequency 별로 튀어나온 feature를 MLP에 넣고 MLP가 잘 aggregation해주길 기대했다. 


loss는 간단하게 color loss 와 eikonal loss 뿐이다.

핵심은 grid representation과 positional encoding에 있기 때문인 듯.
반응형