windows에서 nerfstudio 사용하기

판다다·2024년 3월 11일
0

  • Windows 11 Pro
  • nerfstudio 공식홈페이지를 기본적으로 따라감
  • Docker 사용 안함 (Docker 사용하려면 xoft님 참고)
  • Visutal Studio 2022 사용
  • NVIDIA RTX A4500

🔴환경 만들기

미리 깔아둔것

CUDA 11.8
CUDNN 8.7.0

GCC 11.2
GitHub Desktop

Anaconda Prompt 들어가서 환경 생성

conda create --name nerfstudio -y python=3.8
conda activate nerfstudio
python -m pip install --upgrade pip

torch 설치

pip install torch==2.1.2+cu118 torchvision==0.16.2+cu118 --extra-index-url https://download.pytorch.org/whl/cu118

CUDA 확장을 빌드하려면 cuda-toolkit이도 필요하다네요

conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit

tiny-cuda-nn 설치

pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch

바로 에러남.....

ERROR: Could not build wheels for tinycudann, which is required to install pyproject.toml-based projects

이전에 Tri-MipRT 환경설정할때 났던 에러여서 같은 방법으로 해결함
바로바로 x64 Native Tools Command Prompt 에서 설치하기!

  1. 시스템변수 Path에 'C:\Users\myName\anaconda3\Scripts' 추가
  2. x64 Native Tools Command Prompt for VS 2022 실행
  3. conda init 입력
    ==> For changes to take effect, close and re-open your current shell. <==
    이거 나오면 껐다가 Prompt 다시 실행
    이제 conda 명령어를 사용할 수 있음
  4. conda activate nerfstudio로 환경 활성화
  5. 다시 tiny-cuda-nn 설치

FFmpeg 설치

  1. FFmpeg공식 홈페이지에서 Windows builds from gyan.dev 들어가서 ffmpeg-git-full.7z 다운로드
  2. 압축풀고 C:\Program Files\ffmpeg 폴더로 이동
  3. 환경변수 path에 ffmpeg경로(C:\Program Files\ffmpeg\bin) 등록

Colmap(3.9.1) 설치 Releases버전말고 vcpkg로 install할꺼임

1. COLMAP git에서 3.9.1-windows-cuda 버전 다운로드
2. 압축풀고 C:\Program Files\colmap 폴더로 이동
3. 환경변수 path에 colmap경로(C:\Program Files\colmap) 등록

환경구성 완료!👌


🟠nerfstudio 설치하기

nerfstudio 설치하기

방법1> pip 사용해서 다운로드하기
pip install nerfstudio


방법2> git clone으로 최신 개발 버전 다운로드하기
git clone https://github.com/nerfstudio-project/nerfstudio.git
cd nerfstudio
pip install --upgrade pip setuptools
pip install -e .

(선택)Tab 완성 사용

nerfstudio가 업데이트 된다면 다시 실행해야함
ns-install-cli

path 에러

nerfstudio 는 기본적으로 Home path를 사용하기 때문에 아래에서 파일을 관리한다고 함

C:\Users\사용자이름\data

에러코드에서 보이는 install.py:352를 들어가면
인데... 리눅스에선 HOME이 기본 디렉터리지만 난 윈도우고 심지어 E드라이브 사용중이라서...

시스템 변수 HOME을 만들어서 내 디렉토리(E:\NeRF)를 추가해준다.

그럼 이제 다시 ns-install-cli를 입력하면 정상작동한다!

(선택)개발 패키지

pip install -e .[dev]
pip install -e .[docs]

이것까지 끝내면 nerfstudio 설치 완료!👌


🟡기본 data로 nerfstudio에서 학습하기

data 다운받기

nerfstudio에서 나와서 (nerfstudio) E:\NeRF> 에서 다운받는다.
ns-download-data nerfstudio --capture-name=poster

데이서 다운받으려는데 에러가 나요

gdown.exceptions.FileURLRetrievalError: Cannot retrieve the public link of the file. You may need to change the permission to 'Anyone with the link', or have had many accesses.

흠.... 에러나는 파일에서 url을 print해서 직접 들어가 봤지만 404에러 발생...
아니 코드에서 주는 url인데 왜 틀리나요💦
공식홈페이지에서 주는 Google Drive directly에 들어가니 poster가 없다.

ns-download-data nerfstudio --capture-name=kitchen
그래서 있는 kitchen으로 다운로드
다행이 잘 다운로드 된다.

data도 있으니 학습 시도

ns-train nerfacto --data ./data/nerfstudio/kitchen

nerfacto는 nerfstduio 제작자가 만든 알고리즘이라고 한다.
다행이도 잘 학습되었다😊

