Paper/3D vision

GSTAR: Gaussian Surface Tracking and Reconstruction

침닦는수건 2025. 1. 22. 18:22
반응형

내 맘대로 Introduction

 

RGB-D multiview video 셋업에서 tracked 3DGS 복원하는 논문. tracking이 꼈다는 것은 당연히 dynamic 시나리오. 보통 sequence를 다룰 때 이전 프레임에서 초기화한 mesh(혹은 3DGS) topology가 변하지 않는다는 가정 하에 다음 프레임에서 correspondence를 찾아가는 방식이지만, 이 논문은 다음 프레임에서 topology가 변할 수 있음을 추가한 것이 눈에 띈다. 

 

예를 들어, 첫 프레임에서 모자를 쓰고 있었다가 어느 프레임에서 모자를 벗었다면, 모자로 가려졌던 부분은 기존 topology로 아무리 매칭을 해본들 없던 부분이라 못 찾는다. 이런 문제를 짚으면서 topology가 변해야 하는 부분을 인식하고 해당 부분에 3DGS를 추가해주는 방식을 넣어서 보다 자연스럽고 변형이 많은 상황에서 더 성능이 좋다.

 

아쉬운 점은 이 하나의 결과를 얻어내기 위해 너무 많은 사전 작업과 세팅이 필요하다는 것. RGB D multiview 셋업은 쉽게 마련하기 어려울 뿐더러 마련한다 한들 모든 프레임을 TSDF fusion부터 MVS 등 각종 전처리를 다 해놔야 이 논문에서 제안하는 방식을 적용할 수 있다. 실 활용성이 매우 낮다는 점에서 컨셉만 가져가기 좋은 논문 같다.

 

메모

1) 첫프레임에서 mesh (MVS나 TSDF fusion 여기서는 RGBD니까 후자였을 듯) 초기화 + face 마다 3DGS 할당

2) 다음 프레임과 이전 프레임 간 correspondence search
-> multiview 이미지 전체에 대해 2d optical flow를 계산
-> flow backprojection을 전부 다 하고 가장 cost가 적은 matching이 correspondence

3) 각 face 3DGS 마다 position gradient, color gradient를 계속 관찰 (Rotation residual, translation residual 변수를 추가하고 얘네들이 클 경우를 유의)
-> gradient가 큰 3DGS는 분리가 필요한 (모자같은 ) 부분이라고 인식
-> 해당 부분은 densification 수행.

4) 반대로 3DGS 병합이 필요한 경우는 gradient로 처리하지 않고, 나중에 re-meshing 단에서 euclidean distance 기반으로 계산하고, post-processing 으로 merging 해줌. (굉장히 heuristic)
초기화 시에 각 mesh face마다 3DGS를 할당

N개 할당했다고 하는데, TSDF fusion 결과로 mesh를 얻었을 경우 mesh가 엄청나게 dense할테니 N=1 썼지 않을까.



이전 프레임 -> 다음 프레임 mesh 간에 correspondence는 

2d optical flow를 multiview 로 aggregation해서 사용

여러 시점에서 Proj(이전 프레임 vertex) + optical flow를 triangulation한 뒤에 해당 프레임과 가장 가까운 vertex를 찾아내는 방식

이걸 모든 프레임에 대해서 vertex 개수만큼 반복했다고 하니 시간 엄청 걸렸을 듯.

매칭 정확도를 높이기 위해서 one-ring neighbor의 3D flow가 smooth 하도록 강제함

---------------
optical flow를 RAFT 씀.


첫 프레임은 static이나 다름 없으니 기존 방식대로 3DGS를 수렴시킴. depth나 mask는 mesh가 있어서 손 쉽게 가능.


다음 프레임부터는 수렴시킬 때 3D correspondence는 찾아놨다는 전제 하에, correpondence끼리 normal이나 면적, SH가 비슷하도록 regularization하는 term만 추가됨.
-> 3DGS를 수렴시키는 부분은 vanilla 3DGS랑 거의 동일.


여기가 좀 핵심. 3dgs를 MESH FACE에 묶어두었으니 densification은 없다. 따라서 positional gradient를 이용할 일이 없다고 생각했을 수 있는데, 다른 방향으로 이를 topology가 변해야된다는 시그널로 생각함 (이 부분이 생각이 참 좋음)

rotation/translation은 face에 묶여있으니 그대로 두고, delta rotation/translation을 파라미터로 추가하고 이것들의 gradient를 관찰한다.

residual로 인해 발생하는 gradient가 일정 threshold 이상일 경우, densification을 수행해준다. 


densification 해서 3DGS가 특정 경계에서 추가된다면 뒤에 re-meshing에서 새로이 face를 구성해줌

-> 분리된 새로운 topology가 생성됨.





residual 값은 0에 가까워야 하고 불필요한 상황에서는 항상 0인 것이 이상적이므로 regularization 추가는 당연히 필수

positiona gradient가 클 때는 residual도 커야 하니 1- W로 weighting



경계 부분에서 positional gradient를 기준으로 분리해야 된다고 인식도 했고, 3DGS 추가 생성도 해줬다. 

그럼 어떻게 분리된 이후에 새로 생성된 3DGS는 어떻게 새로운 face를 생성할까? 

이부분도 상당히 heuristic하다. 쌩뚱맞게 TSDF fusion을 돌려서 mesh를 얻어 둔 것을 다시 불러와서

densified 이전 프레임 <-> 다음 프레임 TSDF mesh 

이렇게 두개 간에 거리를 보고 하나씩 하나씩 덮어쓰기 해주는 것. 

단순히 말하면 새로 생성된 3DGS를 face로 묶어주는 연결 관계는 TSDF mesh에서 가져온다는 뜻.

-> 이렇게 무식하게 하다보면 face 뒤집히고 edge 뒤집히고 난리나는데
-> 이것도 그냥 mesh postprocessing 돌려버림.
 
반응형