Efficient Geometry-aware 3D Generative Adversarial Networks
Efficient Geometry-aware 3D Generative Adversarial Networks 리뷰 for tri-plane understanding
Aug 08, 2024
읽은 이유
LRM 논문을 읽다가 tri-plane이라는 개념을 확실히 알아야할 것 같아서.
요약
여러 개선점과 결과가 있는 좋은 논문이지만, tri-plane이라는 개념에 집중해서 봤다. 3d representation을 explicit(voxel)보다 메모리 효율적이고 implicit(NeRF)보다 빠른 속도를 갖게 만들기 위해서 tri-plane이라는 방법을 제시. 3개의 평면을 직교시켜서 공간을 만들고 3차원 position값의 위치에서 각 평면에 projection해서 3개의 feature를 얻은 다음 이걸 합친 형태로 3d feature를 만든다(이걸 작은 network에 태워서 color, density를 얻음). 이렇게 하면 3개의 평면(= voxel보다 낮은 메모리 요구량), 작은 network(= nerf보다 빠른 속도)로 기존의 단점을 커버한다. 재밌는 방법이다.
Abstract
여러 각도에서 봐도 일정하게 유지되는 이미지와 3D shape을 single-view 2D 사진만 가지고 만드는건 어려운 과제다.
3D GAN은 컴퓨팅도 많이 들고, 퀄리티도 별로다. 여기선 둘다 해결함.
feature generation과 뉴럴 렌더링을 분리해서 sota 2d cnn generator(StyleGAN2)를 본 연구에 활용할 수 있다고 한다.
여기선 한장의 이미지들로 unsupervised 3D representation을 학습하는 새로운 generator 아키텍처를 제안한다.
논문에서는 3d를 생성/학습하려면 컴퓨팅 자원이 많이 든다는 점을 문제요소로 지적하고 이걸 해결하려고 한다. hybrid explicit-implicit 3D representation이라는 걸로!
- tri-plane based 3D GAN vmfpdladnjzm
- 두개의 discrimination을 사용해서 multi-view consistency를 위한 학습 추가
Tri-plane을 이해하는게 논문을 읽는 가장 큰 목적이었으니 빠르게 넘어가본다.
원래 3D model을 표현하기 위해 사용하는 방법들로는 Implicit(NeRF)와 Explicit(Voxel, point cloud 등)한 방법들이 있다.
- discrete voxel grid같은 explicit한 방법들은 렌더링이 빠르지만 메모리가 많이 필요하기 때문에 고화질이나 복잡한 장면을 표현하기 힘들다.
위의 이미지에는 FCN을 거치는걸로 보아 어느정도 hybrid인 형태를 보여주긴한다.
- implicit한 방법은 렌더링시 매번 연산을 거쳐야하기 때문에 속도가 오래 걸린다.
그래서 둘다 섞는 explicit-implicit tri-plane rep을 제안한다(기존 연구에 기반)
3개의 평면(N x N x C)을 직교시켜서 3차원의 공간을 만들고, 이 안에 explicit feature를 위치시킨다. N은 spatial resolution, C는 채널 수
이 3D 공간에서 특정 위치를 선택하면 이걸 3개 각각의 평면에 projection해서 3개의 feature vector를 얻는다()
그리고 이걸 bilinear 보간해서 하나의 피처로 합친다. 이걸 가볍게 만든 디코더 네트워크에 태워서 color와 density를 얻는다. 이 값들은 volume rendering을 통해서 RGB 이미지로 표현된다.
요약하자면 셋다 각 position의(nerf는 direction도 사용해서) color, density값을 얻은 다음 volume rendering을 통해서 특정 시점에서의 이미지를 만드는데 이 때 color와 density를 얻는 방법이 position, direction을 입력으로 받아 network를 태워서 얻는 implicit과 해당 위치의 값 자체를 갖도록 하는 explicit한 방법이 있었다.
그런데 위 문장만 봐도 알 수 있듯이 implicit은 매번 렌더링마다 네트워크를 통과해야하니 시간이 오래 걸리고, explicit은 모든 position의 값을 직접 들고 있어야 해서 memory가 많이 든다.
여기서는 3개의 직교하는 평면으로 3d 공간을 표현한다.(그래서 tri-plane이라는 이름을 사용한듯) 그럼 직접적으로 값을 가지는건 이 3개의 평면이고(NxNxC의 matrix긴함.), 특정 position의 color, density값은 position 값을 사용해 각 평면으로 projection했을 때 그 평면의 값을 사용해서 작은 network에 태워서 얻어낸다.
다시말해 memory도 적게 들고, inference도 작은 network만 통과하면되어서(충분한 정보를 입력으로 사용하니까 가능한 일) 양쪽의 단점을 모두 보완한다.
가장 중요한 부분은 이 3개의 NNC matrix이다!
여기서는 2가지 방식을 설계했는데
- SSO(single-scene overfitting) : 3개의 plane feature 자체를 직접 학습해서 얻는다.
- GAN 세팅 : 입력에 따라 3개의 plane을 출력하는 GAN을 학습하는걸 목적으로 한다. → general한 방법
이 때 입력으로는 random latent code와 함께 camera params도 들어간다.
실제로는 N=512, C=48, decoder는 128 hidden unit 레이어 4개를 사용
tri-plane의 성능만을 비교해본 결과. voxel과 tri-plane의 전체 파라미터수를 일치시키고 성능을 비교한 결과이기 때문에 메모리가 저렇게 찍힌다.
SSO가 GAN보다 성능은 더 좋다. PSNR이랑 SSIM을 좋은 지표라고 봐야하나,, 사진을 보면 육안으로 봐도 성능이 더 좋긴하다.
여기서 GAN이 뽑는 것도 256x256x96(= 각 32 채널인 plane 3개)이고, tri-plane decoder로 출력하는 값도 RGB가 아니라 32채널인데 이게 더 많은 정보를 가져서 그렇게 했다고 한다.
그리고 upsampling도 하는데 이건 생략.
discriminator로 학습하는 GAN인데 super resolution 모듈을 통과하면서 consistency가 바뀌는 문제가 이전 연구들에 있었기 때문에 superres전의 이미지도 같이(bilinear upsampling) concat해서 superres 이미지와 discriminator의 입력에 넣어서, consistency가 유지되게 학습했다.
Share article
Subscribe to our newsletter