Paper/3D vision

MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers

침닦는수건 2024. 6. 19. 18:13
반응형

내 맘대로 Introduction

 

point cloud to mesh 알고리즘. 어떻게 보면 poisson recon이라고 볼 수 있겠지만, point 중 버릴 건 버리고 어떻게 face를 형성해야 "실제 사람이 만든 mesh"처럼 만들어질 지 학습한 논문이다. 실제 사람이 만든 mesh의 경우, face가 과도하게 많지 않고 단순할 곳은 단순하게 자세할 곳은 자세하게 조절된 형태다. 

 

주어진 어지러운 point cloud에서 모든 point를 face로 묶어내는 것이 아니라 선별적으로 묶어서 vertex 수는 적지만 표현력이 뛰어난 mesh로 정리해내는게 주 목적이다. 

 

핵심 아이디어는 Objaverse, shapenet처럼 대규모 mesh 데이터로부터 평균적인 face 형성 규칙을 학습시킨 VAE를 이용하는 것이다. 

 

개인적으로 굉장히 깔끔한 논문이라고 생각한다.

 

메모

이 부분에 모든 내용이 다 들어있다.

1) trasnformer로 구성된 VQ-VAE를 만들어서 mesh-to-latent-to-mesh를 학습.

2) point cloud to latent를 학습해서 decoder 이전에 연결.

3) inference
 

보통 image to mesh, text to mesh와 같이 condition C로부터 mesh를 만드는 것을 생각하는데

point cloud to mesh가 효과적인 이유는 

image to pointcloud, text to point cloud 의 결과물이 많기 때문이다.

image to mesh를 궁극적으로 달성하고 싶으면 divide-and-conquer 전략으로 pointcloud to mesh만 가능하면 바로 달성 가능하기 때문.

또 point cloud라는 표현법 자체가 3D representation으로 많이 쓰이고 있기 때문만 아니라 특성 자체가 explicit하기 때문에 mesh와 엮기가 너무 편하다.

약간의 보강을 위해 vertex normal 정도 추가로 쓰면 충분하다.

---------------

학습 시 mesh-to-mesh VAE를 학습시키므로 mesh gt 동시에 corresponding pcd도 필요하다.

따라서 mesh에서 pointcloud를 뽑아내는 식으로 데이터를 준비해둬야 하는데 mesh face에서 뽑으면 너무 정갈하고 dense하므로 일부러 mesh를 뭉갠다음 뽑아서 sparse + noisy point cloud를 만든다.

VQ-VAE 사전학습은 

MESH face N개를 입력으로 넣고 latent (codebook)으로 압축한다음 다시 N개 face로 복원하는 방식이다. (vertex xyz*3*N)



사전 학습이 완료된 이후에는 point cloud에서 뽑은 feature를 중간 latent에 concat해주는 식으로 한번 더 튜닝한다

-> mesh face만 보고 학습했으니, pointcloud도 보고 학습하도록 한 번 더 튜닝해주는 것.

-> 이 과정에서 point cloud encoder 가 VAE latent space로 mapping하는 것을 배움.
point cloud까지 써서 학습이 최종 완료되면

실제 inference 시에는 

point cloud encoder가 뱉은 latent만 다 넣어서 inference하면 된다.

------

물체 전체의 point cloud를 한 번에 넣는 것이 아니라 국소적으로 N개 씩 끊어서 넣는 방식이고 sliding window하듯이 face가 겹치게 여러번 반복하면서 전체 object를 완성하는 방식

-> 데모를 보면 점점 자라는 방식이다. 
-> 제목이 autoregressive가 들어간 이유.

반응형