이미지에서 초록색으로 표시된 주소를 클릭하면 Web Viewer로 들어간다.

Web Viewer에서 카메라 각도를 마음대로 추가해 rendering 동영상을 다운받을 수 있다.


🟢내 data로 nerfstudio에서 학습하기

회의실을 찍은 동영상을 E:\NeRF\data경로에 두었다.

colmap을 깔아라!

공식홈페이지에 있는 Installing COLMAP Windows-CUDA 명령어 실행
git clone https://github.com/microsoft/vcpkg
cd vcpkg
./bootstrap-vcpkg.bat
./vcpkg install colmap[cuda]:x64-windows

마지막 명령에서 에러

error: building colmap:x64-windows failed with: BUILD_FAILED

./vcpkg install colmap[cuda]:x64-windows 이 명령어 실행하면 이런 에러 등장....
검색해서 여러 방법을 시도해 봤지만 다 실패...
System32폴더에 colmap\lib폴더에 있는 파일을 옮겨도 보고, patch파일 만들라해서 만들어도 봤지만.... 해결되지 않았다.

./vcpkg install colmap
그냥 이렇게 했더니 성공함
vcpkg에 colmap폴더가 있는거 보면 잘 깔린것같다!


colmap 환경변수 등록

환경변수 path에 colmap경로(E:\NeRF\vcpkg\packages\colmap_x64-windows\tools\colmap) 추가

cmd창에선 colmap하면 잘 실행되는데 conda환경에선 에러가 나서 보니, 아까 vcpkg colmap:x64-windows bulid 에러 해결한다고 이것저것 따라해서 그런가보다...

conda install -c conda-forge colmap
이걸 했었어서...

conda uninstall colmap
으로 지웠다.

cmd창이나 conda환경에서나 colmap gui가 잘 실행된다.


동영상을 학습가능한 형태로 바꾸기

ns-process-data video --data ./data/conference-room.mp4 --output-dir ./data/nerfstudio/conference-room

ns-process-data 명령어를 실행하는데 에러 아닌 에러가 등장한다.
gpt는 메모리 오버플로우나 무한 루프 같은걸로 프로그램이 비정상적으로 중단되었다는데....

nerfstudio git issues 보고있으니 PyInit_pycolmap가 많이 보인다고 pip install --upgrade pycolmap 해보란 소리가 있었다.

vcpkg으로 colmap을 깔았으니 내 conda 환경엔 없어야 하는거 아닐까? 해서
pip uninstall pycolmap를 실행했더니 ns-process-data를 쳤을때 나오는 에러가 해결되었다!😁
git issues에 처음으로 댓글도 달아줬다. 뿌듯


진짜로 동영상을 학습가능한 형태로 바꾸기

다시 data process명령어 실행!
ns-process-data video --data ./data/conference-room.mp4 --output-dir ./data/nerfstudio/conference-room

잘 나왔네요. 라고 하고싶은데 불길한 빨간색.....
colmap이 25.86%의 프레임에서만 poses를 찾았다고 한다. 낮은 수준이라고...

영상이 좀 빠르게 흘러가서 흐릿한 이미지가 있는것같다.
다시 천천히 영상을 찍어서 올렸고
이번엔 포즈를 잘 찾았다.

내가 만든 data로 학습하기

내가 찍은 영상으로 만든 data를 학습하였다.
ns-train nerfacto --data ./data/nerfstudio/conference-room

모델은 똑같이 nerfacto 사용
잘 학습되었다~!


🔵nerfstudio 활용하기

ns-viewer 사용하기

이건 학습했던 모델을 viewer로 다시 볼 수 있게 하는 명령어다.
ns-viewer --load-config {outputs/.../config.yml}

콘솔에 있는 http://0.0.0.0:7007 에 들어가면 연결이 되지 않는다.

disabled local writer

http://localhost:7007/
왜인지 이 주소로 들어가야 연결이 된다.


⛔mipnerf로 학습하고 ns-viewer를 실행할때 depth가 없음

KeyError: 'depth' depth를 못찾는다고 하고 viewer에서도 depth가 없이 보인다.

해결방법도 딱히 없는듯...


Mesh파일로 export하기

학습한 3D모델을 다른 tool에서도 사용할 수있게 mesh 파일로 만들어야한다.
다행이도 viewer에서 export버튼이 따로있어 viewer에서 생성해주는 명령어를 입력하기만 하면 된다.
ns-export poisson --load-config outputs/conference-room/nerfacto/2024-03-15_083208/config.yml --output-dir exports/mesh/ --target-num-faces 50000 --num-pixels-per-side 2048 --num-points 1000000 --remove-outliers True --normal-method open3d --use_bounding_box False --obb_center -0.0011565200 -0.5618804914 -0.0000005987 --obb_rotation 0.0000000000 0.0000000000 0.0000000000 --obb_scale 1.0000000000 1.0000000000 1.0000000000

