Computer Vision/NeRF

[논문 리뷰] View Synthesis with Sculpted Neural Points (SNP)

dhk1349 2023. 2. 15. 05:45

  안녕하세요. 오늘 리뷰할 논문은 ICLR 2023년에 accept된 View Synthesis with Sculpted Neural Points라는 논문입니다. NeRF가 컴퓨터비전 분야에서 선풍적인 인기를 끌기 시작하면서, NeRF와 같은 3D rendering task를 다른 방식으로 접근하여 해결하려는 접근들이 다양하게 시도되고 있습니다. 그 중 하나가 오늘 소개해드릴 논문입니다. 

 

  View Synthesis with Sculpted Neural Points (SNP)에서는 Scene의 3D representation을 implicit representation으로서 MLP에 저장하는 NeRF와는 다르게 3D representation을 point cloud 형태인 explicit representation으로 만든 후에 rendering을 진행하는 방식입니다. 물론 scene의 형태를 point cloud 형태로 추정하고, 그것을 바탕으로 target view에 대한 이미지를 만들어내는 접근 방식은 이전에 먼저 제안된 바 있긴 합니다. 하지만 이전의 방법들은 성능이 NeRF보다 많이 낮은 편이었고 해당 논문의 SNP는 sculpted point cloud 방법으로 성능과 속도를을 끌어올렸다고 합니다. 

 

https://arxiv.org/abs/2205.05869

 

View Synthesis with Sculpted Neural Points

We address the task of view synthesis, which can be posed as recovering a rendering function that renders new views from a set of existing images. In many recent works such as NeRF, this rendering function is parameterized using implicit neural representat

arxiv.org

 

0. Abstract

  View Synthesis task를 다루는 NeRF는 scene geometry를 implicit neural representation으로서 파라미터에 저장하는 방식입니다. 이런 방식은 성능은 좋지만 연산적인 성능 효율은 좋지 않다는 문제가 있습니다. 해당 논문에서 제시하는 point cloud를 사용하여 view synthesis를 하는 방식입니다. 해당 방식으로 NeRF와 비교했을 때 성능은 비슷한 반면, 렌더링 속도는 100배 빨랐다고 합니다. 

 

  저자들이 제안하는 방법은 기존의 differentiable point-based rendering 방법 기반에 Sculpted Neural Rendering (SNP)라는 새로운 방식을 제안하여 위 같은 결과를 얻었다고 합니다. SNP를 사용하게 되면 depth map을 기반으로 point cloud를 만들 때 error/hole 등에 robust한 모습을 보인다고 합니다. 

 

1. Introduction

  앞서 말했 듯이 NeRF 같은 implicit neural representation을 사용하는 방법은 연산 측면에서 비효율적이라는 단점이 있습니다. 저자들의 말을 좀 더 상술하자면 NeRF가 ray를 하나 쏴서 픽셀 값 하나를 예측한다고 가정해보면, ray 상의 3D point들을 sampling 하여 계산해야합니다. 하지만 3D space에서 대부분의 공간은 빈공간이기 때문에 쓸모없는(?) 연산이라고 합니다. 

 

  반면에 mesh나 point cloud 같은 explicit representation을 가지고 scene의 외형적 모습을 먼저 만들어 놓은 후, target view를 추정한다면 위와 같은 불필요한 연산들을 최소화할 수 있다고 합니다. 여기에 더해서 mesh, point cloud 같은 방법들은 이미 많이 사용되는 기술이기 때문에 어느정도 정확한 geometry, texture가 주어진 가정 하에 안정적으로 빠르고 좋은 성능을 내는 것이 가능하다는 장점도 있습니다. (물론 지금까지의 연구로는 정확한 geometry와 texture를 추정하는 것이 불가능하긴 합니다. 현재까지 연구는 depth map으로 point cloud를 정확하게 만들어내지 못하고 있고 texture를 완벽하게 parameterizing하고 있지도 못합니다. )

 

  하지만 지금까지 연구된 Neural point-based rendering 방식은 point cloud를 정확하게 만들지 못하는데서 오는 ghosting effect와 view-dependent texture를 모델링하지 못하는 데에서 생기는 blurriness 문제가 있습니다. 해당 논문에서는 이러한 문제를 최대한 개선하여 NeRF와 비슷한 성능을 내면서 rendering speed는 4.6 FPS 정도로 NeRF보다 100배 빠른 속도를 보인다고 합니다. (LLFF 데이터셋 기준)

 

  일단 SNP에서 사용한 point-based neural rendering framework는 scene에 대한 point cloud를 만들고 각 point 마다 learnable feature vector를 붙이는 식으로 point cloud를 featurize하는 과정을 거칩니다. Depth map을 가지고 point cloud를 추정할 때는 mlultiview stereo (MVS) system을 통해서 만듭니다. 그리고 point cloud의 featurized vector는 학습 데이터의 photoconsistency를 높이는 방식으로 학습됩니다. 주어진 point cloud의 feature vector들과 viewing direction을 rendering model에 넣어서 RGB 값을 추정하는 방식입니다. 

 

  SNP에서는 point cloud를 더 정확히 만들기 위해서 MVS로 만든 point cloud를 다듬는 작업을 거칩니다. Photoconsistency를 높이는 방식으로 불필요한 point는 제거하고 채워넣어야할 부분은 point를 채워넣는 과정을 거칩니다. 

 

