본문 바로가기
NeRF

[논문 리뷰] MVSNeRF (ICCV2021) : 적은 입력 + 학습 속도 개선 논문

by xoft 2022. 10. 27.

논문명 : MVSNeRF: Fast Generalizable Radiance Field Reconstruction from Multi-View Stereo

88 Scene 각각에 대해 3 이미지 입력으로 feature를 추출하는 모델을 pre-train하고, Novel Scene에 대해 16 입력 이미지가 주어졌을 5-15분만에 Optimization(fine-tuning)하는 방법(c사진)에 관한 논문입니다.

3 입력 이미지에 대해서도 좋은 랜더링 결과를 보였습니다(b사진). 시간은 명시되어 있지 않습니다.

(처음엔 본 논문이 3 이미지 입력을 5-15분만에 학습하는걸로 착각 했었네요.)

 

전체적으로 3가지 Neural Network 구성되어 있고, 전체 Network pre-train으로 30시간 학습(RTX2080Ti)해놓고, Novel Scene 주어졌을 , 앞의 2 Network freezing하고 뒤의 1 Network Fine-tuning하는 방식으로 속도를 개선 했습니다.

 

Overview

 

a) 이미지마다 2D CNN으로 feature 추출하고, 1개의 view 시점에서 frustrum형태로 multi sweeping plane으로 만듭니다. 2D CNN Feature 해당 plane들로 warping하여 cost volume 설계되었습니다. (용어는 본문에 설명해두었습니다.)

b) Neural encoding volume reconstruct하기 위해 3D CNN 사용하고, radiance field 표현하기 위해 volume rendering properties regress하는 하나의 MLP 사용하였습니다.

c) Network로부터 모델링되는 radiance field 사용하여 novel viewpoint에서 이미지를 regression하도록 differentiable ray marching 사용하였습니다. rendering loss 전체 framework end-to-end 학습이 가능하도록 하였습니다.

+ Few image radiance field reconstruction 하도록 하였습니다. 독립적으로 rendering quality 향상시키기 위해, 16개의 image가 주어지면, reconstructed encoding volume MLP decoder 빠르게 fine-tuned 있게 하였습니다.

 

각각에 대해서 상세하게 다뤄보겠습니다.

 

 

a) Cost Volume Construction

 

학습 2D image 에서 feature CNN으로 추출합니다. downsampling convolution 통해 HxWx3 입력 이미지를 H/4 x W/4 x C feature map으로 만듦니다. (C 채널 갯수를 의미합니다.)

Reference View 하나 지정하고, frustrum형태로 multi seeping plane (128) 만듭니다. View 1 지정하고 view 2,3 지정하지 않습니다. Frustrum 절두체라고합니다. 아래 그림과 같습니다.

 

해당 학습 이미지 각각에 대한  카메라 parameter 사용해서, image feature map 특정 dpeth z 있는 sweeping plane 투영하고, z깊이에서 u,v좌표의 feature map Fi,z(u,v) 정의합니다. i i번째 학습 이미지를 의미합니다. Depth 가장 곳에서 가까운 곳까지 균등하게 샘플링 됩니다.

Cost volume 여러 학습 이미지 M view로부터 feature map Fi,z(u,v) 분산(variance)으로 설계 되었습니다.

Hi(z) 추가로 설명하자면, 핀홀 카메라 모델을 표현하는 수식인 K·R·t 사용해서, 입력 view 이미지를 z번째 sweeping plane으로 변환하는 translation matrix 계산하는 식입니다. (Intrinsic Camera Matrix K, camera rotation matrix R, translation matrix t 나타냅니다.)

 

b) Radiance field reconstruction

image-feature cost volume P neural feature volume S transform 있도록, 3D CNN B 학습 했습니다.

  • S=B(P) 정의 하였습니다. 이전 MVS 연구들은 scene geometry 표현하는 cost volume으로부터 직접적으로 depth probability 예측하였었다고 합니다.

3D CNN B downsampling, upsampling, skip connection으로 구성된 3D UNet입니다.

  • 구조는 효과적으로 infer 있고, scene appearance propagate 있습니다. Unsupervised 방법으로 encoding volume infer 있고, volume rendering으로 end-to-end train 있습니다.

view direction으로 ray 그렸을 , ray 위의 특정 3D 좌표 x에서의 neural featrue S로부터 density view-dependent radiance r을 regress하는 MLP A 설계하였습니다.

  • 특이한 점은 MLP input으로 학습 image 원본 pixel값이 들어간다는 점입니다. 3D 좌표 x 학습 image들의 plane으로 projection하였을 , plane pixel값들을 MLP입력으로 넣습니다. 앞선 3D CNN에서 2D feature extraction downsampling 때문에 scene encoding volume relative low resolution 특성을 가진다고 합니다. 때문에 High-frequency appearance regress 위해 이러한 기법을 사용했다고 합니다. 1 ray 128개의 point 샘플링 됩니다.

