카테고리 없음

[NeX] 4. NeX코드 데이터셋을 만들어서 돌려보자. - Colmap 설치 및 코드 돌리기

brotoo 2021. 10. 14. 14:54

이제 Colmap 설치에 성공하였고, Nex-code를 제대로 돌릴 수 있는 환경이 만들어졌습니다.

 

결과적으로, 오류 처리를 하나하나 하다보니 명확한 해답을 찾았지요.

 

1. Colmap 설치

https://colmap.github.io/

 

COLMAP — COLMAP 3.7 documentation

About COLMAP is a general-purpose Structure-from-Motion (SfM) and Multi-View Stereo (MVS) pipeline with a graphical and command-line interface. It offers a wide range of features for reconstruction of ordered and unordered image collections. The software i

colmap.github.io

colmap 설치에서 가장 어려웠던 부분은 complie 시키는 것이었습니다.

 

우분투에서 apt-get install colmap 명령어로 설치할 수 있지만, 이것은 GUI 형태의 Colmap을 실행하여 colmap 자체를 사용하는데 도움이 되는 것이고, 실제로 colmap을 사용한 코드를 돌리는데 도움이 되지 않았습니다.

 

nex에서 ccode를 돌리기 위해서 colmap은 필수적으로 사용되어야하는 중간 단계이고, 이를 결과적으로는 해결했습니다.

 

(1,2번은 NeX 용이며,  colmap 설치만 하신다면 그냥 본인의 상태에 맞게 1 번만 설정하시고, 2번은 건너뛰시길 바랍니다. )

 

1) CUDA, CUDA Toolkit, NVIDIA Driver 설정

 - GPU : RTX - 2080Ti (처음에는 GTX1070 2대로 진행하였으나 VRAM 부족 이슈로 2080Ti (11gb) 한 대로 변경하여 진행하였습니다.)

 - NVIDIA는 GPU에 적합한 440 version을 설치하였고, 

 - CUDA version은 10.2 로 하였습니다. (pytorch 이슈로 최신 버전인 11.2는 사용이 불가능합니다.)

 - (CUDA setting은 반드시 10.2에 맞춰서 진행하세요.)  

 

2) CUDA Toolkit에 맞는 pytorch 1.8.0 version 설치

 - CUDA Toolkit 을 사용하기 위해 pytorch 홈페이지에서 1.8.0 version을 10.2에 맞게 설치해주시길 바랍니다.

https://pytorch.org/get-started/locally/

 

PyTorch

An open source machine learning framework that accelerates the path from research prototyping to production deployment.

pytorch.org

3) Anaconda 설치

 - 마지막에 colmap compile을 위하여 Anaconda 설정도 필요합니다.

 - 꼭 vim ~/.bashrc 로 path 설정하는 것 잊지마시길.

https://www.anaconda.com/

 

Anaconda | The World's Most Popular Data Science Platform

Anaconda is the birthplace of Python data science. We are a movement of data scientists, data-driven enterprises, and open source communities.

www.anaconda.com

 

다 설치한 후, nex에서 environment에 따라 nex에 맞는 conda 환경을 만듭니다.

https://github.com/nex-mpi/nex-code

 

GitHub - nex-mpi/nex-code: Code release for NeX: Real-time View Synthesis with Neural Basis Expansion

Code release for NeX: Real-time View Synthesis with Neural Basis Expansion - GitHub - nex-mpi/nex-code: Code release for NeX: Real-time View Synthesis with Neural Basis Expansion

github.com

clone 뜨고 getting started의

 

conda env create -f environment.yml

 

이걸 써서 nex 환경을 만들어줍니다.

 

4) Installation 과정 따라가기

 - CUDA Version은 7.x 이상이면 된다고 하나 대부분 9.x 이상으로 진행합니다. 이는 다른 라이브러리의 세팅때문에 문제가 생길 수 있으므로 꼭 지켜주십시오. (10.2로 추천합니다.)

 

우선 Ubuntu terminal에서 

sudo apt-get install \
    git \
    cmake \
    build-essential \
    libboost-program-options-dev \
    libboost-filesystem-dev \
    libboost-graph-dev \
    libboost-system-dev \
    libboost-test-dev \
    libeigen3-dev \
    libsuitesparse-dev \
    libfreeimage-dev \
    libgoogle-glog-dev \
    libgflags-dev \
    libglew-dev \
    qtbase5-dev \
    libqt5opengl5-dev \
    libcgal-dev

 

를 입력하여 필요한 패키지를 다운받습니다. (여기서 하나라도 오류 생기면 안됩니다.)

 

그리고 16.04 / 18.04 에서는 CMAKE configuration script가 깨지니 CGAL Qt5 패키지를 따로 설치해주세요.

 

sudo apt-get install libcgal-qt5-dev

 

