반응형
내 맘대로 Introduction
Telecommunication을 목표로 하는 메타 연구 중 하나. 사람 1명에 대한 realistic avatar를 만드는 것을 주목적으로 하되, 실제 위 예시처럼 telecommunication 상황에서 real time으로 사용 가능하도록 하는 것도 염두했다. 여러 사람이 있는 장면을 렌더링한다고 하면 실제 머리에 해당하는 pixel은 적은 영역이므로 적은 pixel만 실시간 렌더링해서 연산량을 줄일 수 있도록 NeRF 컨셉을 적용했다고 한다.
핵심 아이디어는 latent to position map(xyz) + feature -> MLP 붙여서 neural rendering 이다. multiface dataset 세팅에서 취득한 초고품질 데이터로 학습을 시켜서 그런 점도 있겠지만 성능이 꽤나 좋아 보임.
메모
|
전체 구조는 conditional VAE이다. view direction이 일종의 condition이 되는 것이고 2D latent (code)로 부터 position map (xyz)와 local feature 를 생성하는 구조다. 이후에 positionmap + local feature를 3D로 복원한 뒤에 neural rendering 컨셉으로 image/depth/normal로 렌더링한 뒤 GT와 비교하는 방식으로 학습했다. 실시간 렌더링을 위해서 MLP는 4 layers만 사용해서 엄청 얇게 만들었고 SIREN 구조를 썼다고 한다. |
2D latent(code)를 만드는 것은 앞에 CNN이 붙어서 생성해줌 (같이 학습되는 부분) 한 사람 데이터에 대해 여러 frame을 다 평균낸 average texture map을 구하고 한 프레임에서 얻은 coarse mesh (template mesh)를 넣어준다. scan을 넣지 않는 이유는 실제 입력으로 high quality mesh를 넣을 수 있는 상황이 많지 않기 때문. |
|
2D latent (code)는 각각 2개의 CNN decoder에 의해 미리 정의해둔 uv coordinate로 표현된 position map (xyz), local code map으로 변환된다. |
|
positionmap + local code - >3D -> sampling -> neural rendering 순서에서 마지막에 사용되는 MLP는 SIREN +4 겹 얇게 만든 이유는 neural rendering이 렌더링 시간이 오래 걸리기 때문에 이를 최소화 하기 위한 약간의 노력이라고 생각한다. |
MLP를 얇게 쓰는 결정으로 인해 성능 하락 (smoothing된 결과)을 피할 순 없었다. 그래서 추가한게 local code map (nerf에서 geometric feature를 굳이 꺼내서 썼을 때 성능이 뛰는 것처럼 guidance feature를 더 쓰는 것) + uv 값을 MLP 입력으로 쓸 때 positional encoding을 한 번 더 해주는 식이다. |
uv, u, v, 총 3가지 경우로 나누어서 각각을 4, 2, 2로 encoding해준다. 이 때 sin,cos을 쓰면 frequency에 따라 너무 길어지므로 안썼다. uv 용 1024x1024x4 learnable params u 용 10000x1 learnable params v 용 10000x1 learnable params 으로 미리 만들어둔 파라미터에서 interpolated sampling해서 쓰는 식. 얘네도 같이 학습된다. 이게 무슨 효과가 있을까 싶은데. 실험해보면 효과가 있다고 한다. (할말없음) |
|
여긴 학습에 관한 내용인데, GT 퀄리티 엄청 좋다. 앞서 만든 encoder, learnable positional encoding, decoder, MLP를 다 통째로 한번에 학습시킨다. GT는 neural rendering으로 만들 수 있는 모든 것. position map GT도 있어서 encoder 출력에다 걸어주는 방식이 추가됐을 뿐. |
굳. |
반응형