windows에서 3D Gaussian Splatting 사용하기

판다다·2024년 3월 22일
0

🔴환경 만들기

미리 깔아둔것

CUDA 11.8
CUDNN 8.7.0
GCC 11.2
GitHub Desktop
CloudCompare
FFmpeg
COLMAP
(nerfstudio 게시글 참고)

ImageMagik 설치

  1. imagemagik 홈페이지에서 7.1.1-windows-x64 버전 다운로드
  2. 실행파일로 설치
  3. 환경변수 path에 등록(설치 시 자동등록)되어있는지 확인

git clone하고 Anaconda Prompt 들어가서 환경 생성

git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive
cd gaussian-splatting
SET DISTUTILS_USE_SDK=1
conda env create --file environment.yml
conda activate gaussian_splatting

환경 생성하는 명령에서 에러

error: legacy-install-failure 이 위에도 어마무시한 에러들이 있다...
대충 submodules의 diff-gaussian-rasterization와 simple-knn을 설치하는데 실패했다는 에러다.

git issues 참고해서
conda activate gaussian_splatting
conda install -c conda-forge vs2022_win-64
conda env update --file environment.yml
했더니 잘 설치되었다!


🟠내 data로 학습하기

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

먼저 gaussian-splatting폴더에 data폴더를 만들고 그 안에 내 object폴더들을 생성해 관리한다.
(ex)E:\NeRF\3DGS\gaussian-splatting\data\conference-room)

이미지 추출

conference-room폴더에 내가 촬영한 회의실 동영상을 넣고, ffmpeg으로 영상에서 이미지를 추출한다.
cd data/conference-room
ffmpeg -i E:\NeRF\3DGS\gaussian-splatting\data\conference-room\conference-room2.mp4 -qscale:v 1 -qmin 1 -vf fps=2 ./input/%04d.jpg

colmap으로 학습가능한 형태로 만들기

cd ../..
python convert.py -s data/conference-room
그럼 이런 형태로 나온다.
input폴더가 내가 동영상에서 뽑아낸 이미지 전체로 396장이 들어있고, images폴더가 colmap 결과로 카메라 pose를 찾은 이미지같은데 215장이 나왔다.

--resize를 추가하면 이렇게 2, 4, 8배로 작아진 이미지가 추가된다.

내가 만든 data로 학습하기

python train.py -s data/conference-room -m output/conference-room
잘 학습되었다!

viewer로 확인하기

공식gitPre-built Windows Binaries 메뉴에서 viewer.zip을 다운받은 후 압축풀고 viewer폴더 자체를 gaussian-splatting폴더 안으로 이동한다.

SIBR_gaussianViewer_app.exe파일 실행
cd viewers/bin
SIBR_gaussianViewer_app.exe -m E:/NeRF/3DGS/gaussian-splatting/output/conference-room
viewer를 조절해가며 확인할 수 있다.


🟡TRIPS 사용하기

공식 git 따라하며 환경설정하기

소프트웨어 요구사항인 VS2022, CUDA 11.8, Cudnn, conda가 다 깔려있기 때문에 바로

git clone부터 시작

git clone https://github.com/lfranke/TRIPS.git
cd TRIPS
git submodule update --init --recursive --jobs 8

conda 환경 생성

conda update -n base -c defaults conda
conda create -y -n trips python=3.9.7
conda activate trips

conda install -y cmake=3.26.4
conda install -y -c intel mkl=2024.0.0
conda install -y -c intel mkl-static=2024.0.0
conda install openmp=8.0.1 -c conda-forge

libtorch 설치

libtorch 파일(cu116) 다운받고 압축풀고 libtorch폴더 자체를 TRIPS/External/폴더 안으로 이동시켰다.

Compile TRIPS

난 anaconda prompt를 사용중이니 이 명령어 사용해서 configure
cmake -Bbuild -DCMAKE_CUDA_COMPILER="%CUDA_PATH%\bin\nvcc.exe" -DCMAKE_PREFIX_PATH=".\External\libtorch" -DCONDA_P_PATH="%CONDA_PREFIX%" -DCUDA_P_PATH="%CUDA_PATH%" -DCMAKE_BUILD_TYPE=RelWithDebInfo .

설정끝나면 컴파일 시작
cmake --build build --config RelWithDebInfo -j

컴파일 실패

error MSB3073: :VCEnd" 명령이 종료되었습니다(코드: 1). [E:\NeRF\3DGS\TRIPS\build\src\apps\train.vcxproj] 이 위에도 차마 다 캡처해오지 못한 긴긴 빨간 에러들...

git issues를 보니 이건 내 버전에 맞지않는 libtorch를 설치했기 때문에 제대로 컴파일하지 못한것같다.
다시 libtorch 파일(cu118)의 압축을 풀고 아까 다운받은 libtorch 폴더를 대체한다.

그리고 환경도 git issues와 똑같이 설치해줬다.

