NeRF Studio 사용기

김민솔·2024년 12월 1일
0

NeRF

목록 보기
10/10

부스트캠프로부터 귀하디 귀한 gpu를 사용할 수 있는 기회를 얻었지만,,, 약 4시간 만이 주어진 상황이었습니다. 또 CUDA를 사용할 수 없는 환경이어서, GSplat 대신 NeRFStudio를 사용해보았습니다.

Installation

for linux

apt-get install -y gcc libgl1-mesa-glx libglib2.0-0

NeRFStudio

git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install -e .

설치 방법은 위와 같이 매우 간단합니다. 가상 환경은 conda로 사용하였습니다.

Preprocessing data

NeRF의 input data로는 3D position과 viewing direction이 존재합니다. 이는 각 카메라 ray로부터 얻어지게 되며, ray 정보를 얻기 위해서는 카메라의 intrinsic/extrinsic 정보를 획득해야 합니다. 2D images로부터 카메라 파라미터를 얻기 위해 COLMAP(Structure-from-motion)을 사용합니다.

How to

NeRF studio에서 제공하는 전처리 기능입니다.

ns-process-data images --data data_folder --output-dir output_folder

해당 함수를 실행하면, 1️⃣ Images를 2/4/8 downsclae하여 output 폴더에 카피하고, 2️⃣ feature extraction, 3️⃣ feature matching, 4️⃣ bundle adjustment까지 수행하여 카메라 파라미터들을 뽑아냅니다.

COLMAP

문제의 colmap입니다... 원격 linux 서버에 gui가 깔려 있지 않아, gpu 환경으로 SFM을 수행하는 데에 어려움을 겪었습니다. 따라서 로컬 환경인 맥북으로 미리 뽑은 카메라 파라미터를 사용하였고, 수행 결과는 다음과 같습니다.

  • output 폴더 구조입니다.
  • 여기서 필요한 정보들은 binary 파일입니다.

  • custom dataset에 대한 colmap sfm 결과입니다.
  • point cloud와 카메라 파라미터들을 시각화로 확인할 수 있습니다.

colmap2nerf

위에서 얻은 binary 파일들을 txt로 변환하는 과정이 필요합니다. CLI에서 해당 명령어를 사용합니다.

colmap model_converter \
    --input_path path-to-binary-reconstruction \
    --output_path path-to-txt-reconstruction \
    --output_type txt

이를 transforms.json에 저장해야 합니다. 코드는 instant-ngp에 존재하는 colmap2nerf.py를 사용하였습니다.

Training

ns-train nerfacto --data data_foler

전처리를 마친 후, nerfacto를 사용하여 custom scene을 학습하였습니다.

Nerfacto

Nerfacto는 NeRF Studio에서 자체적으로 개발한 모델입니다. (논문은 존재하지 않습니다.) real scene을 잘 표현하기 위해 고안되었습니다. 중요 특징은 아래와 같습니다.

  • 예측된 카메라 포즈가 부정확한 경우가 많으므로, backprop으로 gradient를 전달하여 카메라 포즈도 최적화합니다.
  • Piecewise sampler: 카메라 거리가 1인 샘플 절반과 step size에 따라 분포된 샘플 절반을 샘플링하여 step이 지속될수록 분리된 샘플들까지 점차 학습하도록 합니다.
  • Proposal sampler: hash encoding의 작은 fused-mlp로 density funciton을 예측합니다. 이를 coarse density 표현에 사용하여 렌더링 퀄리티를 향상시켰습니다.

Results

  • 학습 도중의 결과를 viewer로 확인할 수 있습니다.

  • 각 카메라 파라미터에서 바라보는 scene을 확인하는 것도 가능합니다.

Caution

학습 이후 camera path를 미리 뽑아두는 것을 권장합니다! render 결과를 비디오 형식으로 뽑을 수 있습니다. NeRF로 학습한 scene은 point cloud로 추출 가능합니다. (gs는 ply 형식)
자세한 부분은 ns-export --help로 확인할 수 있습니다.

Reference

[1] nerfstudio, https://github.com/nerfstudio-project/nerfstudio/tree/main
[2] nerfacto, https://docs.nerf.studio/nerfology/methods/nerfacto.html

profile
Interested in Vision, Generative, NeRFs

0개의 댓글

관련 채용 정보