Paper/Human

FDNeRF: Semantics-Driven Face Reconstruction,Prompt Editing and Relighting with Diffusion Models

침닦는수건 2023. 8. 1. 10:46
반응형

내 맘대로 Introduction

DreamFusion이랑 똑같이 text-to-3D를 목적으로 하는데 DreamFusion이 realistic하지 않은 결과를 만들어내는 문제를 개선한 법전이다. DreamFusion의 아쉬운 퀄리티 문제는 volume rendering 대상 공간을 스크래치부터 학습시킬 때 diffusion model에만 의존해서 학습시키기 때문에 대상 공간의 color, volume density 학습이 잘 되지 않기 때문이라고 한다. 

 

generation model 연구들을 보면 복원을 하고자 할 때 image space에서 직접 복원하는 것보다 latent space에서 복원하고 latent to image decoder를 붙이는 식으로 하는 것이 더 효과적이라는 이야기가 많은데, 이 아이디어를 가져와서 volumen rendering 대상 공간을 학습시킬 때 그냥 x,y,z 3D space 그대로 쓰는 것이 아니라 latent space를 학습하도록 변경하는 식으로 보강했다.

 

latent space를 다루려면 잘 학습된 latent space가 갖추어져 있어야 하고 decoder도 학습이 되어있어야 하는데 이건 EG3D를 썼다. 간단히 말하면 DreamFusion + EG3D latent space 사용한 논문이다. 

 

메모하며 읽기


논문 자체가 사실 DreamFusion에 EG3D generator를 갖다붙인 것이 끝이기 때문에 내용이 크게는 없다. 그래서 EG3D recap하고 시작한다. EG3D는 encoder에서 feature가 나오면 이를 채널 방향으로 3개로 쪼개 tri-plane을 구성한다. (Fxy, Fyz, Fxz) volumen rendering 대상 공간을 이 같이 표현하면 속도를 챙기면서도 성능을 잃지 않을 수 있다고 한다. 본 논문에서도 이 부분을 적극 가져왔다.

tri-plane이 갖고 있는 값들은 latent variable들인데 학습 초기에는 EG3D latent들이랑 완전히 다르지만 pretrained EG3D generator를 뒤에 붙여서 최종 loss를 사용하기 때문에 결국 EG3D latent와 유사해지도록 학습이 된다.

전체 파이프라인 그림이 복잡하게 생겼지만 EG3D tri-plane하자 잡고 volume rendering으로 이미지 만들어 낸다음, 생성된 이미지 vs diffusion(생성된 이미지 + noise) 를 비교하는 식으로 학습한다. diffusion(생성된 이미지 + noise)은 웬만하면 그럴듯하게 나올텐데 생성된 이미지 자체가 이와 비슷하도록 학습된다면 tri-plane latent들이 잘 학습되었다는 의미이니 말이다. 이게 diffusion loss라고 불리는 것이고 핵심이다.

reconstruction loss와 id loss, illumination loss 부수적으로 추가한 것.

reconstruction loss는 원본과 같은 카메라 포즈와 latent로 EG3D generator가 생성한 이미지가 원본 이미지랑 같도록 유도해주는 loss인데 VGG16 feature를 썼다. perceptual loss랑 비슷한 컨셉 같다.

Identity loss는 대상이 사람 얼굴이다 보니까 추가한 것인데 ArcFace라는 네트워크에서 사람 얼굴에 대한 latent를 잘 학습해둔 바 있어서 이를 이용해 생성된 얼굴 이미지 latent와 원본 이미지 latent가 같도록 유도해주어서 똑같이 생긴 얼굴, 특히 사람이 달라지지 않았다고 느껴질 정도로 유사한 얼굴을 만들도록 한다.
DreamFusion에서 사전 학습된 diffusion model에 맞아떨어지도록 volume rendering 네트워크를 역학습시키는 SDS loss를 그대로 착안했다. 차이점이라고 하면 EG3D generator가 freeze된 상태로 끼어들어가있는 것인데 notation 상에서는 많이 복잡해지는데 x'=G(w,c)라고 묶어버리면 수식(5)와 같이 결국 같게 된다.
이건 사람 얼굴이 조명 타는 경우를 방지하기 위함인데 optional한 것이다. 기존 연구에서 target lighting + source image를 넣으면 source lighting과 target lighted image가 나오는 사전 학습 네트워크가 있다. (새로 한 건 하나도 없고 죄다 가져다썼네)

아무튼 이미지를 넣으면 해당 이미지의 lighting을 얻어낼 수가 있다. 이걸 이용해서 EG3D generator가 생성한 이미지의 lighting이 지금 condition으로 주고자 하는 lighting고 갖도록 추가 loss를 넣어주어서 얼굴에 해당하는 조명도 컨트롤할 수 있도록 학습한다는 이야기다.

이 loss는 optional하다고 하는데 이걸 빼면 relighting은 안된다.
반응형