반응형
내 맘대로 Introduction

주어진 multiview-video + fitted FLAME 들로부터 animatable avatar를 만드는 것은 기존 많은 논문들과 동일한데, 머리카락 부분과 나머지 부분을 분리해서 학습시켜서 머리 바꿔치기가 가능하다는 점과, FLAME을 그대로 안쓰고 UV displacement을 중간 끼워넣어서 geometry가 더정확해지도록 만든 다음 처리했다는 점이 눈에 띈다. 결과가 재밌고 자연스러워서 인정 받은 느낌도 있다.
메모
![]() |
|
![]() |
일단 전제 조건은 주어진 1객체마다 학습을 따로 한다는 점. 범용 모델은 아니다. subject A, B가 있으면 A, B 각각 학습하는 식. 1) exp+pose parameter 입력으로 받았을 때 subject-specific displacement map, texture map을 뽑아내는 decoder들을 학습함 ->UV domain 나중에 sampling해서 사용 2) sampling으로 만들어낸 값을 rendering 해서 3DGS 학습하는 방식 -> 얼굴, 비얼굴 영역 분할해서 따로 학습. |
![]() ![]() |
얼굴 영역 먼저, 얼굴은 deformable이라고 가정. FLAME 파라미터로 컨트롤 되도록 모델링 FLAME을 1번 subdivision하고 치아 영역 따로 추가했다고 함. FLAME 피팅 결과가 있지만 표현력의 한계가 있으므로, 더 subject에 맞는 geometry를 얻기 위해서 displacement map을 learnable로 열어두고 학습 ->3DGS가 photometric loss에 의해 이동하는 양이 UV domain displacement map에 기록되는 구조. FLAME parameter -> CNN -> per-pixel MLP 구조. |
![]() |
자연스러운 색상을 위하여 color RGB만 두지 않고, Diffuse color map, view-dependent color map, expression-dependent color map 3개를 또 따로 학습 -> displacement map 학습하는거랑 원리가 같음. |
![]() |
머리카락 영역은 기본적으로 static으로 가정. 약간의 deform만 있다고 생각하는 편. FLAME vertex를 기본으로 위치 초기화하고, off-surface에서 조금 더 sampling해서 추가. (두피에서 먼 점도 필요하니까) 대신 off-surface도 막 뽑느게 아니라 ID 부여해서 하고 densification은 막은 느낌. |
![]() |
초기화가 완료되면 일단 3DGS 학습 그리고 frame 간에 ICP로 tracking하는게 기본 약간의 변형은 expression-conditioned MLP를 추가해서 residual을 저장하도록 함. MLP로. |
![]() |
|
![]() ![]() |
결과물을 렌더링할 때 얼굴과 머리카락 영역을 따로 하기 때문에 겹치는 부분 처리를 따로 해줘야 함. 다행히도, depth 값을 가지고 뭐가 앞서있는지 판단할 수 있기 때문에 자연스러운 blending이 가능. 한 시점에서 head+hair gaussian으로 렌더링을 시도할 때, early stopping으로 멈추는 방식. opacity가 충분할 때 멈춘다기 보다 이전 gaussian 대비 거리가 너무 멀다 싶으면 멈추는 방식 머리카락은 일반적으로 head에서 멀다는 가정. (앞머리 덮은 머리는 잘 안될 가능성이 있어 보임) -> 이렇게 해서 blending mask를 미리 모든 픽셀에 대해 계산해둔 뒤, -> 나중엔 각각 렌더링하고 더하기. |
![]() |
학습할 게 많다. 1) 처음엔 얼굴 영역에 대해서 3DGS를 photometric loss, ssim으로 학습하는 것에 집중 이 때 diffuse color만 사용해서 렌더링 한 이미지도 loss 계산할 때 넣어줘서, diffuse color가 주도적으로 색상을 결정하도록 유도하고 나머지가 conditioned effect를 만들도록 함. 3DGS 위치를 업데이트하는 과정에서는 Agisoft로 만든 depth를 가지고 depth loss 추가해서 geometry를 벗어나지 않도록 억제함 -> photometric loss 만으로는 noise가 심했을 거라고 생각했는데 depth를 썼구나. |
![]() |
특히 hair gaussian을 저세상 위치로 발산할 수도 있다보니 hair gaussian들의 평균 위치에서 멀리 벗어나지 않도록, std가 작도록 억제. --- FLAME mesh에 binding된 형태니까 mesh에 걸 수 있는 regularization 다 걸기. |
![]() |
hair는 렌더링 결과가 자연스럽게 나오게 하는 것 뿐만 아니라 웬만하면 얼굴 영역 없이 hair 부분만 잘 표현하도록 분리해주는게 필요함 애매하게 이마 부분이나 귀 부분을 포함하게 되면 나중에 머리 바꿔치기 할 때 본래 얼굴하고 seam이 생길 것 (흑인 머리를 백인한테 옮길 때 이마 부근의 피부색이 안맞을 수 있음) 그래서 hair GS opacity로 렌더링해서 만든 mask랑 non-facial mask랑 차이가 없도록 억제. mask가 particle 처럼 듬성듬성 noise가 생길 수 있는데 이런 floating noise를 강하게 억제하기 위해서 멀찍이 떨어져 있는 pixel에는 weighting을 강하게 걸어주는 식. |
![]() |
마지막은 다 때려박고 쾌적화 모든 부분 다 같이. |
![]() |
|
![]() ![]() |
많은 사람들이 썸네일보고 가장 궁금했을 editing 파트 1) hair change는 단순하게 hair랑 다른 사람 head 간에 ICP로 정합하는 과정으로 끝남. 자연스럽게 얹어놓는 느낌. -> 얼마나 hair gaussian이 hair만 경계따라 잘 학습했는지가 중요함. 2) texture editing은 UV domain의 texture map이 있다보니 해당 위치에다가 그림을 넣어놓으면 됨. |
![]() |
![]() ![]() ![]() |
반응형