본문 바로가기
3D-GS

[코드 빌드] Dream Gaussian : Image to 3D, Text to 3D

by xoft 2023. 11. 15.

DREAMGAUSSIAN: GENERATIVE GAUSSIAN SPLATTING FOR EFFICIENT 3D CONTENT CREATION, Jiaxiang Tang, arXiv2023

 

이번엔 좀 웃으면서 글 작성했습니다. DreamGaussian의 Text to 3D와 Text to 2D를 실행해봤습니다.

 

이번글에서는 이미지 1장만으로 춤추게 생명력을 불어 넣는 과정을 소개하겠습니다. 논문 리뷰는 이전글 참조 바랍니다. Dreamgaussian 공식 github 을 참고해서 작성했습니다.

 

 

실행 환경

우분투 22.04를 권장하고 있는데, 어떻게든 되겠지하고 집에 설치된 우분투 18.04로 진행했더니, python main.py단계에서 glibc 2.29를 설치하지 못해서 실패했습니다.

최종적으로 windows10에서 CUDA 12.1과 conda를 사용해서 설치했습니다. (※ 회사에선 conda license필요합니다!)

논문에 GPU 8G RAM으로 충분하다고 되어 있습니다. 저는 12GB RAM을 가진 rtx 3060을 사용했습니다. 실제적으로 제가 빌드해본 과정에 메모리는 4GB만 쓰여졌습니다.

 

 

셋팅 명령어

conda 환경 셋팅 + 코드 다운 받기 + 라이브러리 설치

conda create -n dreamgaussian python=3.9
conda activate dreamgaussian
git clone https://github.com/dreamgaussian/dreamgaussian.git
cd dreamgaussian
pip install -r requirements.txt

git clone --recursive https://github.com/ashawkey/diff-gaussian-rasterization
pip install ./diff-gaussian-rasterization

pip install ./simple-knn  # simple-knn
pip install git+https://github.com/NVlabs/nvdiffrast/  # nvdiffrast
pip install git+https://github.com/ashawkey/kiuikit  # kiuikit

※ 설치시 발생한 에러와 해결책 대해서는 하단에 적어두었습니다. 참고 바랍니다.

 

발생한 에러와 해결방안

실행시 에러가 없었다면 넘어가도 됩니다.

전 pytorch가 cuda를 못잡길레 아래 명령어를 추가로 실행했습니다.

에러 메시지 : "No CUDA runtime is found" 

해결 방안 :https://pytorch.org/get-started/locally/ 에서 맞는 옵션 선택. 저의 경우 아래 명령어 사용했습니다.

conda install pytorch torchvision torchaudio pytorch-cuda=12.1 -c pytorch -c nvidia

 

main.py에서 있었던 에러였습니다.

에러 메시지 : "ImportError: cannot import name 'COMMON_SAFE_ASCII_CHARACTERS' from 'charset_normalizer.constant' (C:\xxxx\envs\dreamgaussian\lib\site-packages\charset_normalizer\constant.py)"

해결 방안 (link)

pip install chardet 
pip install charset-normalizer==2.1.0

 

 

실행 결과 - Image to 3D

Guassian Splating + Mesh Extraction : 총75초 (모델 학습 시간 57초, 그 외 17초)

Texture Refinement : 총 48초 (모델 학습 시간 30초, 그 외 18초)

 

1. 온라인의 배경 제거 사이트(link)에서 배경을 제거하고 가운데 위치시켰습니다. 손까지 따져서 추가로 수작업으로 진행했습니다.

 

2. 아래 명령어를 입력하면, 

# 원하는 image를 data폴더에 tube.jpg 위치시킴
python process.py data/tube.jpg --size 512
python main.py --config configs/image.yaml input=data/tube_rgba.png save_path=tube
python main2.py --config configs/image.yaml input=data/tube_rgba.png save_path=tube mesh=logs/tube_mesh.obj

 

아래와 같이 만들었습니다. 가장 오른쪽 이미지는 제가 blender에서 캡처했습니다.

오리처럼 부리가 앞으로 나오고, 없던 꼬리가 생겼습니다. 머리 중간중간에 꺼진 부분이 있습니다. Stable Diffusion모델엔 tube인형이 없을테니 실제 오리의 형상을 갖고와서 적용한 것을 볼 수 있습니다. 신기하게도 z volume을 예상해서 둥근 타원 형태로 만들었습니다. 내부를 살펴봤을 땐, 안쪽엔 장기와 뇌가 생겼습니다.... 서비스 관점에선 만족스럽진 못하지만, 기술적으로 봤을 땐 정면사진 1장만으로 보이지 않는 Mesh와 Texture까지 만들다니 엄청난 결과입니다. 

 

여기까지가 논문을 사용한 부분입니다. 이 뒷부분부터는 제가 재미로 작업해봤습니다.

 

3. 춤을 추기엔 너무 손과 발이 짧아서, blender에서 x,z축의 scale도 0.5로  줄이고, 강제로 팔/다리를 늘여줬습니다. 

 

4. texture 포함해서 fbx로 export합니다.

 

5. adobe의 Mixamo link에 fbx를 업로드하고, 팔,다리 위치를 설정해줍니다.

 

실행 결과입니다. 만들면서 엄청 웃었습니다ㅎㅎㅎㅎㅎㅎ

 

 

실행 결과 - Text to 3D

아래 명령어를 입력하면,

python main.py --config configs/text.yaml prompt="a photo of an icecream" save_path=icecream
python main2.py --config configs/text.yaml prompt="a photo of an icecream" save_path=icecream

 

Guassian Splating + Mesh Extraction : 모델 학습 시간 3분 15초

Texture Refinement : 모델 학습 시간 57초

a photo of an icecream a photo of a bicycle with a basket 1번째) a sunny side up egg
2번째) a fried egg


egg는 아래 이미지를 기대하는데, 안만들어지네요..  못생겨서 작게 만들었습니다.

Text to 3D는 퀄리티가 좋지 않습니다.

 

MVDream을 활용하는 가이드가 더 있습니다. 아래 명령어로 코드셋팅하다가, dreamgaussian code에서 에러가 떠서 추가 진행하지 않았습니다. 글 작성기준 MVDream plugin기능을 얼마전에 업데이트 했네요.

git clone https://github.com/bytedance/MVDream.git
move MVdream/mvdream mvdream
pip install open-clip-torch
python main.py --config configs/text_mv.yaml prompt="a photo of an icecream" save_path=icecream

## 에러 메시지 ##
File "C:\xxx\dreamgaussian\gs_renderer.py", line 237, in extract_fields
    mn, mx = xyzs.amin(0), xyzs.amax(0)
IndexError: amin(): Expected reduction dim 0 to have non-zero size.

 

 

 

Closing..

위에서 언급했다시피 기술적으로 보면 성능이 좋고, 서비스적으로 보면 아직 갈길이 많네요. 곧 속도가 더 빠르고 퀄리티가 높은 모델이 나올 것이라 생각됩니다. 앞으로 갖고 놀 재밌는게 많이 나올 것 같습니다!

댓글