- 여기서 오류가 생기면 (GCAL ~~~하면서 뒤에 나오는 Ceres solver나 COLMAP의 cmake를 통한 compile 과정에서

 

(enabling CGAL~~~~~ 하고 다음에 make[0] error가 뜨니 이러한 경우 qt5 패키지를 clone 떠서 수동으로 설치해야합니다.)

 

다음 여기에서 에러가 많이 발생합니다. installation에서 보면  Ceres Solver의 코드를 곧바로 따라가면 안됩니다. 다른 버전으로 설치해야합니다. (필수!!)

 

sudo apt-get install libatlas-base-dev libsuitesparse-dev
git clone https://github.com/ceres-solver/ceres-solver.git
cd ceres-solver
git reset --hard facb199f3eda902360f9e1d5271372b7e54febe1
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j
sudo make install

 

위의 코드를 사용하십시오. 이 코드가 다른 것은 github에서 1.4.0 version으로 다운그레이드 해서 사용하는 것입니다.

 

colmap의 installation의 코드를 따라가면 colmap compile 과정에서 에러가 발생합니다. 그러므로 꼭 위의 코드를 따라가세요.

 

git reset --hard~~~ 부분이 v1.4.0의 커밋으로 변경하는 부분입니다.

 

아래 코드는 colmap의 installation에 나온 코드입니다. 참고하세요.

 

위의 코드 쓴 다음에 쓰면 중복되니까 이건 쓰지 마세요! 

 

sudo apt-get install libatlas-base-dev libsuitesparse-dev
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver
git checkout $(git describe --tags) # Checkout the latest release
mkdir build
cd build
cmake .. -DBUILD_TESTING=OFF -DBUILD_EXAMPLES=OFF
make -j
sudo make install

 

다음은 COLMAP을 configure하고 compile 하는 과정입니다.

 

git clone https://github.com/colmap/colmap.git
cd colmap
git checkout dev
mkdir build
cd build
cmake ..
make -j
sudo make install

 

 

## 여기서 저의 경우는 make 126 error와 make 127 error가 떴습니다. 이 경우 참고하세요.

 

1) make 126 error 

위의 과정처럼 ceres-solver의 v1.4.0으로 변경해서 설치하니 해결되었습니다.

 

2) make 127 error 

아래의 과정을 통해 conda에서 uninstall 하는 과정을 통해 해결했습니다.

conda uninstall libtiff

 

2. Nex 돌리기

 

저번 포스팅에서 말했듯, NeX는 LLFF 기반입니다. LLFF의 사진에 맞춰서 데이터를 수집해야합니다.

 

주의! 사진을 8분할 했을 때, 프레임의 1/8 정도씩만 움직이면서 찍어야합니다. 그래야 결과물이 잘 나옵니다.

 

https://github.com/Fyusion/LLFF/

 

GitHub - Fyusion/LLFF: Code release for Local Light Field Fusion at SIGGRAPH 2019

Code release for Local Light Field Fusion at SIGGRAPH 2019 - GitHub - Fyusion/LLFF: Code release for Local Light Field Fusion at SIGGRAPH 2019

github.com

다시 등장한 아조시

 

그 후, data 폴더 안에 폴더를 생성하고, 그 안에 이미지를 집어넣으세요

cd nex-code
cd data
cd mkdir test
cd mkdir images

 이렇게 만들어진 images 폴더 안에 사진을 다 집어넣고 runs 안에도 모델을 저장할 수 있게 동일한 이름의 test를 집어넣어줍니다.

(다른 이름으로 하고 train할 떄 model_dir를 바꿔줘도 되긴하는데, 그냥 헷갈리니 이렇게 하세요.)

cd nex-code
cd runs
mkdir test

nex-code 폴더에서 이렇게 해서 돌려주면 됩니다.

layer, sublayer hidden layer를 수정해준 것인데, 2080Ti 급 이하라면 무조건 이렇게 하시면 됩니다.

(더 좋은 30 대 GPU에 VRAM 빵빵한거로 NVLink로 여러대를 묶어서 VRAM이 넘쳐나지않는 한.. 이렇게 쓰세요.)

python train.py -scene data/test -model_dir test -http -layers 12 -sublayers 6 -hidden 256

 

혹시 VRAM이 많으시다면, 아래 코드로 학습 하시면 됩니다. layer가 18 sublayer 12인가..로 default 값이 설정되어있습니다. 

parameter는 원하시는대로 변경 가능하니, train.py 의 parameter를 참고하세요.

 

python train.py -scene data/test -model_dir test -http -layers 12 -sublayers 6 -hidden 256

 

저는 이제 잘 돌아갑니다.

 

--- 추가적으로 ---

우선적으로 NeX에서 가장 크게 작용하는 문제는 GPUVRAM 부족 이슈입니다.

GPU자원을 사용한다면, 대부분 mini-batch size에 따라서 메모리 사용량 결정되는거라, batch 사이즈를 조금 작게하고, epoch을 엄청 증가시키면 비슷하게 나올 수 있습니다.

batch 사이즈가 작을 떄 문제는batch는 계속 랜덤하게 데이터 추출해서 학습시키는건데, 사이즈가 작은 만큼 일반화가 힘들어져서,  학습할때 최적값에 도달하기 힘들 수도 있습니다.

epoch비율은 따로 정해지는거는 없고(빠른 처리를 위해서는 40으로 잡아도 되고 – colab 기준 . 현재 4000으로 잡았습니다. , batch-size는 보통  1, 2, 4, 8, 16 ,32, 64, 128 이렇게 2배수로 증가하고

epoch은 보통은 엄청 크게 잡고(현재4000) 10000 단위까지 올려도 무방합니다. 하지만 실질적으로는 모니터링을 진행하며 최적화된 학습 값을 잡아야하는데, 중간에 early-stop으로 loss가 안내려갈때 학습을 끊어주거나, tensorboard val_loss 확인 해주면서, loss가 잘 안내려가면stop하도록 모니터링 하면 됩니다.

 

그럼 파이팅!