아무것도 건들지 않고 기본값으로 설정해서 만든 명령어다.

_sqlite3 모듈이 없다는 에러가 난다.

ImportError: DLL load failed while importing _sqlite3: 지정된 모듈을 찾을 수 없습니다.

stack overflow를 참고해서

C:\Users\myName\anaconda3\Library\bin

에 있는 sqlite3.dll, sqlite3.exe를

C:\Users\myName\anaconda3\envs\nerfstudio\DLLs

내가 사용하는 conda 환경의 DLLs폴더로 복사했다.

잘 export되었다!


Point Cloud파일로 export하기

부제 - ns-export 활용하기

export 결과에서 이상값들이 많아 명령어 옵션을 수정했다.
ns-export pointcloud --load-config outputs/conference-room/nerfacto/2024-03-19_134522/config.yml --output-dir exports/pcd/conference-room/nerfacto_box/ --num-points 2000000 --remove-outliers True --normal-method open3d --use_bounding_box True --save-world-frame True --obb_center 0.1957430605 0.0393399931 0.0111813489 --obb_rotation -1.4570181614 -0.9951155291 0.9524088949 --obb_scale 2.0000000000 2.0000000000 2.0000000000

  • save-world-frame : 원본 데이터세트와 동일한 프레임에 pointcloud를 저장
    • True여야 적당한 크기로 나옴
  • use-bounding-box : 경계상자 내의 query points만 사용
    • True여야 내가 학습한 공간 밖의 이상값들이 사라짐
      nerfstudio viewer에서 Use Crop에 체크하고 중앙의 좌표계를 조절해준다.
  • bounding box의 크기가 내 학습결과를 다 못담으면 obb_scale을 조절해줬다.
  • num-points를 늘려서 스무스한 결과를 만들었다.

ns-process-data 활용하기

ns-process-data video --data ./data/conference-room.mp4 --output-dir ./data/nerfstudio/conference-room --num-frames-target 1000 --matching-method exhaustive

  • num-frames-target : 비디오당 사용할 목표 프레임 수
  • matching-method : 사용할 특징 매칭 방법
    • vocab_tree : 속도와 정확성의 균형
    • exhaustive : 속도는 느리지만 좀 더 정확함
    • sequential : 속도는 빠르지만 동영상에서만 사용가능함
    default값인 sequential에선 colmap이 poses를 잘 찾지 못해 exhaustive method 사용함 (sequential 에선 1.26%를 exhaustive 에선 88.37%를 찾음)

🟣nerfstudio에서 zip-nerf 학습하기

zip-nerf는 nerfstudio에 내장된게 아니라서 공식홈페이지 에서 따로 다운받아야 한다.
pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch

내 버전(torch2.1.2 / cuda11.8 / python 3.8) 에 맞는 torch_scatter 도 다운받아야한다.
pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-2.1.2%2Bcu118.html

zip-nerf로 학습 시작
ns-train zipnerf --data ./data/nerfstudio/conference-room


path가 없다는 에러 등장

AssertionError: Colmap path data\nerfstudio\conference-room3\sparse\0 does not exist.

에러에서 여기⬇가 없다는데

data\nerfstudio\conference-room3\sparse\0

ns-process-data로 만든 data의 path를 보면 이렇게⬇ 있다.

data\nerfstudio\conference-room3\colmap\sparse\0

그래서 colmap 폴더안의 sparse 폴더를 복사해 밖으로 꺼내놨더니 해결됐다.


하나 해결하면 다음 에러 등장

OSError: Unable to open file: /configs/360.gin. Searched config paths: [''].

그래도 다행이 참고할 git issues가 있었다.
git clone https://github.com/SuLvXiangXin/zipnerf-pytorch.git

zipnerf-pytorch git clone하고,
E:/NeRF/zipnerf-pytorch에 있는 configs폴더 전체를 E:/NeRF로 복사해서 해결했다.


다시 zipnerf 학습을 시도하니 이렇게 cuda_backend를 못찾겠다고 나왔다.

ModuleNotFoundError: No module named '_cuda_backend'
In call to configurable 'Model' (<class 'internal.models.Model'>)

아무래도 공홈에서 이 명령어 안쳐서 그런듯...
그래서 다시 install 하는데
pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch#subdirectory=extensions/cuda

또 이런 에러 속 에러가...