conda install -c conda-forge absl-py=2.1.0 aiohttp=3.9.3 aiosignal=1.3.1 assimp=5.2.5 async-timeout=4.0.3 attrs=23.2.0 blinker=1.7.0 blis=0.9.0 boost-cpp=1.78.0 brotli-python=1.1.0 bzip2=1.0.8 ca-certificates=2024.2.2 cachetools=5.3.3 cffi=1.16.0 charset-normalizer=3.3.2 click=8.1.7 cmake=3.26.4 colorama=0.4.6 cryptography=42.0.5 doxygen=1.10.0 freeglut=3.2.2 freeimage=3.18.0 frozenlist=1.4.1 gettext=0.21.1 gflags=2.2.2 glew=2.1.0 glog=0.5.0 google-auth=2.28.1 google-auth-oauthlib=0.4.6 grpcio=1.46.3 idna=3.6 imath=3.1.10 importlib-metadata=7.0.1 intel-openmp=2024.0.2 jxrlib=1.1 lcms2=2.16 lerc=4.0.0 libblas=3.9.0 libcblas=3.9.0 libdeflate=1.19 libffi=3.4.2 libglib=2.68.4 libiconv=1.17 libjpeg-turbo=3.0.0 liblapack=3.9.0 libpng=1.6.43 libprotobuf=3.13.0.1 libraw=0.21.1 libtiff=4.6.0 libuv=1.44.2 libwebp-base=1.3.2 libzip=1.10.1 libzlib=1.2.13 llvm-openmp=8.0.1 lz4-c=1.9.4 markdown=3.5.2 markupsafe=2.1.5 mkl=2024.0.0 mkl-include=2024.0.0 mkl-static=2024.0.0 multidict=6.0.5 numpy=1.26.4 oauthlib=3.2.2 openexr=3.2.2 openjpeg=2.5.2 openmp=8.0.1 openssl=3.2.1 pcre=8.45 pkg-config=0.29.2 pkgconfig=1.5.5 protobuf=3.13.0.1 pyasn1=0.5.1 pyasn1-modules=0.3.0 pycparser=2.21 pyjwt=2.8.0 pyopenssl=24.0.0 tensorboard=2.8.0 tensorboard-data-server=0.6.1 tensorboard-plugin-wit=1.8.1 typing-extensions=4.10.0 typing_extensions=4.10.0 urllib3=2.2.1 vc=14.2 vc14_runtime=14.36.32532 vs2015_runtime=14.36.32532 werkzeug=3.0.1 wheel=0.41.2 win_inet_pton=1.1.0 xz=5.4.6 yarl=1.9.4 zipp=3.17.0 zlib=1.2.13 zstd=1.5.5

다시 configure부터 입력하고 컴파일하면 성공~!

잘 build했는지 확인하기

미리 학습해둔 자료를 다운받아서 viewer로 확인해본다.

보충자료 링크에서 tt_scenes.ziptt_checkpoints.zip을 다운받아 압축해제한다.
tt_scenes폴더안에 있는 모든 폴더들을 TRIPS/scenes/폴더 안으로, tt_checkpoints폴더안에 있는 모든 폴더들을 TRIPS/experiments/폴더 안으로 이동한다.

viewer 실행

E:/NeRF/3DGS/TRIPS/build/bin/RelWithDebInfo/viewer.exe --scene_dir scenes/tt_train
일단 미리 학습된 자료로 viewer를 실행하는데 성공했다.
환경설정은 된 것 같으니 내 data로 학습 시도한다.

내 data로 학습하기

colmap으로 data를 학습가능한 형태로 만들기

scenes폴더 README를 읽어보니 colmap을 이용해 내 data를 학습가능한 형태로 만들어야 한다.

E:/NeRF/3DGS/TRIPS/scenes/ 경로에 내 object 폴더를 생성하고 그 안에 이미지들이 담긴 images 폴더가 있다.

먼저 prompt에서 colmap gui을 입력해 colmap을 키고 Automatic reconstruction 메뉴에 들어가 workspace 폴더, image 폴더를 설정한다. Run버튼을 누르면 log에서 진행상황을 볼 수 있고, 설정해둔 workspace 폴더에 sparse, dense 폴더가 생성된다.

이제 colmap2adop을 실행한다.
E:/NeRF/3DGS/TRIPS/build/bin/RelWithDebInfo/colmap2adop.exe --sparse_dir scenes/llff_room/sparse/0/ --image_dir scenes/llff_room/images/ --point_cloud_file scenes/llff_room/dense/0/fused.ply --output_path scenes/llff_room/ --scale_intrinsics 1 --render_scale 1

⛔fused.ply 파일이 없다.

dense 폴더는 생기는데 fused.ply 가 생성되지 않았다... 그래서 colmap2adop을 실행해도 실패함.

gaussian-splatting 실행할때 만들어둔 data엔 points3D.ply 가 있다.
그래서 gaussian-splatting 학습할때 사용하는 data를 다 긁어 오고 colmap2adop를 실행했지만...

⛔windows엔 cp명령어가 없다구

'cp'은(는) 내부 또는 외부 명령, 실행할 수 있는 프로그램, 또는 배치 파일이 아닙니다. File: E:\NeRF\3DGS\TRIPS\src\apps\colmap2adop.cpp:139 에서 copy failed로 끝난다.
리눅스에서만 사용할 수 있게 코드가 짜여있다.

git issues를 보니 Git Bash가 필요하다.

미완성(colmap2adop 부터 다시해야함)

학습하기

E:/NeRF/3DGS/TRIPS/build/bin/RelWithDebInfo/train --config configs/train_normalnet.ini --TrainParams.scene_names llff_room --TrainParams.name llff_room

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

0개의 댓글