本仓库是InstantMesh的官方实现,这是一个基于LRM/Instant3D架构的前向传播框架,用于从单张图像高效生成3D网格。
https://github.com/TencentARC/InstantMesh/assets/20635237/dab3511e-e7c6-4c0b-bab7-15772045c47d
🚩 功能特性和待办事项
- 🔥🔥 发布Zero123++微调代码。
- 🔥🔥 支持在两个GPU上运行gradio演示以节省内存。
- 🔥🔥 支持使用docker运行演示。请参考docker目录。
- 发布推理和训练代码。
- 发布模型权重。
- 发布Hugging Face gradio演示。请在演示链接尝试。
- 增加对更多多视图扩散模型的支持。
⚙️ 依赖项和安装
我们建议使用Python>=3.10
、PyTorch>=2.1.0
和CUDA>=12.1
。
conda create --name instantmesh python=3.10
conda activate instantmesh
pip install -U pip
# 确保安装了Ninja
conda install Ninja
# 安装正确版本的CUDA
conda install cuda -c nvidia/label/cuda-12.1.0
# 安装PyTorch和xformers
# 如果使用不同的PyTorch版本,可能需要安装另一个xformers版本
pip install torch==2.1.0 torchvision==0.16.0 torchaudio==2.1.0 --index-url https://download.pytorch.org/whl/cu121
pip install xformers==0.0.22.post7
# Linux用户:安装Triton
pip install triton
# Windows用户:使用这里提供的预构建Triton版本:
pip install https://huggingface.co/r4ziel/xformers_pre_built/resolve/main/triton-2.0.0-cp310-cp310-win_amd64.whl
# 安装其他依赖项
pip install -r requirements.txt
💫 使用方法
下载模型
我们在模型卡片中提供了4种稀疏视图重建模型变体和一个定制的Zero123++ UNet,用于生成白色背景图像。
我们的推理脚本会自动下载模型。或者,您可以手动下载模型并将它们放在ckpts/
目录下。
默认情况下,我们使用instant-mesh-large
重建模型变体。
启动本地gradio演示
要在本地机器上启动gradio演示,只需运行:
python app.py
如果您的机器上有多个GPU,演示应用程序将自动在两个GPU上运行以节省内存。您也可以强制它在单个GPU上运行:
CUDA_VISIBLE_DEVICES=0 python app.py
或者,您可以使用docker运行演示。请按照docker目录中的说明操作。
使用命令行运行
要通过命令行从图像生成3D网格,只需运行:
python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video
我们使用rembg来分割前景对象。如果输入图像已经有alpha蒙版,请指定no_rembg
标志:
python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video --no_rembg
默认情况下,我们的脚本会导出带有顶点颜色的.obj
网格,如果您希望导出带有纹理贴图的网格(这将花费更长时间),请指定--export_texmap
标志:
python run.py configs/instant-mesh-large.yaml examples/hatsune_miku.png --save_video --export_texmap
如果您希望使用其他重建模型变体,请使用configs目录中的不同.yaml
配置文件。例如,使用instant-nerf-large
模型进行生成:
python run.py configs/instant-nerf-large.yaml examples/hatsune_miku.png --save_video
注意: 使用NeRF
模型变体进行图像到3D生成时,通过指定--export_texmap
导出带有纹理贴图的网格可能会在UV展开步骤中花费较长时间,因为默认的等值面提取分辨率为256
。您可以在配置文件中设置较低的等值面提取分辨率。
💻 训练
我们提供了训练代码以促进未来的研究。但由于数据集的大小,我们无法提供训练数据集。请参考我们的数据加载器了解更多详情。
要训练稀疏视图重建模型,请运行:
# 在NeRF表示上训练
python train.py --base configs/instant-nerf-large-train.yaml --gpus 0,1,2,3,4,5,6,7 --num_nodes 1
# 在Mesh表示上训练
python train.py --base configs/instant-mesh-large-train.yaml --gpus 0,1,2,3,4,5,6,7 --num_nodes 1
我们还提供了Zero123++微调代码,因为这是经常被请求的。运行命令是:
python train.py --base configs/zero123plus-finetune.yaml --gpus 0,1,2,3,4,5,6,7 --num_nodes 1
:books: 引用
如果您发现我们的工作对您的研究或应用有用,请使用以下BibTeX进行引用:
@article{xu2024instantmesh,
title={InstantMesh: Efficient 3D Mesh Generation from a Single Image with Sparse-view Large Reconstruction Models},
author={Xu, Jiale and Cheng, Weihao and Gao, Yiming and Wang, Xintao and Gao, Shenghua and Shan, Ying},
journal={arXiv preprint arXiv:2404.07191},
year={2024}
}
🤗 致谢
我们感谢以下项目的作者对3D生成AI的卓越贡献!
感谢@camenduru实现Replicate演示和Colab演示!
感谢@jtydhr88实现ComfyUI支持!