티스토리 뷰

Research (연구 관련)

NeuralBody setting

홍돌 2021. 5. 16. 21:10

Installation 

conda create -n neuralbody python=3.7
conda activate neuralbody

# make sure that the pytorch cuda is consistent with the system cuda
# e.g., if your system cuda is 10.0, install torch 1.4 built from cuda 10.0
pip install torch==1.4.0+cu100 -f https://download.pytorch.org/whl/torch_stable.html

pip install -r requirements.txt

이 부분에서 나중에 버그가 없으려면 정확히 1.4.0+cu100을 깔아주는 게 중요한 듯하다. 재영이도 그렇고 다른 깃헙이슈에서도 버전문제 때문인지 후에 spconv 설치할 때 문제가 생기는 듯하다. 현재 시스템의 cuda version은 nvcc --version을 통해 확인할 수 있으며, nvidia-smi에 나오는 cuda version과는 별개다. 참고 CUDA는 NVIDIA GPU의 parallel computing을 잘 활용하는 NVIDIA에서 만든 API 같은 것으로 이해하고 있는데, NVIDIA 공식 홈페이지에서는 하나의 플랫폼이란다. (뭔 차이인지?) 쨌든 CUDA에는 두 개의 버전이 있는데, 하나는 runtime때 쓰는 거고, 하나는 gpu driver와 연관된거란다. 각설하고 뭔가 설치할 때 실제로 참조하는 버전은 runtime 때 쓰는 것이다. 참고로 내가 원래 알기로는 pytorch를 install할 때 시스템과 다른 runtime CUDA를 깔아도 상관없다. pytorch 코드 돌릴 때 pytorch install할 때 같이 다운로드 된 CUDA를 참조하도록 프로그래밍 되어있기 때문이다. 하지만 여기서는 저자가 주석으로 버전을 맞추라고 한 이유가 있을 것이다. (아마 뒤에 설치할 spconv때문에)

nvcc --version

위의 커맨드를 쳤을 때 에러가 나거나 아무것도 안 나온다면, nvidia cuda toolkit을 안 깔았거나 잘못 깐것이다. 나는 예전에 깔아뒀어서 자세한 방법은 기억 안 나지만 구글링 하거나, 이 링크에서 다운받으면 될 것 같다. 자 이제 진짜 문제다.

# install spconv
cd
git clone https://github.com/traveller59/spconv --recursive
cd spconv
git checkout abf0acf30f5526ea93e687e3f424f62d9cd8313a
export CUDA_HOME="/usr/local/cuda-10.0"
python setup.py bdist_wheel
cd dist
pip install spconv-1.2.1-cp36-cp36m-linux_x86_64.whl

 

내가 이걸 따라할 때 에러가 나오는 위치는 'python setup.py bdist_wheel' 였다. 참고로 짜잘한 module 미설치 문제들은 안 중요하니까 안 적을 것이다. 아무튼 가장 먼저 문제가 된 것은 cmake version. cmake version이 내 서버 시스템에서는 3.5였는데, 최소 3.13이 되어야 한단다. 이 분의 포스트를 그대로 따라하니 무사히 업데이트가 됐다. 아 참고로 OpenSSL을 찾을 수 없다는 에러가 cmake 업데이트 도중 나올 수 있는데, 그 패키지가 없어 나오는 에러이니 (높은 확률로), 밑의 커맨드로 설치하면 된다.

sudo apt-get install libssl-dev

 

다시  'python setup.py bdist_wheel'를 했을 때 

Could NOT find CUDNN (missing: CUDNN_LIBRARY_PATH CUDNN_INCLUDE_DIR)

이런 에러들이 나왔다. bashrc에 path 설정해보고 난리부르슬 췄는데, 알고보니 cudnn이 안 깔려있었다. 이 stackoverflow thread의 Martin Thomas씨가 말한 방법을 통해 문제를 해결했다.


update 2021.05.27: .deb 파일을 받지말고, cuda for linux를 받은 다음, 아래처럼 파일 옮기면된다.

