티스토리 뷰
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 패키지의 코드가 그렇게 짜여 있어 어쩔수없는듯하다.
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)
'Research (연구 관련)' 카테고리의 다른 글
우분투 무선랜카드 (0) | 2021.05.28 |
---|---|
double ssh without passwd (0) | 2021.05.24 |
UserWarning: Matplotlib is currently using agg, which is a non-GUI backend, so cannot show the figure (0) | 2021.05.05 |
camera projection, 3D visualization (0) | 2021.04.06 |
openpose Pytorch code 활용 (0) | 2021.03.15 |
- Total
- Today
- Yesterday
- world coordinate
- 컴퓨터비전
- Pose2Mesh
- 피트니스
- nerf
- camera coordinate
- 인터뷰
- spin
- Virtual Camera
- 헬스
- 머신러닝
- Docker
- Transformation
- 에디톨로지
- 문경식
- VAE
- 2d pose
- pytorch
- nohup
- 비전
- Machine Learning
- demo
- part segmentation
- focal length
- 컴퓨터비젼
- pyrender
- densepose
- deep learning
- Generative model
- Interview
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |