Paper/Human

Arc2Avatar: Generating Expressive 3D Avatars from a Single Image via ID Guidance

침닦는수건 2025. 4. 3. 14:28
반응형

내 맘대로 Introduction

 

이 논문은 arc2face (얼굴 ID embedding으로부터 얼굴 이미지 만들어주는 SD)를 이용해서 3D animatable head를 만드는 논문. 핵심 아이디어는 FLAME 각 vertex마다 3D GS를 할당하고, ID embedding을 condition으로 주는 상태에서 "SDS" loss 만으로 학습시킨 점. text-to-3D에서 주로 쓰는 방법인데, arc2face가 text를 ID embedding으로 바꿔친 논문이다 보니 ID-to-3D가 가능해진 점을 바로 캐치하고 대입한 논문이라고 할 수 있다. 

 

가능성이 아무리 열렸다고 해도 이를 SDS loss 만으로 위 결과를 만들어 내는 것은 쉽지 않았을텐데, 실험의 실험을 거듭한 결과이지 않을까. 논문 아이디어도 좋고, 완성도도 좋다.

 

메모

정해진 위치에 MEAN Texture를 가진 FLAME을 하나 놓고, 이를 특정 카메라 각도로 렌더링한 이미지에 대해 SDS loss를 계속 먹여주는 방식이다.

렌더링 결과에 대해, arc2face에게 주어진 ID 얼굴 같아? 를 계속 물어보면서 수렴시키는 방식. arc2face가 얼마나 잘 학습되어있느냐에 dependent할 수 밖에 없지만. 잘되는 것으로 보아 arc2face의 탄탄함도 동시에 증명됨.

완성된 결과를 FLAME에 얹어진 형태다 보니, 기존 blendshape 그대로 사용 가능.

변형 이후에 입 안이나, 눈, 머리 같은건 일그러질 수 있는데. 그 때 후처리 개념으로 SDS loss를 이용한 업데이트 500번 정도하면 또 자연스럽게 업데이트 된다고 한다.






1) SDS Loss 사용할 때 수식(1)처럼 기본 형태로 쓰면 성능이 조금 떨어진다고 함. sensitivity가 너무 높아서 튜닝이 너무 어렵다는 뜻으로 보임.

-> 따라서 예측된 noise가 GT noise와 얼마나 차이나는지 직접 비교하는 방식이 아니라 예측된 noise의 "변화 방향"을 사용하는 ISM을 사용했다. 
->이게 더 안정적이라는 연구가 있음.

2) arc2face는 알려진 그대로 가져다 씀. 해상도는 512x512.
-> 뒤에서 LoRA로 head pose 에 대해 튜닝하는 정도.


arc2face의 유일한 단점. 정면 위주의 사진이 생성된다는 점.

이게 web260m 데이터셋으로 학습하다보니 어쩔 수 없음.

측후면 데이터도 잘 생성할 수 있도록 유도하기 위해 LoRA를 붙이고 측후면 이미지로 조금 튜닝을 해줬다. 

측후면 데이터는 많이 존재하지 않기 때문에, PANOHEAD를 써서 생성하고 걸러내는 식으로 만들어서 사용함. 

Panohead 엄청 잘되나보다.. 진짜 퀄리티 측면에서는 잘 수렴된 GAN만한게 없는 것 같음.


기본적으로 condition은 arcface가 뱉어주는 ID embedding, v를 쓰는 것. 

arc2face 방식대로 arcface embedding을 "photo of a id person"이라는 문장 안에 껴넣는 식으로 token을 만들어서 사용하는게 default다.

하지만 이러면 현 렌더링된 이미지에 카메라 뷰 정보는 아무것도 없기 때문에 애매함. 

그래서 front view, side view, back view를 texture encoder 통과시켜서 만든 token을 default token에 블렌딩해주는 식으로 섞어줌. ->이때 default가 85%가 되도록 블렌딩하는게 성능이 좋았다고 함.


1) FLAME vertex마다 3DGS 할당
->facial region은 densification, pruning, opacity reset 금지
->non-facial region은 자유롭게 열어둠.

2) vertex에서 멀어지지 않도록 regularization
3) laplacian regularizer로 표면 smoothness도 유지하도록
4) mean texture 로 얼굴 영역 색상 초기화 조금
->zoom-in view 주로 사용.
expression 변화는 flame exp parameter 변형하면 가능.

입 안이나 머리 부분 깨지는 경우, SDS loss 로 업데이트 약하게 500번 정도 해주면 업데이트 됨.

->arc2face 진짜 효과 좋구나.

반응형