tar -xf cudnn-10.0.-linux-x64~~~.tgz
cd cuda/
sudo cp -rf include/* /usr/local/cuda-10.0/include/
sudo cp -rf lib64/* /usr/local/cuda-10.0/lib64/

old: 2021.5.16: 단 step1에서 직접 cudnn 파일 압축풀고 하는 것보다 dkpg command를 활요하라. 나는 그래야 됐다. 그리고 당신도 그래야 실수가 없을듯. 우선 step1에 적힌대로 nvidia에 account를 만들고 https://developer.nvidia.com/rdp/cudnn-archive 여기서 본인 시스템에 맞는 cudnn .deb 파일을 다운받는다. nvcc --version했을 때 cuda-10.0을 쓰고 있다면 cudnn7.5를 다운받아야 한다. cuda 버전과 cudnn 버전 매칭 테이블을 구글링하면 나올 것이다. 아무튼 나는 'python setup.py bdist_wheel' 했을 때도 cudnn7.5를 detect했다나 뭐라나 그런 에러메시지가 나와서 cudnn7.5를 다운받았는데, 중요한 것은 Runtime 버전과 Dev 버전을 둘 다 다운받아야 한다는 것이다. Runtime만 가지고 진행했을 때 오류가 생겼었다. 

이 두 .deb 파일을 다운받은 다음 이 방법대로 cudnn을 설치해야 한다. 이 stackoverflow thread의 step2가 이 방법 바로 위에 Tar 파일 압축풀고 어쩌고 하는 것인데, cudnn버전마다 파일명과 위치가 제각각이라 실수할 가능성이 큰 듯하다.  

sudo dpkg -i libcudnn7_x.x.x-1+cudax.x_arm64.deb
sudo dpkg -i libcudnn7dev_7.x.x.x-1+cudax.x_amd64.deb

암튼 위의 커맨드를 실행하면 /usr/local/cuda-10.0/include에 cudnn.h가 생겨있을 것이다. 이 뒤에 다시 cd spconv부터 다시쭉해줬는데 아무 에러가 생기지 않았다. 혹시 '/usr/local/cuda/lib64/libnvToolsExt.so' 어쩌구 에러가 생긴다면 /usr/local/cuda-10.0 에 softlink된 /usr/local/cuda 를 만들어두라. 권장되진 않지만, spconv 패키지의 코드가 그렇게 짜여 있어 어쩔수없는듯하다.


Run demo codes 

People-snapshot에 데모 돌리기. 이 것도 설명이 충분치 않아 잘 안됐다. 커밋기록을 뒤져보기도 하고 그랬는데, 코드를 계속 업데이트 중이라 그런지 안 맞는 부분들이 있다.

우선 people snapshot 데이터와 pretrained model weight을 다운받은 다음 directory를 아래 사진과 같이 맞춰준다.

그 다음 people snapshot 데이터를 preprocess해줘야 하는데, smpl model pkl파일들은 ${ROOT}/에 위치시키고, python tools/preprocess_snapshot.py를 하면 female-3-casual데이터에 대한 npy파일들이 ${ROOT}/data/people_snapshot/female-3-casual/vertices/에 생성된다. 

그 다음에 첫번째 데모 코드를 돌리기 전에 ${ROOT}/lib/datasets/light_stage/snapshot_demo.py를 약간고쳐줘야한다.

python run.py --type visualize --cfg_file configs/snapshot_f3c_demo.yaml exp_name female3c render_views 144

snapshot_fc3_demo.yml을 쓰면 데이터로더 파일로 snapshot_demo.py를 쓰면 ply파일을 로드하도록 되어있는데, 황당하게도 preprocess과정에서 ply파일은 나오지 않는다. 대신 mesh vertex coordinate (6890x3)만 저장하는 npy를 생성하는데 바로 snapshot.py가 npy파일을 로드하도록 되어있다. 그래서 prepare_input부분을 다음과 같이 고쳐줘야한다. nxyz vector는 일단 이 데모코드에서는 안 쓰이는 듯하다.

    def prepare_input(self, i, index):
        # # read xyz, normal, color from the ply file
        # ply_path = os.path.join(self.data_root, 'smpl', '{}.ply'.format(i))
        # xyz, nxyz = if_nerf_dutils.get_smpl_data(ply_path)

        # read xyz, normal, color from the npy file
        vertices_path = os.path.join(self.data_root, 'vertices', '{}.npy'.format(i))
        xyz = np.load(vertices_path).astype(np.float32)
        nxyz = np.zeros_like(xyz).astype(np.float32)
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함