본문 바로가기
NeRF

[논문 리뷰] Tri-MipRF (ICCV 2023) : 속도/퀄리티/메모리 개선

by xoft 2023. 8. 16.

Tri-MipRF: Tri-Mip Representation for Efficient Anti-Aliasing Neural Radiance Fields, Wenbo Hu, ICCV 2023

 

Neural Radiance Field(NeRF) 생성 Task에서 속도/퀄리티/메모리 모든 방면에서 높은 성능을 달성한 모델입니다. 구체적으로 RTX - 3060 GPU에서 training time 5분 / Inference time 60 FPS / instant-ngp 대비 25%적은 메모리 / MipNeRF 대비 높은 PSNR (PSNR 이전글)을 달성하며 Anti-aliasing까지 수행합니다.

Tri-MipRF에서는 퀄리티면에서 우수한 Mip-NeRF와, 속도면에서 우수한 Instant NGP가 비교가 되고 있습니다.

  • Mip-NeRF(이전글link)는 pre-filtering방식(aera-sampling)에 기반한 Integrated positional encoding을 사용해 aliasing문제를 해결 함으로써 high-fidelity(높은 PSNR)을 가집니다. 하지만 연산 속도가 느립니다.
  • Instant-NGP(이전글link)는 grid 기반 representation과 hash encoding기법을 통해 학습 속도를 개선합니다. 하지만 퀄리티 관점에서 낮은 성능을 보입니다.

본 논문은 이 2가지의 장점을 갖고 옵니다. 논문 글의 서술 방법이 Zip NeRF(이전글 link) 와 비슷하나 해결방법이 전혀 다릅니다. 바로 알고리즘을 보겠습니다.

 

 

 

 

Algorithm

1) pixel을 원형태로 보고, ray casting이 아닌 cone casting을 합니다. 그리고 3D point spling이 아닌 3D sphere를 sampling합니다.

2) 3개 plane(xy,yz,zx) 각각에, 학습 가능한 mipmap을 1개씩 만들고, 이 mipmap을 여러 level로 만들어 놓습니다. (mipmap : 원본 해상도에서 level마다 1/2씩 다운스케일)
3) sphere를 3개 plane으로 projection하고 plane마다 disc를 획득합니다.
4) 원의 반지름 크기에 따라, 적절한 mipmap level 2개를 찾아, 인접한 voxel 8개(2개 level * level마다 4개 voxel)의 feature로 interpolation합니다.
5) plane 3곳에 있는 voxel의 feature들을 concatnation해서 MLP의 입력으로 넣고, volume density와 color를 얻습니다. (위 그림이 길어져 분할해서 아래에 넣었습니다.)

위의 5단계가 알고리즘 전체 설명입니다. 아래에서는 각각에 대해 부연 설명해보겠습니다.

 

 

 

 

Cone Casting Sampling

NeRF는 ray위의 point를 샘플링합니다. 이는 origin o + point 간격 t * view direction d로 계산합니다. 

MipNeRF는 ray가 아닌 cone을 만들고, t간격에 따른 frustum을 multivariate Gaussian으로 모델링하고 Gaussain을 sampling합니다. 

Tri-MipRF는 MipNeRF와 동일하게 cone을 만들지만, Gaussian이 아닌 Sphere로 모델링하고 Sphere를 샘플링합니다. area-sampling방식을 썼다고 표현되어 있습니다. Sphere는 S(x,r)로 정의되며, x, r은 아래 수식으로 계산됩니다.

구의 중심 x과 반지름 r은 camera origin o, ray위의 point 간격 t , view direction d, focal length f, disc의 반지름 r닷으로 구성됩니다. Δx, Δy는 camera parameter로 부터 도출 할 수 있는 world coordinates에서의 width, height입니다. (Cone Casting초반 그림 참조)

t는 near, far사이의 값을 균등하게 샘플링하거나, cone의 중심축과 axis-aligned bounding box(AABB)이 교차하는 2지점 사이를 균등하게 샘플링합니다. 

3D space안에 sparsity한 곳은 binary occupancy grid를 적용해서, empty인 area는 skip하는 샘플링 방법을 사용합니다.

 

 

 

 

Tri-Mip Encoding

NeRF는 샘플링한 좌표에 대해, feature를 추가해주기 위해 Positional Encoding(PE)합니다.

Mip-NeRF는 feature를 추가하기 위해, Gaussian 분포내 PE를 integral하는 Integrated Position Encoding(IPE)을 합니다

Tri-MipRF는 Tri-Mip Encoding방식을 제안합니다.

'Sphere에 대한 정보 x, r'와 '3개 plane(xy, xz, zy)에 대한 3개 MipMap'을 입력으로 가집니다. MipMap은 하나의 이미지에 대해 여러 스케일로 만들어둔 이미지를 의미하며, base level L0가 원본 해상도(512x512x16)라면, level이 증가 할 수록, 해상도가 2배씩 downscaling되어서 구성이 됩니다. 이렇게 구성해두면, 다른 거리에 있는 물체에 대해 적절한 MipMap level을 선택함으로써, coherent하게 물체를 표현 할 수 있습니다. MipMap은 학습시 update됩니다.

 