2. Related Work

  View synthesis with mesh, View synthesis with voxels, View synthesis with implicit representation NeRF, View synthesis with point clouds에 대한 소개가 있습니다. 관심이 있으시면 논문을 읽어보시면 될 것 같습니다. 

 

3. Approach Overview

 

  아래 그림은 SNP의 구조입니다. 크게 세 단계로 나뉩니다. 첫 번 째 단계에서는 reference image + camera pose를 MVS에 태워서 depth estimation을 하게 됩니다. 

 

그리고 estimated depth를 가지고 point cloud를 만들어주게 되는데, 일 차적으로 point pruning 과정을 거쳐 point들을 제거하는 단계를 거칩니다. 그 후에는 point adding을 통해 필요한 부분에 point를 채워넣는 과정을 거칩니다. 

 

마지막으로는 각 point에 feature vector들이 있고 해당 vector는 미분가능한 형태이기 때문에 모델을 renderer 모델에 태워서 RGB 값을 예측하고 학습하게 됩니다. 

 

Sculpted Neural Points 구조
Sculpted Neural Points 구조

 

  아래 식은 순서대로 camera projection function과 camera projection function의 역함수입니다. C는 camera parameter, P는 3차원의 3D point 위치입니다. p는 픽셀 상으로 투자된 2D 정보이고 d_p는 depth 정보입니다. 

 

Camera projection function
Camera projection function

 

3.1. Point Cloud Reconstruction

  저자들은 CER-MVS network를 사용하여 reference view들에 대한 dense map estimation을 했다고 합니다. 그리고 depth map 값 들을 위의 inverse of camera projection function에 넣어서  3D point 좌표를 구했다고 합니다. 이것들이 point cloud가 된다고 보면 됩니다. 이후에 pruning, adding 작업을 할 것이기에 별도의 filtering 같은 것은 하지 않고 모든 점을 추가했다고 합니다. 각 점은 k-dim featurized vector와 opacity를 나타내는 1차원 scalar 값을 가집니다. 이렇게 featurized point cloud가 만들어집니다. 

 

3.2. Differentiable Rendering

  Point pruning, adding 과정에 point cloud reconstruction 후에 진행이 되지만 이 부분은 일단 뒷부분에서 다루도록 하겠습니다. 해당 부분은 point cloud의 feature vector를 differentiable render에 태우는 부분입니다. 

 

  Featurized point cloud와 target view를 differentiable rendering function에 태워서 RGB 값을 예측하는 것이 목표입니다. 

 

Differentiable rendering function이라는 것은 아래 세 부분으로 이루어져있습니다. 

Spherical Harmonic Point Shading

  저자들은 point의 feature vector들을 view-dependent하게 모델링 하기위해서 spherical harmonics(SH) function을 사용하였습니다. SH는 Ref-NeRF나 Plenoctree, Plenoxel 등의 모델에서 사용된 방법입니다. SH는 훨씬 예전부터 있던 컨셉이지만 앞에서 말한 모델들이 이를 효과적으로 적용하였다고 보시면 됩니다. 앞서서 SH를 적용한 모델들과 다르게, SNP는 SH를 point feature vector를 RGB로 매핑하지 않고, view-dependent high-dimension(여기선 k/9) feature vector로 매핑합니다. 

  SH function을 사용하면 MLP와는 다르게 matrix multiplication을 하지 않아도 되고, parameterization 할 필요도 없어서 연산 비용이 저렴하여 빠르고 학습 시 수렴도 빠르게 이루어집니다. SH function이 NeRF 도메인에서 종종 중요하게 다뤄지는 컨셉인 것 같으니 관심이 있으신 분은 따로 한 번 찾아보시는 것을 추천드립니다. 

 

