Paper/Generation

Text-to-3D using Gaussian Splatting

침닦는수건 2023. 12. 5. 20:56
반응형

내 맘대로 Introduction

이 논문도 제목에서 바로 알 수 있듯이 text to 3d 문제를 gaussian splatting 써서 풀어보고자 한 논문이다. 3D GS 논문 공개되자 마자 계란 후라이식 논문으로 SDS loss 갖다 붙이는 text-to-3d 컨셉들이 하도 많이 나오니 최초라고 주장하는 논문이 몇갠지 모르겠다. 이 논문 역시 거의 완성된 요리에 계란 후라이 얹고 새로운 요리인 척 하는 논문 중 하나다. 

 

핵심 아이디어는 2d diffusion model의 SDS loss로 3D GS를 학습시킨다는 컨셉으로 완전 동일하다. 초기 3d gaussian 위치를 잡아 줄 때 3d diffusion model, text-to-pcd model을 썼다는 점에서는 GaussianDreamer 와 유사한 점도 있다. 물론 3d diffusion model을 초기화에만 사용했기 때문에 똑같진 않다. GaussianDreamer > 이 논문 느낌.

 

반복되는 내용이다 보니 학술적 가치보다 그냥 기록용으로 정리해둔다.

 

메모하며 읽기


3D GS 논문에 끼얹을 계란 후라이가 SDS loss라는 것을 미리 설명하고 시작함.

그림이 복잡하지만 3D diffusion model (text-to-pcd) 로 초기값을 잡아준 뒤, 2D diffusion SDS loss, 3D diffusion SDS loss로 학습하는 구조다. 3d diffusion model이 개입하는 부분은 geometry에 집중, 추가적으로 2d diffusion model로만 튜닝하는 부분은 appearance에 집중하는 구조다. 

주목할 점은
1) 3d diffusion model SDS Loss를 position update에만 걸어주는 점
2) compactness based densification 을 제안해서 3D GS가 증식하는 규칙을 새로 추가한 것이다.

Point-E (3D diffusion model)을 이용해 위치와 색상을 갖고 있는 3d point들을 생성하고, opacity나 scale, rotation의 경우 임의로 초기화 해둔다. 이후 GS 의 파라미터들을 SDS loss를 이용해 업데이트하는 것이 전부이긴 하다. DreamFusion의 컨셉 그대로 임.



diffusion prior를 2d와 3d 모두에서 가져오기 때문에 SDS loss를 두 방향 모두에서 가져올 수 있는데, 실험적으로 보았을 때 3d diffusion model이 학습 데이터 측면에서 다양성이 부족하기 때문에 position을 제외한 나머지는 오히려 방해가 되었다고 한다. 

따라서 2d sds loss 에서는 모든 파라미터 x_t, 3d sds loss 에서는 positiona, p_t만 업데이트되도록 했다. 
위 방식대로 2d-3d prior를 둘 다 이용해서 학습을 시켰을 때 완벽하다면 좋은 결과가 나왔겠지만, 실제로는 아쉬운 성능이 보였는지 refinement step을 추가했다. 요약하자면, 2d diffusion prior만 이용해서 조금 더 업데이트를 해주는 것과 더불어 gaussian이 생성되는 logic을 추가해서 유효한 gaussian 들이 늘어나도록 했다. 

diffusion prior를 사용하는 것은 수식부터 개념까지 완벽히 이전과 동일하다. 후자인 gaussian generation logic은 기존 logic에 추가로 적용되는 것인데, 현재 gaussian을 clustering해서 묶었때 서로 떨어진 거리가 반지름의 합보다 크면 사이에 gaussian을 추가 해주는 방식이다. 

쉽게 말하면 position gradient만 보는 것이 아니라 실제로 물리적으로 떨어진 거리가 gaussian끼리 꽤 멀면 중간중간을 채워주는 것이다. 

기존 logic과 더불어 위 추가 logic을 사용하면 generation이 더 강하게 되기 때문에 빼곡하게 생성된다. 많아질수록 성능이 좋아지는 것이 아니기 때문에 조금의 regularization을 더 해주어 최대한 유효한 gs만 생성되도록했는데 
1) object center로부터 거리가 되도록 가까울 것. (물체 생성을 목표로 하고 있으니 물체 중앙에 몰려있어야 성능이 좋을 것이란 가정)
2) 물체 중앙에 가까울수록 opacity가 높아야 하고 멀면 낮아도 된다. (물체에 해당하는 gs만 뚜렷하게)



이렇게 하면 좀 긍정적인 효과가 있다고 한다.


GS 초기화가 생각보다 많이 중요한데, point-E 썼다. color는 안 쓰고 position만 가져오는 식으로. (앞과 중복되는 내용임)
사람이 직접 줄수도 있는데 그걸 되도록 고르게 분포한 pcd로 초기화하기 위해서 farthest point sampling 기법으로 고르는게 좋다.

반응형