EVA3D: Compositional 3D Human Generation from 2D Image Collections
EVA3D는 2D 이미지 컬렉션에서 고품질 3D 사람 생성 모델이다.
ICLR 2023에서 Spotlight도 받았다고 하니, 한번 사용해서 아바타를 만들어볼 것이다.
(지금까지 했던 환경 구축중에서 제일 오래 걸린 것 같다.. ㅎㅎ)
conda create --name eva3d python=3.8
conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=10.1 -c pytorch
EVA3D 에서 제공해주는 명령어이다.
하지만 나의 컴퓨터 환경에는 CUDA 버전이 11.1이다. 해당 버전 을 확인하는 명령어는 다음과 같다.
그래서 EVA3D 에서 제공해준 명령어를 수정해야한다. 수정된 명령어는 아래와 같다.conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
cudatoolkit을 11.1이 아닌 11.0을 사용한 이유는 11.1은 지원해주지않기 때문이다. 그리고 아래 명령어를 이용하여 pytorch 와 cuda 가 서로 호환되는지 확인해주면 된다.
conda install -c fvcore -c iopath -c conda-forge fvcore iopath
conda install pytorch3d -c pytorch3d
pip install -r requirements.txt
python download_models.py
python download_datasets.py
bash scripts/train_deepfashion_512x256.sh
Commands를 이용해서 해당 명령어를 실행할 경우, 학습이 된다.
하지만 해당 파일을 열어볼 경우 GPU를 8대 사용한다고 저장되어있다. 아래 명령어를 실행하여 자신의 GPU 개수를 파악한 뒤, 수정하자.
이제 다시 Commands를 실행하면 또 다른 문제가 발생할 것이다. (아마 거의 무조건)
바로 GPU 메모리가 부족하다는 것이다. 해당 문제는 학습을 하는 옵션을 변경하면 해결된다. 해당 방법은 깃허브 이슈에 올라와있는 내용을 참고하여 수정했다.
MASTER_PORT=$((12000 + $RANDOM % 20000))
NUM_GPU=2
set -x
python -m torch.distributed.launch --nproc_per_node ${NUM_GPU} --master_port=${MASTER_PORT} train_deepfashion.py --batch 1 --chunk 1 --expname train_deepfashion_512x256 --dataset_path datasets/DeepFashion --depth 5 --width 128 --style_dim 128 --renderer_spatial_output_dim 512 256 --input_ch_views 3 --white_bg --r1 300 --voxhuman_name eva3d_deepfashion --random_flip --eikonal_lambda 0.5 --small_aug --iter 1000000 --adjust_gamma --gamma_lb 20 --min_surf_lambda 1.5 --deltasdf --gaussian_weighted_sampler --sampler_std 15 --N_samples 28
MASTER_PORT=$((12000 + $RANDOM % 20000))
NUM_GPU=2
set -x
python -m torch.distributed.launch --nproc_per_node ${NUM_GPU} --master_port=${MASTER_PORT} train_deepfashion.py --batch 1 --chunk 1 --expname train_deepfashion_256x128 --dataset_path datasets/DeepFashion --depth 4 --width 64 --style_dim 64 --renderer_spatial_output_dim 256 128 --input_ch_views 3 --white_bg --r1 300 --voxhuman_name eva3d_deepfashion --random_flip --eikonal_lambda 0.5 --small_aug --iter 1000000 --adjust_gamma --gamma_lb 20 --min_surf_lambda 1.5 --deltasdf --gaussian_weighted_sampler --sampler_std 15 --N_samples 28
이제 문제없이 학습 될 것이다. 학습된 결과는 아래 경로에서 확인가능하다.
학습이 오래 걸려, EVA3D에서 제공해주는 학습된 데이터를 이용해서 추론해보았다.
EVA3D는 친절히 여러가지 데이터셋에 대해서 미리 학습된 데이터를 제공해준다.
나는 학습할때 사용했던 데이터 셋인 deepfashion 데이터셋에 대해서만 기술하겠다.
bash scripts/demo_deepfashion_512x256.sh
해당 명령어를 사용할 경우 아래 경로에 결과가 생성된다.
해당 폴더에는 사진과 같이 3D 모델이 색상에 입혀진 채로 보여진다.
해당 폴더에는 3D 모델의 매쉬가 저장되어있는 obj 파일이 있다.
marching_cubes_meshes_posed 폴더에 있던 obj 파일을 블렌더를 이용하여 확인해본 결과이다.
보는 것과 같이 당연하게도 obj 파일이라 텍스쳐가 보이지않는 모습이다.
텍스쳐를 입힐 수는 없을까 찾아보았는데, 이슈에 글을 발견하였다.
대충 읽어보니, 텍스쳐에 대해서는 뽑아주지 않는 것같다.... ㅠㅠ
EVA3D에서 아바타를 생성해보라고 제공해주는 사이트에서도 이미지에는 텍스쳐가 입혀져있지만 3D 모델은 텍스쳐가 입혀져있지 않는 모습이다...