Feature vector f를 Query하는 방법은

1) Sphere S(x,r)이 주어지면, 3개의 plane으로 projection합니다.

2) MipMap의 level l을 아래 수식으로 찾습니다.

r은 sphere의 반지름입니다. Bmax, Bmin은 3D space의 범위를 미리 정의한 Axis Aligned Bounding Box(AABB)의 최대 최소 값을 의미합니다. x,y는 plane의 중점입니다. H는 height, W는 width 입니다. 이렇게 MipMap의 level l값을 계산합니다.

3) level l과 가장 근접한 2개의 mipmap level을 선택합니다.

4) 구의 중점 x 좌표를 mipmap의 값들로 trilinear interpolation 합니다.

여기까지입니다. 이렇게 Encoding되어 feature가 만들어지면, 기존 NeRF, Mip-NeRF와 동일하게 MLP의 입력으로 사용됩니다. 다른점은 3개의 MipMap으로 만든 3개의 feature를 concat하고, MLP에 넣습니다.

 

이렇게 설계했을 때 어떤 효과를 보이는지 한번 보겠습니다. MipMap의 level0만 업데이트하면, 다른 level은 downscaling로 구할 수 있어서 메모리에 효율적이고, 학습되는 인자가 매우 적습니다. 때문에 빠르게 수렴이 가능합니다. 여러 scale로 MipMap을 구성했기 때문에 anti-aliasing도 가능합니다. 이 Encoding 부분이 메모리/속도/퀄리티를 모두 향상 시킨 핵심부분이 되겠습니다.

 

 

 

 

Hybrid Volume-Surface Rendering

<<해당 단락은 자세히 이해하지 못했습니다. 좀 더 개념을 찾아보고 다시 업데이트 하겠습니다.>>

위에서 설명한 방식을 사용할 경우, 특히 binary occupancy grid를 통해 속도가 개선되어, RTX 3060에서 랜더링에 30FPS를 보였습니다. 이는 상당히 빠른 속도지만 rendering 속도를 향상시키기 위해, 카메라 중심에서 물체의 중심까지의 대략적인 거리를 효율적으로 결정하는 proxy mesh를 사용하게 됩니다.

mesh decimation을 따르는 density field위의 marching cube로 부터 proxy mesh를 얻었습니다. Tri-MipRF로부터 만들어진 proxy mesh는 복잡한 구조물에서 high-fidelity quality를 보였습니다.

 proxy mesh가 가능할 때, cone의 중심축에 surface의 hit point를 얻기 위해 효율적으로 rasterize를 합니다. cone의 중심 축안의 hit point로 부터 Δt의 거리 안에 sphere들을 균등하게 샘플링합니다. 이를 통해 real-time rendering을 60FPS가능하게 되었습니다.

 

 

 

 

Evaluation

NeRF Synthetic Dataset은 Blender dataset으로 PSNR/SSIM/LPIPS(PSNR/SSIM/LPIPS 이전글)를 계산합니다. Aliasing현상을 유도하기 위해 다양한 Scale로 이미지를 변형하여 테스트 했습니다. Instant-ngp와 학습 속도가 비슷하고, 모든 경우에서 PSNR/SSIM/LPIPS가 높습니다. 아래서 두 번째 줄은 w/o M은 MipMap level을 없애고 base level로 동일하게 가져갔을 경우입니다. 속도는 향상되지만 성능은 많이 떨어집니다

위는 full-resolution일 때의 성능입니다. 아래는 메모리에 관한 실험입니다.

퀄리티가 우선인 연구들(NeRF,MipNeRF) 보다는 메모리가 많이 사용되지만, Grid기반으로 속도를 향상시키는 연구들(Plenoxels, TensoRF, Instant-ngp) 보다는 메모리가 적게 사용되는 것을 볼 수 있습니다.

 

 

 

 

Closing..

NeRF를 상용 서비스화 하는데 한발짝 더 다가가는 느낌입니다. 글 쓴 시점에서 코드가 공개 되지 않았는데, 코드가 공개되면 정말 저 속도가 나오는지 확인해보고 싶네요. 제가 리뷰한 논문이 ICCV발표 전에 올라온 버전이라, 수정이 되면 논문내용이 약간 바뀔 것이라 생각됩니다. Mip-NeRF360와 비교 되었으면 좋겠다라는 생각이 드네요. 테스트한 데이터셋이 Blender Dataset(=NeRF Synthetic Datast) 뿐이라 다른 데이터셋에서 어떤 결과를 보일지 궁금하네요. SIGRAPH 2023에 accept된 Gaussian Splatting 연구도 속도 퀄리티 관점에서 비슷해보이는데, 이 연구도 곧 리뷰하겠습니다.

댓글