반응형
내 맘대로 Introduction
상상만 했던 것을 직접 구현한게 나왔다. StyleGAN2의 3DGS 버전이다. latent 하나만 달랑 넣으면 template mesh에 대응되는 3DGS가 짠 나오는 논문. StyleGAN2 generator - 3DGS + diff. rasterizer - discriminator 3개만으로 풀어버렸다. 안 그래도 학습이 어려운 GAN 튜닝을 3DGS 같이 자유도가 높은 대상에 대해서 하는 것은 사실 누가 봐도 쉽지 않아보였는데 그걸 해버렸다. 그래서 SIGGRAPH에 됐나 보다....
메모
![]() |
|
![]() |
1) generator UV domain 각 픽셀마다 3DGS primitives 예측 2) 3DGS 렌더링 3) discirimination. |
![]() |
latent 512 vector 를 UV map의 primitives로 생성! UV map 형태의 3DGS gaussian primitives로부터 원하는 resolution에 따라 grid sampling해서 explicit 3DGS를 생성함 특별히 초기 위치는 template mesh의 mean shape으로 초기화하고 residual 을 예측하는 식으로 함. -> 이렇게 안하면 자유도가 너무 높았을 것. |
![]() |
3D position이 사실 제일 중구난방으로 움직일 수 있는 녀석이다 보니 이 녀석을 regularization 잘 하는 것 (얼굴에 잘 붙어있도록 하는 것)이 핵심 그래서 mean template mesh vertex + residual로 구현하되 residual도 열린 형태가 아니라 0.25 * 0~1 로 억제해서 결과적으로 25cm 이하로만 나오게 했다. |
![]() |
각 gaussian의 크기도 얼굴이라는 대상의 특성 상, 크기가 그리 크지 않을 것이라고 가정함 각 gaussian의 크기도 7mm 이하에 머물도록 억제. |
![]() position, scale 이 두개의 범위를 억제하는 것 뿐만 아니라, 각 값이 0에 가깝도록 함. |
![]() ![]() |
![]() |
opacity도 0에 가깝도록 억제. |
![]() |
|
![]() ![]() |
각 3DGS 마다 UV map에서 sampling해서 만들어진 것이다 보니, 각 3DGS는 uv 값을 갖고 있음. ---- 3DGS는 근데 굉장히 강력한 view synthesis 알고리즘이라서, 실제 geometry에 안맞더라도 렌더링 결과를 그럴듯하게 낼 수 있다. 따라서 3DGS를 Head uv에 대응되게 잘 만들었으나, 수렴하는 과정에서 중구난방으로 수렴하고 렌더링 결과만 그럴 듯하게 나올 수 있음. -> geometry도 잘 얻어내고 싶은 상황에서 원하는 결과가 아님 -> 따라서 근접한 3DGS가 근접한 렌더링 픽셀을 만든다는 가정을 함 ------------ 이걸 어떻게 구현했느냐 1) 3DGS의 color를 해당 3DGS의 (u, v, 0)으로 바꿔치기함. blue channel이 0 2) 렌더링 후 TV Loss 갈김 이러면 3DGS -> pixel로 내려찍힌 위치를 알아내는 효과가 있다. pixel에 uv가 색칠해지니까, uv를 보고 어느 3DGS인지 알 수 있는 것. 이 때 인접 pixel과 uv가 많이 다르다면 서로 먼 3DGS가 이미지를 렌더링하고 있었다는 의미이므로, 바람직하지 않다고 여겨 loss를 발생시키는 것이다. TV Loss로. --- 색깔 바꿔치기 트릭 까진 좋았으나 diff.rasterizer를 통과하면서 opacity가 개입하기 때문에 바꿔친 색상이 그대로 이미지에 찍히지 않을 수 있다. blurry하게 찍힐 수 있음 이를 보정하기 위해서 opacity가 크다면 원래색 그대로 선명하게. opacity가 작다면 어둡게 (값이 작아지게) 만들었다. |
![]() ![]() |
초기 UV Map은 256 256으로 시작하고, epoch 돌 때마다 올려서 512 512, 1024 1024까지 학습 GAN loss는 특별한 것 없이 rendered image vs 아무 이미지 던져주는 식 -> 튜닝을 어마나 했을까.... ![]() ![]() 데이터셋은 놀랍게도 FFHQ 만으로 학습했고, EG3D 방식에 따라 crop + camera pose를 추출했을 뿐이다. |
![]() |
|
![]() |
진짜 개 잘된다. 이걸 보고 누가 template mesh로 초기화만 하고 그냥 discriminator로 학습한 결과라고 생각할까. 심지어 색상 초기화도 없고 위치 초기화만 한건데. |
![]() |
|
![]() |
![]() |
![]() single feed forward 로 끝나니, 속도도 빠르고 모델이 단순해서 메모리 사용량도 적다. |
![]() |
![]() 친절하게도 template mesh를 바꿔가면서도 해줬는데, 큰 영향 없다고 한다. |
반응형