Paper/Human

Drivable 3D Gaussian Avatars

침닦는수건 2024. 2. 18. 02:22
반응형

내 맘대로 Introduction

 

이 논문은 3d scan 내지 mesh가 주어졌을 때 3d gaussian과 엮어서 avatar로 만드는 방법을 적는다. 그냥 scan to animatable avatar로 가도 되지만 novelty가 떨어져 realistic rendering을 같이 가져간다는 컨셉으로 3d gaussian을 추가한 것 같다. 

 

핵심 아이디어는 scan 내지 mesh를 tetrahedron으로 쪼개고, 그 안에 3d gaussian을 가두는 것이다. tetrahedron을 변형할 경우, barycentric coordinate로 표현된 내부 3d gs들이 따라움직일 것이므로, deformed avatar rendering이 자동으로 따라온다는 내용이다. 

 

자잘하게 skeleton, face keypoint, view direction 등이 첨가가 되어있지만 잘되게 만들기 위한 요소들인 것 같고 semantic label을 추가한 부분이 옷을 분리해낼 수 있다는 참신함을 보여주기 때문에 주목할 내용인 것 같다. 

 

일단 좋은 scan이 주어져 있어야 하는 환경이므로 사용이 쉽진 않을 것 같다.

 

메모하며 읽기


1) volumetric avatar를 tetrahedron으로 나눔
2) 그 안에 3d gs 할당함
3) 변형한 뒤 렌더링 자유자재
recap은 생략. 이미 다 아는 내용.

1) 일단 준비된 이미지에서 2d sementation mask 부위 별로 다 따놓음.

2) 3D scan + 3D keypoint + LBS로 기본 mesh 생성함 (이거 상당히 어려울 것 같은데 자세히 안나와있음. 이미 갖고 있다는 것에서 출발함)

LBS가 가능하다는 것은 이미 mesh deformation까지 할 준비가 되어있다는 것. scan 

3) TetGen이라는 알고리즘 써서 mesh 를 tetrahedron 으로 쪼갬

4) tetrahedron 단위로 쪼개져 표현된 mesh 전체 볼륨을 barycentric coordinate로 모든 위치 표현할 수 있도록 정의함.
tetrahedron에 deformation을 가한다 하면, tetrahedron의 3 edge에 rotation을 가하는 식으로 표현됨 (6 edge인데 3 edge면 충분한 이유는 3 edge만 정의되면 나머지 edge는 연결만 하면 자동 완성되기 때문임. edge 측면에서 보면 자유도가 3인 도형임)

그래서 수식(5)와 같이 표현되는데 이를 변형하면 point에 곱할 SO3를 얻을 수 있다. 

(사실 수식은 당연한 얘긴데 구현할 때 생각해보면, 변형 전 후 3 edge로부터 point에 곱한 SO3 계산할 수 있다 말하고 싶은 것)

수식(5)로부터 point에 곱할 rotation을 구할 수 있다는 것은 3d gs에 곱할 rotation도 구할 수 있다는 것

다시 말하면 다음 과정임.

tetrahedron 변형 -> SO3 계산 -> 내부 3d gs 전부다 tetrahedron과 같이 이동

여기서 tetrahedron 단위로 움직이는 것은 표현이 쉽지만, 내부 3d gs는 조금 더 움직여야 할 수도 있다. 내부에서 조금 배치가 달라져야 움직인 후 렌더링 퀄리티가 더 높아질 수도 있으니.

tetrahedron 변형 후 내부 3d gs들의 추가 변화들은 네트워크로 커버함. joint angle + vertex position을 던져 주면 새로운 위치가 나오는 MLP, 내부 3d gs의 위치, scale, roation을 업데이트하는 MLP, color를 업데이트 하는 MLP 등 총 3개의 MLP를 달았다.

------
MLP 3개를 학습시키고도 남을 정도로 3d scan이 어마어마하게 많아야 학습이 된단 소리기도 하니까 이건 직접 따라하긴 어려울 것 같다.
face의 경우 좀 더 세밀해야 하기 때문에 joint angle 대신 face keypoint embedding을 썼다.

auto decoded feature vector h는 뭔지 모르겠음. 그냥 colro 3채널 쓰는것보다 더 세밀하게 정보 표현할 수 있도록 color embedding을 가져와서 썼다고 이해하면 될 듯.

loss function 은 기존 3d gs와 동일함.

추가로 3d gs에 segmentation label을 지칭하는 P parameter를 추가해뒀다. 

P rendering 결과가 준비된 이미지 2d segmentation label과 일치하도록 color loss 주듯이 학습시키면 3d gs 마다 segmentation이 완성된다. 

이 P 갖고 옷인지 아닌지 구분할 수 있다고 한다. (하나 트릭이 옷에 해당하는 3d scan 파트들은 3d gs를 배정할 떄 3cm 정도 더 튀어나오게 배정했다고 한다. 보통 옷들이 신체에서 떨어져 있으니)


데이터셋 얘기를 마지막에 해주는데 ...

카메라 200대,,, 12k frame 해상도 DSLR급...

따라할 수가 없다.
반응형