One-2-3-45:单图转3D网格,45秒生成无需逐形状优化

[NeurIPS 2023] Official code of "One-2-3-45: Any Single Image to 3D Mesh in 45 Seconds without Per-Shape Optimization"

分支1Tags0
文件最后提交记录最后更新时间
3 年前
2 年前
3 年前
3 年前
2 年前
2 年前
2 年前
3 年前
3 年前
2 年前
2 年前
2 年前
2 年前
2 年前
2 年前

One-2-3-45 对如何利用二维扩散模型进行三维AIGC进行了创新性思考,提出了一种新颖的仅前向范式,避免了耗时的优化过程。

最新动态

[2023年11月14日]
请查看我们的新工作 One-2-3-45++!

[2023年10月25日]
我们发布了用于评估的渲染脚本以及无痛推理的API。

[2023年9月21日]
One-2-3-45 被 NeurIPS 2023 接受。我们在新奥尔良见!

[2023年9月11日]
已发布训练代码。

[2023年8月18日]
发布了推理代码。

[2023年7月24日]
我们的演示达到HuggingFace的前四热门,并在本周 Spaces 中被推荐!特别感谢HuggingFace支持这个演示!

[2023年7月11日]
在线交互式演示发布!只需45秒即可探索并创建您自己的3D模型!

[2023年6月29日]
阅读我们的论文。[链接]

安装

硬件需求:一张内存大于等于18 GB 的NVIDIA GPU(例如RTX 3090或A10)。已在Ubuntu上测试。

提供两种环境设置方法:

传统安装

步骤1:安装Debian包。

sudo apt update && sudo apt install git-lfs libsparsehash-dev build-essential

步骤2:创建并激活conda环境。

conda create -n One2345 python=3.10
conda activate One2345

步骤3:克隆仓库至本地机器。

# 确保已安装git-lfs。
git lfs install
git clone https://github.com/One-2-3-45/One-2-3-45
cd One-2-3-45

步骤4:使用pip安装项目依赖项。

# 确保CUDA版本与PyTorch匹配。
# 示例:CUDA 11.8的安装
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run
export PATH="/usr/local/cuda-11.8/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH"
# 安装PyTorch 2.0.1
pip install --no-cache-dir torch==2.0.1 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
# 安装依赖项
pip install -r requirements.txt
# 安装 inplace_abn 和 torchsparse
export TORCH_CUDA_ARCH_LIST="7.0;7.2;8.0;8.6+PTX"  # CUDA架构。根据您的硬件进行修改。
export IABN_FORCE_CUDA=1
pip install inplace_abn
FORCE_CUDA=1 pip install --no-cache-dir git+https://github.com/mit-han-lab/torchsparse.git@v1.4.0

步骤5:下载模型检查点。

python download_ckpt.py

Docker镜像安装

选项1:拉取并运行(包含完整环境和检查点)。(~22.3G)

# 拉取包含完整仓库的Docker镜像。
docker pull chaoxu98/one2345:demo_1.0
# 运行容器会自动启动一个互动演示。
# 将为您提供类似XXXXXXX.gradio.live的公共URL。
docker run --name One-2-3-45_demo --gpus all -it chaoxu98/one2345:demo_1.0

选项2:仅环境安装。(~7.3G)

# 拉取包含所有项目依赖项的Docker镜像。
docker pull chaoxu98/one2345:1.0
# 启动名为One2345的Docker容器。
docker run --name One-2-3-45 --gpus all -it chaoxu98/one2345:1.0
# 在容器中获取bash shell。
docker exec -it One-2-3-45 /bin/bash
# 克隆仓库到本地机器。
git clone https://github.com/One-2-3-45/One-2-3-45
cd One-2-3-45
# 下载模型检查点。
python download_ckpt.py
# 查看入门指南进行推断。

开始(推理)

首次运行需要更长的时间来编译模型。

每张图像的预期时间成本:在NVIDIA A6000上约40秒。

# 1. 命令脚本
python run.py --img_path PATH_TO_INPUT_IMG --half_precision

# 2. 交互式演示(Gradio),带有友好的Web界面
# 输出将提供一个URL
# 本地:127.0.0.1:7860;公共:XXXXXXXX.gradio.live
cd demo/
python app.py

# 3. Jupyter笔记本
example.ipynb

APIs

我们提供了便捷的Gradio APIs,以轻松预处理现实世界或文本生成的图像,并从中重建3D网格。

开始,用API URL初始化Gradio客户端。
from gradio_client import Client
client = Client("https://one-2-3-45-one-2-3-45.hf.space/")
# 示例输入图像
input_img_path = "https://huggingface.co/spaces/One-2-3-45/One-2-3-45/resolve/main/demo_examples/01_wild_hydrant.png"

单图转3D网格

generated_mesh_filepath = client.predict(
	input_img_path,	
	True,		# 图像预处理
	api_name="/generate_mesh"
)

高度估计

如果输入图像的角度(高度)未知,则可以使用此现成算法!

elevation_angle_deg = client.predict(
	input_img_path,
	True,		# 图像预处理
	api_name="/estimate_elevation"
)

图像预处理:分割、缩放和重新定位

我们采用了Segment Anything模型(SAM)进行背景移除。

segmented_img_filepath = client.predict(
	input_img_path,	
	api_name="/preprocess"
)

训练自己的模型

数据准备

我们使用Objaverse-LVIS数据集进行训练,并使用Blender将选定形状(具有CC-BY许可)渲染为2D图像。

下载训练图像。

从这里下载所有One2345.zip.part-*文件(总共5个文件),然后使用以下命令将其合并为一个.zip文件:

cat One2345.zip.part-* > One2345.zip

解压缩训练图像zip文件。

使用以下命令将zip文件解压缩到您指定的目录(YOUR_BASE_FOLDER):

unzip One2345.zip -d YOUR_BASE_FOLDER

下载元文件。

从这里下载One2345_training_pose.json和lvis_split_cc_by.json并将它们放在训练图像相同的目录(YOUR_BASE_FOLDER)内。

您的文件结构应如下所示:

# One2345是之前步骤中的基目录

One2345
├── One2345_training_pose.json
├── lvis_split_cc_by.json
└── zero12345_narrow
    ├── 000-000
    ├── 000-001
    ├── 000-002
    ...
    └── 000-159
    

训练设置

在配置文件./reconstruction/confs/one2345_lod_train.conf中,指定trainpath、valpath和testpath为数据准备步骤中使用的YOUR_BASE_FOLDER,然后运行以下命令:

cd reconstruction
python exp_runner_generic_blender_train.py --mode train --conf confs/one2345_lod_train.conf

实验日志和检查点将保存在./reconstruction/exp/目录下。

相关工作

引用

如果您发现我们的代码对您的研究或项目有帮助,请引用我们的论文:

@article{liu2023one2345,
  title={One-2-3-45: 从单张图像到3D网格,无需逐模型优化,在45秒内完成},
  author={刘明华, 徐超, 贾海安, 陈凌浩, Varma T, 慕昆德, 徐泽祥, 苏皓},
  journal={神经信息处理系统进展},
  volume={36},
  year={2024}
}

请注意,原文中的论文标题和作者列表保持原样,未做中文翻译调整,以确保准确性。

项目介绍

官方代码:《一键快速转换:任意单张图片至三维网格,45秒内完成,无需逐形状优化》【此简介由AI生成】

定制我的领域
701.72 K103访问 GitHub