다음과 같이 정의 있습니다.

최초 NeRF에서는 coarse, fine network MLP 구분되는데, MVSNeRF에서는 single MLP입니다. 그래도 성능이 좋았다고 합니다.

Location x에서 feature volume S로부터 trilinear interpolation합니다.

  • 자세한 설명이 없는데, multi seeping plane 사용하기 때문에, 모든 좌표에 feature 없을 것이므로, feature 없는 위치에 feature 주변 값으로 interpolation한다는 의미로 보입니다. 이를 통해 나온 neural feature f = S(x) 정의합니다. S=B(P)이므로, f=B(P(x)) 표현 합니다. x NDC(normalized device coordinate) 공간으로 나타내어 unit vector 표현됩니다. NDC 공간을 사용하는 것은, 다른 데이터 소스로부터 scene scale normalize하는데 효과적이어서 좋은 generalizability 보였다고 합니다.

MLP decoder A 입력값들은 최초 NeRF 같이 positional encoding 사용하였습니다.

 

 

c) Volume Rendering and end-to-end training

Volume rendering 최초 NeRF 똑같이 Volume Rendering 기본 수식을 기반으로 설계하였습니다. 설명은 최초 NeRF  이전 포스트  참조바랍니다. (최초 NeRF 비교하였을 , MVSNeRF 가장 곳과 가까운 곳을 균등한 간격으로 ray point 샘플링하므로 간격을 나타내는 인자는 없습니다.)

이렇게 계산한 color값과 GT의 color값의 차이를 L2 loss로 사용합니다.

최초 NeRF scene마다 학습에 초점이 맞춰져 있었다면, MVSNeRF DTU데이터의 서로 다른 Scene으로 전체 네트워크를 학습합니다.

이러한 설계를 통해, Geometric-aware scene 추론에 유용하였고, (High-quality view 합성 있는) novel testing scene에서 (neural encoding volume으로 radiance field reconstruction 있는) generic function 효과적으로 학습 있었습니다.

 

 

 

Dense Image(많은 입력 데이터) 주어질 경우 Optimization 방법

앞에 설계를 통해 3 입력으로 generalizable function 만들 있지만, Scene간의 diversity 인해 좋은 퀄리티를 만드는 어렵습니다. 추가로 많은 입력 데이터셋이 주어졌을 경우에 Optimization하여 퀄리티를 향상시키는 방법을 소개합니다.

2D CNN, plane-sweep warping, 3D CNN network processing freeze하여 그대로 사용하고 encoding volume S MLP optimize(fine-tune)합니다. 이를 통해 매우 빠르게 Optimization(학습) 있고, Voxel마다 local neural feature 독립적으로 adjust하는 neural optimization flexibility를 만듭니다.

Encoding volume S Sparse Voxel field기법과 유사합니다. Sparse Voxel fields방법에서는 pure per-scene optimization 되지만 MVSNeRF에서는 초기에 빠른 inference 통해 network로부터 prediction 되어집니다. 다른 관점으로, Sparse Voxel fields방법처럼 좋은 성능을 위해 fine-tuning안에서 volume grid 분할 있습니다.

 

Appending Colors

앞선 소개에서 Neural encoding volume S MLP decoder 보내질 , pixel color combine되었습니다. Fine-tuning 설계로는 적절하지만 reconstruction 항상 3 input 의존성을 갖게 됩니다.

Encoding volume S 추가적인 채널로써 voxel center들의 per-view color 더함으로써 독립적인 neural reconstruction을 만들었습니다. (이해가 안되는 부분 - 원본 : We instead achieve an independent neural reconstruction by appending the per-view colors of voxel centers as additional channels to the encoding volume)

Feature로써 color들은 per-scene optimization에서 학습됩니다.  이러한 간단한 appending 랜더링 초기에 blur 보일 있지만, fine-tuning과정에서 매우 빠르게 처리됩니다. Color appending 후의 Encoding volume S reasonable image 합성 있는 적절한 initial radiance field입니다.

 

Implementation details

데이터셋 : generalizable network 학습하기 위해 DTU데이터셋으로 학습했습니다. PixelNeRF(이전 포스트) 방법을 따라 512x640해상도를 88:16=train:test scene으로 나누었습니다. 학습데이터와 다른 distribution 가진 Realistc Synthetic NeRF data Forward-Facing data 모델을 test했습니다. test scene에서 20 가까운 view 선택하고, 3 center view들을 input으로, 13개를 per-scene fine-tuning 위한 추가적인 input으로, 나머지 4개를 test view 두었습니다.

Network details

첫행은 2D CNN, 두번째행은 3D CNN, 3번째행은 MLP decoder를 의미합니다. K kernerl size, s stride, d kernal dilation, chns layer input/output 채널을 의미합니다. CBR2D/CBR3D/CTB3D/ LR/PE 는 ConvBnReLU2D/ConvBnReLU3D/ConvTransposeBn3D/ LinearRelu/Positional Encoding 의미합니다.

