Magic123
从单张照片生成高质量3D物体的AI工具,ICLR 2024论文,融合2D与3D扩散先验实现精细纹理重建
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
从单张照片生成高质量3D物体的AI工具,ICLR 2024论文,融合2D与3D扩散先验实现精细纹理重建
加载项目详情…
本应用为开源项目,仅供学习研究,请遵守其开源协议。
想象你是一位游戏设计师,看到一张钢铁侠的剧照,只需要把照片丢给程序,几十分钟后就能得到一个可以360度旋转观察、带有精细纹理贴图的3D模型——这不是科幻,而是 Magic123 已经实现的能力。
Magic123 是由 KAUST(阿卜杜拉国王科技大学)联合 Snap Inc. 和牛津大学 的研究团队开发的论文官方 PyTorch 实现,发表于人工智能顶级会议 ICLR 2024。它的核心任务是:从单张 2D 图像,重建出高质量、可直接用于下游应用的 3D 物体。

图1:Magic123 将单张输入图像(左上)转换为高质量3D物体(中右),支持多视角渲染和纹理贴图
传统的 3D 建模依赖专业设计师手工操作,或依赖昂贵的 3D 扫描设备。而 2022 年 Google 提出的 DreamFusion 开创性地用 2D 扩散模型(Stable Diffusion)来做 3D 生成,但存在两个核心问题:
后续的 Zero-1-to-3 提出了 3D 扩散先验(通过微调 Stable Diffusion 学习多视角条件),在一定程度上改善了 3D 一致性,但纹理质量依然不足。
Magic123 的创新之处在于:同时融合 2D 和 3D 扩散先验,取长补短。
Magic123 采用了 coarse-to-fine(粗到细)两阶段生成管线,每个阶段都同时使用 2D 扩散先验(Stable Diffusion)和 3D 扩散先验(Zero-1-to-3):
使用 神经辐射场(NeRF) 作为 3D 表征,对象在空间中被建模为一个连续的颜色+密度场。通过以下方式约束优化:

图2:Magic123 粗阶段训练收敛过程,展示 NeRF 逐步学习 3D 结构
将 NeRF 的粗略几何转换为 可微四面体网格(DMTet) 表示,继续精细化:
--lambda_guidance 1e-3 0.01)提升纹理质量.obj / .ply 格式)和纹理贴图导出Magic123 的核心超参数是 2D 先验强度(lambda_2d):
lambda_guidance 1.0 40)Magic123 的代码架构基于 Stable-DreamFusion,主要模块:
| 核心文件 | 功能 |
|---|---|
main.py | 入口:两阶段训练主循环、命令行参数解析 |
gradio_app.py | Gradio Web UI:图像上传、参数配置、进度展示 |
dpt.py | MiDaS 深度估计模型封装 |
optimizer.py | 自定义优化器封装 |
preprocess_image.py | 前景分割 + 深度图生成预处理 |
meshutils.py | 网格处理工具(TSDF、Mesh refinement) |
encoding.py | 特征编码器(Hash Encoding 等) |
子目录按功能划分:
guidance/:2D(SD)和 3D(Zero-1-to-3)扩散先验实现nerf/:NeRF 渲染管线ldm/:Stable Diffusion 潜在扩散模型taming/:VAE 编解码器render/:不同渲染器(NeRF、DMTet)taichi_modules/:Taichi 加速的光线步进核心依赖生态:PyTorch + diffusers + accelerate + pytorch-lightning + xatlas + PyMCubes + nvdiffrast
git clone https://github.com/guochengqian/Magic123
cd Magic123
bash install.sh # 自动创建 venv + 安装依赖
安装脚本会配置 CUDA 架构列表(V100: 7.0, A100: 8.0)、安装 PyTorch 和所有 Python 依赖。
# Zero-1-to-3 3D 先验 (~2GB)
cd pretrained/zero123
wget https://huggingface.co/cvlab/zero123-weights/resolve/main/105000.ckpt
# MiDaS 深度估计
mkdir -p pretrained/midas
cd pretrained/midas
wget https://github.com/isl-org/MiDaS/releases/download/v3_1/dpt_beit_large_512.pt
# 预处理:前景分割 + 深度估计
python preprocess_image.py --path data/demo/a-full-body-ironman/main.png
# 粗阶段(~40分钟)
CUDA_VISIBLE_DEVICES=0 python main.py -O --text "A high-resolution DSLR image of a full body ironman" --sd_version 1.5 --image data/demo/a-full-body-ironman/rgba.png --workspace out/magic123-coarse --guidance SD zero123 --lambda_guidance 1.0 40 --save_mesh
# 细阶段(~20分钟)
CUDA_VISIBLE_DEVICES=0 python main.py -O --dmtet --init_ckpt out/magic123-coarse/checkpoints/... --lambda_guidance 1e-3 0.01 --save_mesh
python gradio_app.py
启动 Gradio 界面,可上传图像、配置参数、查看进度。
cd docker
docker build -t magic123 .
docker run --gpus all -v $(pwd)/data:/app/data magic123
Textual Inversion 非常耗时:默认模式需要约 2.5 小时(V100 32GB),对普通用户不友好。论文也承认,对于知名物体(如钢铁侠)可跳过,因为通用文本已包含足够信息。
GPU 显存要求高:官方推荐 V100 32GB,A100 更佳。RTX 3090(24GB)可能在精细阶段 OOM。
前景分割依赖:如果分割错误(背景误判为前景),会影响生成质量。
仅限物体级 3D:不支持场景级 3D 重建(室内场景、城市街景等)。
生成速度慢:完整流程约 1 小时,即使是快速模式也需要约 1 小时,不适合交互式应用。
Magic123 被多个后续项目直接引用或集成:
GitHub 1622 stars(截至分析时),说明其在学术和工业界都有显著影响力。它证明了 2D+3D 联合先验 是 Image-to-3D 任务的有效范式,为后续的 Researchdy3D、One-2-3-45 等工作奠定了基础。
作为 ICLR 2024 论文,Magic123 代表的趋势是:利用大规模预训练扩散模型的通用能力,降低 3D 内容创作的门槛。随着扩散模型能力的持续提升和多视角数据规模的扩大,单图 3D 重建的质量和速度都将持续改善。
| 项目 | 内容 |
|---|---|
| 论文 | ICLR 2024 |
| 作者 | KAUST + Snap Inc. + Oxford |
| 核心方法 | 2D+3D 联合扩散先验 + Coarse-to-fine |
| 基础框架 | Stable-DreamFusion (PyTorch) |
| 主要依赖 | diffusers, nvdiffrast, tiny-cuda-nn, DMTet |
| 显存需求 | 32GB VRAM (V100/A100) |
| 生成时间 | 粗 |
| 输出格式 | .obj/.ply + 纹理贴图 |
| 许可证 | Apache-2.0 |
报告基于 GitHub 仓库 v1.0(main 分支)及 ICLR 2024 论文《Magic123: One Image to High-Quality 3D Object Generation Using Both 2D and 3D Diffusion Priors》生成。