이 글은 3차원 모델 생성 AI 사용 방법을 간략히 설명한다.
Anything 3D 결과 예시
MeshGPT 예시
설치 준비
CUDA, pytorch, vision 등이 정상 설치되어 있어야 한다. 다음 같이 확인한다.
nvcc --version
pip show torch torchvision torchaudio
다음은 제대로된 CUDA버전의 라이브러리가 설치되지 않은 상황을 보여준다.
다음과 같이 재설치한다.
pip uninstall torch torchvision torchaudio
pip install torch torchvision torchaudio torchdata torchtext --index-url https://download.pytorch.org/whl/cu118
pip show torch torchvision torchaudio
Anything 3D 모델은 NeRF(Neural Radiance Field) 모델을 통해, 단일 렌더링 뷰에서 프롬프트만 통해 모든 대상 개체의 3D 결과를 얻을 수 있다.
실행을 위해서는 다음 링크에서 소스를 다운로드, 패키지 설치 후 사용하면 된다.
실행 결과는 다음과 같다.
MeshGPT
MeshGPT는 Text to Mesh 모델이다. 학습은 Kaggles GPU 서비스를 사용하였다. 학습 데이터는 메쉬 중 250개 미만 삼각형만 있는 모델을 학습에 사용했다. ShapeNet, ModelNet40에서 1184개 모델을 얻고, 나머진 Objaverse에서 데이터 다운로드 프로그램을 이용해 얻었다. 총 13,600개 모델을 15번 증강해 218,000 파일을 얻었다.
4 x P100 GPU를 사용해, 인코더는 30시간 동안 학습, 트랜스포머는 48시간 학습되었다. 매개변수 크기는 인코더 15M, 트랜스포머 141M 혹은 321M이다. 토큰은 186M이다.
관련해 상세한 설명은 다음 링크를 참고한다.
다음과 같이 설치한다.
pip install git+https://github.com/MarcusLoppe/meshgpt-pytorch.git
다음 코드를 실행한다.
import torch
print(f"{'GPU is available: ' + torch.cuda.get_device_name(0) if torch.cuda.is_available() else 'GPU is not available.'}")
from meshgpt_pytorch import (
MeshAutoencoder,
MeshTransformer,
mesh_render
)
device = "cuda" if torch.cuda.is_available() else "cpu"
transformer = MeshTransformer.from_pretrained("MarcusLoren/MeshGPT-preview").to(device)
output = []
output.append((transformer.generate(texts = ['sofa','bed', 'computer screen', 'bench', 'chair', 'table' ] , temperature = 0.0) ))
output.append((transformer.generate(texts = ['milk carton', 'door', 'shovel', 'heart', 'trash can', 'ladder'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['hammer', 'pedestal', 'pickaxe', 'wooden cross', 'coffee bean', 'crowbar'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['key', 'minecraft character', 'dragon head', 'open book', 'minecraft turtle', 'wooden table'], temperature = 0.0) ))
output.append((transformer.generate(texts = ['gun', 'ice cream cone', 'axe', 'helicopter', 'shotgun', 'plastic bottle'], temperature = 0.0) ))
mesh_render.save_rendering(f'./render.obj', output)
결과는 다음과 같다.
학습되지 않은 다른 키워드를 사용하면 다음과 같다.
output.append((transformer.generate(texts = ['bridge chair','computer table', 'chair table'] , temperature = 1) ))
Temperature가 높으면, 적당히 메쉬를 생성하는 것을 알 수 있다.
- Anything-of-anything/Anything-3D: Segment-Anything
- Segment Anything 3D for Point Clouds: Complete Guide | Towards Data Science
- stable-dreamfusion: Text-to-3D & Image-to-3D & Mesh Exportation with NeRF LRM: Large Reconstruction Model for Single Image to 3D
- MeshGPT-preview · Hugging Face
- MeshAnything: From anything to mesh like human artists. Official impl. of "MeshAnything: Artist-Created Mesh Generation with Autoregressive Transformers"
- Search for transformers mesh
- meshgpt-pytorch/meshgpt_pytorch/meshgpt_pytorch.py at main · lucidrains/meshgpt-pytorch
- Multiple stage vector quantization for speech coding | IEEE Conference Publication | IEEE Xplore
- Stacked Quantizers for Compositional Vector Compression (arxiv.org)
댓글 없음:
댓글 쓰기