2080TI을 사용했고, 1개 배치마다 1024 pixels들을 랜덤하게 샘플하여 학습하였습니다.

 

 

Experiments

Comparisons on results with three-image input

 

평가지표에 대해서는  PSNR/SSIM/LPIPS 글에 소개해 두었습니다.

Radiance field reconstruction generalization 유사한 논문인 PixelNeRF(이전 포스트), IBRNet 비교하였고, DTU데이터셋에서 3개의 center view input으로 학습하였습니다. 그리고 4장으로 Scene test하였습니다. No per-scene optimization 3장으로 optimization 것이고, Per-scene Optimization 16장으로 optimization 결과 입니다. DTU 데이터셋으로 학습하고, DTU 데이터셋, Synthetic Data 데이터셋, Forward-facing 데이터셋으로 테스트 하였습니다. 논문에는 명시되지 않았지만 github코드에서 2D CNN, 3D CNN pre-train 6 Epoch 했고, 30시간 소요되었다고 합니다.

PixelNeRF DTU데이터셋에 Overfit되는 경향을 보였습니다. Realistc Synthetic scene에서 obvious artifact 포함하였고, Forward-Facing scene에서 완전히 fail되었습니다. IBRNet 다른 데이터셋에서 PixelNerF보다 확실히 성능이 좋았지만, flicker(빛의 깜빡임) artifact 관측었고, video에서는 분명하게 나타났습니다. MVSNeRF 모든 경우에 좋은 성능을 보였습니다. Plane-swept cost volume에서 geometry-aware scene 추론을 위한 MVS 기법을 사용하고, neural encoding volume으로써 localized radiance field representation reconstruction하였기 때문입니다.

 

 

Per-scene fine-tuning results

16개의 input image per-scene optimization하였습니다. 15분의 짧은 시간 동안 (10K iteration) fine-tune 하였습니다. Photo-relistic결과를 보였습니다. 장시간(10.2hours) ptimization으로 생성되는 NeRF 비교하였습니다. 퀄리티가 같거나(Realistc Synthetic), 좋았습니다(DTU, Forward-Facing).

시간에 따른 결과를 비교하였습니다. MVSNeRF 확실히 수렴속도가 빠르는 것을 있습니다.

Initial radiance field 가능하게 하는 generic network 사용함으로써, dense image 주어질 , practical per-scene radiance field reconstruction 가능하게 하였습니다.

 

Depth reconstruction

Volume density로써 scene geometry 나타내는 radiance field reconstruct합니다. Marched ray 샘플링된 point depth value weighted sum volume density값으로 생성되는 depth reconstruction 결과와 비교함으로써 geometry reconstruction quality 평가하였습니다.

DTU test셋으로 Radiance field method MVSNet 비교하였습니다. Cost-volume 기반 reconstruction 덕분에, 다른 neural rendering method보다 좀더 정교한 depth 보였습니다. MVSNeRF depth 지도 학습하지 않고, 랜더링 지도학습만 하였지만, direct하게 depth 지도학습하는 MVSNet 비교하였을 좀더 정확하였습니다. 이를 통해, Realistic rendering 만드는 주요 factor geometry reconstruction 퀄리티라는 것을 있습니다.

 

Limitation

  • High glossiness/specularities가진 scene에서는 network 통해 directly하게 recover 하기가 어려울 있고, fine-tuning process 시간이 오래 소요될 있습니다.
  • reference view 있는 scene contents에서만 reconstruct됩니다. Volume padding하는 것은 초기 frstrum 벗어난 contents 포함 있지만 occluded되고 보이지 않는 영역은 network 부터 직접적으로 recover 없습니다. 때문에, single neural encoding volume S로부터 wide view range 랜더링 하는 것은 challenge하다고 합니다.
  • Scene주변에 cover하는 dense image long per-scene fine-tuning 360 랜더링을 있지만, 최초 NeRF처럼 training속도가 느립니다.
  • Multiple view에서 multiple neural encoding volume 조합하면서 large view range 빠른 속도로 하는 것은 다음 연구 주제가 있습니다.

 

 

Closing

최초NeRF 많은 학습 이미지로 scene마다 학습하고 generalization 하지 않았기 때문에, 연산량이 많았습니다. MVSNeRF에서는 여러 이미지로 feature extraction 부분을 학습하고, 재사용해서 학습속도를 높였습니다.

3 입력 이미지에 대한 optimization속도가 16 입력 이미지에 대한 속도와 비슷할 같을 거라 생각되는데 궁금해서 한번 구동해보고 싶네요.

Novel View Direction마다 Rendering 시간은 최초 NeRF와 비슷할 것 같습니다.

 

Reference

Frustrum : http://telnet.or.kr/directx/graphics/programmingguide/fixedfunction/viewportsclipping/viewingfrustum.htm

댓글