Differentiable Soft Rasterization

  해당 방법도 사전 연구에서 제안되었던 방법입니다. Target view가 주어진 상태에서 계산된 feature를 2D feature map으로 변환하는 역할을 합니다. Soft rasterization은 ray 상에 있는 여러 개의 point를 적절하게 blending 하는 방법 중에 하나입니다. Bleding을 할 때는 opacity와 depth에 맞게 point에 대한 가중치를 부여합니다. 

 

2-D Rendering

  앞 단계에서 구한 2D feature map을 RGB image로 바꿔주는 부분입니다. U-Net 구조입니다. 

 

4. Point Sculpting

  앞에서 말했 듯이 point sculpting은 point pruning과 point adding 과정을 거칩니다. 이 과정을 조각하는 것에 비유하여 이런 이름을 붙인 것 같습니다. 

4.1. Point Pruning

  Point cloud에서 불필요한 점들을 삭제하는 시도가 해당 논문에서 처음 있었던 것은 아닙니다. 여러 각도의 depth map을 가지고 point cloud를 만들 때, 특정 view의 특정 지점의 픽셀을 다른 view 지만 같은 지점의 픽셀로 매핑하고 이를 다시 원래 view의 원 지점으로 다시 매핑을 했을 때 얼마나 원래 값이 유지되는지 확인합니다. 원래 값이 유지되어야 geometrical consistency가 있다고 간주합니다. Consistency가 없는 점의 경우는 outlier라고 간주하고 제거합니다. 아래 식은 COLMAP에서 사용하는 consistency error term입니다. 

 

 

COLMAP consistency function
COLMAP consistency function

 

  위 방법 말고도 Dynamic Consistency Checking(DCC)라는 SOTA 방법도 있지만 해당 방법은 지나치게 filter가 심하게 걸려서 geometry가 심하게 손상되는 경향이 있으며 결과적으로는 성능에 안좋은 영향을 끼친다고 합니다. 그래서 저자들은 아래와 같은 방식으로  point pruning을 진행합니다. 

 

SNP point pruning function
SNP point pruning function

 

  COLMAP의 식처럼 cyclic하게 계산하지 않고, 한 지점의 픽셀을 다른 뷰의 같은 지점 픽셀로 투사한 뒤 해당 값이 다른 뷰의 원래 픽셀 값과 어느정도 유사하면 유지하는 정책을 사용하였습니다. 

 

 

4.2. Point Adding

  Point adding은 아래와 같은 방법을 거칩니다. Point Adding을 할 때는 우선 있는 점들에 대해 optimization을 먼저 합니다. 이 때 존재하는 point feature vector과 opacity는 수렴하게 됩니다. 그 후에 새로운 점들을 추가해줍니다. 

 

  아래 그림을 참고하면 파란 선은 point cloud로 만들어진 표면이고 검은색 점선은 실제 물체의 표면입니다. Point adding을 하지 않은 상태이기 때문에 point cloud로 만든 객체의 표면(파란 실선)은 빈공간이 있습니다. 이 부분을 point adding으로 채우는 시나리오입니다. Camera B 시점에서 ray 상에 일정하게 점을 찍으면서 추가할 점의 후보들을 만듭니다. 이 후보들 중에 점 c는 Camera A 의 ray(기존의 파랑 실선) 막게 되기 때문에 제외됩니다. 그리고 point adding을 할 때는 다른 기존 점을 가리지 않은 점 중 가장 가까운 점 M개만 추가하기 때문에 점 a도 제외됩니다. 

 

Point Adding
Point Adding

 

5. Experiments

실험 결과는 아래와 같습니다. 

 

Scene 110/114/118 같은 경우에는 처음에 만들어진 점들이 상대적으로 적었는데 pruning/adding을 통해서 점들이 충분이 보충되는 것을 볼 수 있습니다. 

 

 

SH function을 사용할 때, 수렴이 훨씬 빠르고 계산도 MLP보다 빠름을 확인할 수 있습니다.