반응형
내 맘대로 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 진짜 효과 좋구나. |
![]() |
|
![]() |
![]() ![]() |
반응형