Paper/Human

Generalizable and Animatable Gaussian Head Avatar (a.k.a GAGAvatar)

침닦는수건 2024. 10. 14. 13:19
반응형

내 맘대로 Introduction

 

단일 이미지로 부터 Gaussian head를 만드는 논문. 3DMM prior를 사용하기 때문에 driving image에서 뽑아낸 3DMM을 사용할 경우, animatable해진다. 학습은 video 데이터셋을 이용해서 자기 자신의 3DMM prior를 사용하지만 inference 시에는 다른 사람 이미지의 3DMM prior를 사용하는 방식이다. 

 

결과가 인상 깊고 될까? 싶은게 돼서 신기하다. 

 

핵심 아이디어는 freezed DinoV2를 encoder로 써서 generality를 출발부터 챙긴 점. feature plane으로부터 front, back side GS 값을 예측하도록 한 점이다. 전면만 예측하면 front view에 치중되는 문제가 있는데 back side도 예측하도록 설계해서 side view도 최대한 고려되도록 했다. 

 

별개로 논문 글이 정말 이해하기 어렵게 되어있다. 생략도 많고 불친절한 설명 때문에 읽기가 어렵다.

 

메모

DinoV2를 기본값으로 사용

3DMM은 이미지로부터 뽑아내두고 사용

3DMM vertex마다 learnable feature를 부여해둠 (semantic 구분용)

파란 사각형이 핵심.
-> dinov2 feature를 296x296으로 뽑아둠 (518x518 이미지를 입력으로 썼다는데 1/14 크기로 사이즈가 안 줄고 1/2로 줄인 건 무슨 트릭을쓴거지... 7배 키운 이미지에서 뽑은 것 같기도)

-> dinov2 feature을 forward CNN 통과 시켜 front GS 예측, backward CNN 통과시켜 backward GS 예측 

-> GS parameter는 총 41개 이며 

32 color feature (RGB + 29)
1 opacity
3 scale
4 rotation
1 distance <-- 핵심 이다.
feature plane의 위치는 특정 focal length로 정해두고, 그 위치로부터 residual을 front, back으로 나누어 예측한다. 

이 때 예측한 normal을 곱해서 해당 방향으로 움직이도록 해서 방향과 크기를 분리해서 추정함. 

** 여기서 notation이 문젠데 E(F)가 맥락상 거리를 의미하는데 수식(2)에서는 또 color, opacity, scale, rotation을 의미한다. -> E(F)는 41dimension의 GS params이고, 수식(1)에서는 거리만, 수식(2)에서는 나머지를 꺼내쓴다는 의미.

하나 강조하는 것이 back side는 안보이지만 예측하도록 추가한 이유다.

front만 하면 sidew view 렌더링할 때 뭉개지는 문제가 심함.

따라서 back side도 예측하게 하고 3DMM prior로 보강하는게 더 나았다고 함.

(front만했을 때 잘 안됐었나봄)
source, driving image에서 각각 3DMM을 뽑은 뒤, driving 3DMM에서 각 vertex feature + dinov2 global feature를 concat해서 최종 vertex feature를 만든다.

이 때 초기 vertex feature는 3DMM 모델 자체에 할당된 것이라 학습 내내 공유된다.  3DMM vertex의 semantic 정보를 들고 있도록 수렴함.

그 다음 driviing vertex feature + source vertex position query를 받아 MLP 통과 후 Gaussian param 예측.

결과적으로 

reconstruction branch에서 나온 GS
expression branch에서 나온  GS 2개의 집합이 존재하는 것.
그 다음 2개의 GS 집합을 그대로 렌더링해서 이미지를 만든다. 

여기서 17232개 (296*296*front+back)
썼다는게 저것만 썼단 소리가 아니다. 3DMM GS도 썼으므로 5980개 추가임



그림은 GPAvatar에서 가져옴
근데 이 때 그냥 RGB만 렌더링하는 것이 아니라 옆 알고리즘처럼 MLP를 붙여서 rgb + rgb feature 를 렌더링함.

이유는 높은 해상도 이미지를 단번에 만들기에는 smoothing 되어있는 결과로 나오기 때문.


그래서 뒤에 E_renderer를 붙임.

이게 그냥 다른 논문들 따라했다고 적어두고 스킵해서 뭔 내용인지 자세히 모르겠음.

이게 제일 빡치는 부분. 구체적인 걸 알 수가 없음. 알아서했음 ㅋ 이런 뉘앙스

SR 붙였다는 것 같은데 RGB 2 HIGH RGB 만든게 아니라 RGB+FEATURE 2 HIGH RGB로 만든게 다른다고 설명하는 것 같기도.
여기서 드는 하나의 의문이 지금 구조에서 animation을 할 가능성은 전혀 안보이는데, 어떻게 하느냐? 설명이 한줄로 적혀있어서 뭐같다.
expression branch에서 나온 3DMM과 reconstruction branch에서 나온 GS를 knn nearest로 묶어서 binding한 뒤, 3DMM을 바꿔치기 해서 animation을 하는 것 같다.

이것도 자세히 설명 안하고 알아서 했음 ㅋ 이런 뉘앙스라 조금....

lifting으로 만들어지는 gs의 위치만 3DMM nearest vertex에 맺히도록 걸어주고

나머지는 다 rendering loss + perceptual loss다. 

반응형