note: This error originates from a subprocess, and is likely not a problem with pip.
ERROR: Failed building wheel for cuda_backend
Running setup.py clean for cuda_backend
Failed to build cuda_backend
ERROR: Could not build wheels for cuda_backend, which is required to install pyproject.toml-based projects

아까 clone한 zipnerf-pytorch에서 다운로드 하려고 해도 똑같은 에러...
cd zipnerf-pytorch
pip install ./extensions/cuda

결국 새로 conda 환경을 만들고 torch버전을 낮춰서 install했더니 성공했다.🙆‍♀️

  # 새로운 환경 만들기
  conda create --name zipnerf python=3.9
  conda activate zipnerf
  python -m pip install --upgrade pip
  
  cd zipnerf-pytorch
  pip install -r requirements.txt
  
  # torch 버전 2.0.1으로 깔아줌
  pip uninstall torch torchvision functorch tinycudann
  pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2 --index-url https://download.pytorch.org/whl/cu118
  
  conda install -c "nvidia/label/cuda-11.8.0" cuda-toolkit
  
  pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch#subdirectory=extensions/cuda
  pip install git+https://github.com/SuLvXiangXin/zipnerf-pytorch
  
  pip install torch-scatter -f https://pytorch-geometric.com/whl/torch-2.0.0%2Bcu118.html
  # 근데 2.1.2로 설치됨🤷‍♀️
  
  pip install ninja git+https://github.com/NVlabs/tiny-cuda-nn/#subdirectory=bindings/torch
  
  # nerfstudio도 설치하기
  cd ..
  # git clone https://github.com/nerfstudio-project/nerfstudio.git
  # 난 이미 clone해둔게 있어서 안함
  cd nerfstudio
  pip install --upgrade pip setuptools
  pip install -e .
  ns-install-cli

새로만든 zipnerf conda env로 zip-nerf로 학습 시작

ns-train zipnerf --data ./data/nerfstudio/conference-room

학습완료~!


Mip-NeRF 360 dataset을 zip-nerf로 학습하기

mip-nerf 360 데이터들을 다운받아 zip-nerf로 학습 시도하였다.
ns-train zipnerf --data ./data/Mip-NeRF_360/room

학습 시작하는듯하다 에러발생

RuntimeError: CUDA error: device-side assert triggered "E:\NeRF\nerfstudio\nerfstudio\cameras\cameras.py", line 288, in is_jagged

zip-nerf git에 이에 대한 설명이 있었다.
nerfstudioColmapDataParser는 축소 시 이미지 크기를 반올림하는데 이부분이 Mip-NeRF 360 dataset와 충돌하기 때문이라고 한다.
그래서 dataset을 nerfstudio에 맞게 다시 처리하거나(ns-process-data 참고), 축소하는 코드를 수정해야한다.

nerfstudio/nerfstudio/cameras/cameras.py, line 1009~1010을

self.height = (self.height * scaling_factor).to(torch.int64)
self.width = (self.width * scaling_factor).to(torch.int64)

에서

self.height = torch.ceil(self.height * scaling_factor).to(torch.int64)
self.width = torch.ceil(self.width * scaling_factor).to(torch.int64)

이렇게 수정하였다.

다시 학습 시도하니 잘 된다!
(mip-nerf 360 data 학습 끝난후에는 다시 처음으로 되돌려 놓았다.)

(참고)mip-nerf 360 dataset을 nerfacto로 학습하려면

ns-process-data images --data ./data/Mip-NeRF_360/room/images --output-dir ./data/nerfstudio/room --skip-colmap --colmap-model-path E:/NeRF/data/Mip-NeRF_360/room/sparse/0/
이 명령어로 data에 transforms.json 파일을 만들어 줘야한다. transforms파일 생성 성공!


zipnerf로 학습한 모델도 export하고싶은데

ns-export poisson --load-config outputs/conference-room/zipnerf/2024-03-19_112807/config.yml --output-dir exports/mesh/conference-room/zipnerf/ --target-num-faces 50000 --num-pixels-per-side 2048 --num-points 1000000 --remove-outliers True --normal-method open3d --use_bounding_box False --obb_center 0.0000000000 0.0000000000 0.0000000000 --obb_rotation 0.0000000000 0.0000000000 0.0000000000 --obb_scale 1.0000000000 1.0000000000 1.0000000000

⛔get_rgba_image가 없다니요?

NotImplementedError: get_rgba_image is not implemented for model ZipNerfModel

zipnerf 모델은 아직 구현되지 않았다구요?
git issues에도 최근 질문(24.03.19 수정기점 3주전)으로 올라와있지만 해결책은 없는듯하다.

profile
환경구성을 헤매는 히치하이커를 위한 안내서

0개의 댓글