Project Icon

Fantasia3D

文本生成高质量3D模型的方法

Fantasia3D专注于通过分离几何和外观,实现高质量的文本生成3D模型。采用Stable Diffusion技术和Latent-NeRF等方法,提升了几何建模和外观渲染的效果,捕捉高分辨率细节并模拟逼真材质。项目团队定期更新FAQ和指南,提供性能优化建议和解决方案。支持用户定制网格细调,兼容多种3D生成方法,实现多样化和逼真的3D模型。

Fantasia3D: 解耦几何和外观以高质量文本生成3D内容

Rui Chen*, Yongwei Chen*, Ningxin Jiao, Kui Jia

ICCV2023

*共同贡献

论文 | ArXiv | 项目页面 | 补充材料 | 视频

https://user-images.githubusercontent.com/128572637/fe5a05d3-33af-41c4-a5c0-e74485797f08

https://user-images.githubusercontent.com/128572637/691a1c2d-0c55-4b2e-8dd6-82fddc2685a6

https://user-images.githubusercontent.com/128572637/99ab7e61-eb81-4b75-8138-3321b6633d78

https://user-images.githubusercontent.com/128572637/405fe77e-25c0-410f-b463-e1e3ded2f065

更新日志

请拉取最新代码以提高性能!!

  • (2023.10.17)
    • 增加关于官方代码和重现版本threestudio性能的FAQ,即Q8。
  • (2023.10.13)
    • 增加关于过饱和和过平滑外观问题的FAQ,即Q7。
  • (2023.09.01)
    • 注意:添加负提示可以提高外观建模的视觉质量。详见最新的画廊
  • (2023.08.30)
    • 增加两个FAQ。
  • (2023.08.29)
    • 跳过一些几何建模中不必要的材料预测过程,略微减少训练时间。
  • (2023.08.22)
    • 注意:对于网格面数要求不高的情况,建议使用128的DMTet分辨率以平衡质量和生成速度。使用128或更低分辨率时,生成速度会明显加快。
  • (2023.08.20)
    • 注意:不同版本的稳定扩散似乎有不同的性能。在生成头像方面,版本1.5比版本2.1表现更好。
  • (2023.08.11)
    • 修复了一些情况下几何不平滑的bug。
  • (2023.08.06)
    • 增加了提高外观真实感的提示。
  • (2023.08.05)
    • 修复了不同GPU之间种子相同的问题,这可能不会加速收敛。
    • 在代码中增加了直接执行UV填充的部分,因此不需要在blender中进行额外操作。
  • (2023.07.26)
    • 修复了使用切线空间法线的bug。

常见问题

Q1: 关于使用法线图和遮罩图作为稳定扩散模型输入的分析

答案:我们最初的假设是法线图和遮罩图分别代表形状的局部和轮廓信息,可以有助于几何学习。此外,我们观察到法线图的数值范围被归一化为(-1, 1),这与潜空间扩散所需的数据范围一致。我们的实证研究验证了这一假设。进一步支持我们假设的是,在用于训练稳定扩散的LAION-5B数据集中存在法线图(参见网站以检索LAION-5B中的法线数据)。因此,法线数据不被视为稳定扩散的分布外(OOD)输入。为了解决早期学习中粗糙的几何问题,我们直接使用64 × 64 × 4(法线,遮罩)图像作为潜代码,受到Latent-NeRF的启发,以实现更好的收敛。然而,在世界坐标系中不使用VAE编码的法线图可能会导致与VAE训练的潜空间数据分布的不一致。这种不一致可能导致生成的几何偏离文本描述。为了解决这个问题,我们通过随机旋转当前视图渲染的法线图来进行数据增强。这种方法使法线图的分布更接近潜空间数据的分布。我们实验性地观察到它提高了生成几何与文本描述的一致性。随着学习的进展,渲染512 × 512 × 3的高分辨率法线图以捕捉更精细的几何细节变得至关重要,我们选择在后期阶段仅使用法线图。这种策略在几何优化过程中实现了精度和效率的平衡。

Q2: 解耦表示的假设验证分析

答案:之前的方法(例如DreamFusion和Magic3D)将几何和外观生成结合在一起,遵循NeRF。我们采用解耦表示主要是因为生成表面几何和外观的问题性质不同。事实上,当处理从多视图图像中恢复表面几何时,明确考虑表面建模的方法(例如VolSDF,nvdiffrec等)表现更好;我们的解耦表示享有类似于这些方法的优势。解耦表示还使我们能够在外观建模中加入BRDF材料表示,通过BRDF物理先验实现更好地逼真渲染。

Q3: Fantasia3D可以直接调优用户给定的网格吗?

答案:可以,Fantasia3D可以接收用户给定的任何网格并使用我们的方法进行用户引导生成进行调优。它还可以自然地与3D生成方法如shape-e和point-e接口。总之,Fantasia3D可以基于用户给定的低质量网格或椭球生成高度详细和高保真的3D内容。

Q4: 使用官方配置文件时,为什么在使用4或更少的GPU时无法复制相同的结果?

答案:官方配置通常在8个GPU下使用。补充材料中提出的采样算法有助于外观和几何建模中的全球一致性,这需要大批量尺寸。在使用较少的GPU时,总批量大小显著减小,这可能导致无法在官方配置中复制相同的结果。一种可能的解决方案是在配置文件中手动增加批量大小。

Q5: 外观建模中的策略0、 1和2是如何制定的?

答案:策略权重是一个超参数。在DreamFusion中使用的参数,即$\omega(t) =\sigma ^{2}$,是一个随着时间步t增加而增加的方程。这可能适用于体渲染,但不适用于表面渲染。在实践中,我发现使用原始版本的权重会使渲染图像过饱和且缺乏细节和真实感。这可能是由于大t的权重过大引起的。因此,我希望采用随着t增加逐渐减少的权重,所以得到了策略0。至于策略1的提出,我观察到在某些情况下,使用策略0可以产生更逼真的外观,但经常会出现奇怪的颜色。因此,我希望切换到更合适的权重。我随即意识到得分函数本质上是一个指向目标分布的方向梯度,并且它可以随估计噪声转换,所以我提出了策略1,即

 s(z_{t};t) =-\frac{1}{\sigma _{t}}\varepsilon(z_{t};t),

其中$s$是得分函数。在实践中,我观察到它可以有效缓解在与时间步范围[0.02, 0.98]结合使用时出现的奇怪颜色问题。然而,在某些情况下,使用策略1可能会导致不真实的结果,因为小t的权重过大,导致向目标分布的小步,始终处于分布外(OOD)状态。因此,提出了策略2来结合策略0和策略1的优点。

Q6: 如何使生成结果更加多样化?

答案:与基于Nerf的体积渲染不同,直接使用表面渲染生成3D资产可以实现多样化。您只需要在配置文件中更改参数即可实现。例如,不同的"sdf_init_shape_scale","translation_y","camera_random_jitter","fovy_range","negative_text”等可以带来不同的结果。

Q7: Fantasia3D能否生成没有过饱和和过平滑的逼真外观? 回答:是的,可以。单独使用原始的SDS损失结合消极提示和Fantasia3D中提出的策略2,就足以解决过度饱和和过度平滑的问题。Sweetdreamer中的DMTet画廊的外观是使用Fantasia3D中的外观建模代码生成的。你可以看到,所有的结果都高度详细,并且没有过度饱和和过度平滑的问题。我认为关键在于解耦表示以及采用了消极提示和策略2。推荐的消极提示是“影子,过度饱和,低质量,不现实”。推荐的积极提示是“单反相机拍摄的...”。

问题8官方代码和threestudio重现版本之间有什么区别?

回答:在几何建模方面,官方代码具有更强的泛化能力,更稳定的训练过程和更平滑的几何形状。在外观建模方面,官方代码没有过度饱和和过度平滑的问题,并且具有目前最先进的文本到纹理生成性能,如问题7所述。

你想要什么?

考虑到参数调优可能需要一些经验,请告诉我你想要生成什么样的对象?请在问题区随意发言。我会花一些时间实现一些需求,并更新相应的配置文件,以方便你的重现。

对Fantasia3D的贡献

首先,使用这个网站将gif转换为视频,包括几何或外观,并将其上传到画廊。写下生成对象的文本,性能,几何建模的四面体的分辨率,以及外观建模采用的策略。

随后,在configs目录下上传配置文件。如果你要上传用户引导生成的文件,指导网格也应上传到data目录下。文件的命名规则如下:

对于零样本几何建模的文件:

{文本关键词}_geometry_zero_shot_{gpu数量}_gpu.json

对于用户引导几何建模的文件:

{文本关键词}_geometry_user_guided_{gpu数量}_gpu.json

对于外观建模的文件:

{文本关键词}_appearance_strategy{采用的策略}_{gpu数量}_gpu.json

安装

  • 系统要求:Ubuntu20.04
  • 测试的GPU:RTX3090,RTX4090,A100,V100

我们提供了两种安装环境的选择。

  • (选项1)使用requirements.txt文件逐个安装所有包。由于某些包的复杂性,可能会失败。

    pip install torch==1.12.1+cu113 torchvision==0.13.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
    pip install -r requirements.txt
    
  • (选项2)使用Docker镜像在Ubuntu系统下快速部署环境。

    docker pull registry.cn-guangzhou.aliyuncs.com/baopin/fantasia3d:1.0
    

    (可选)由于网络延迟,该Docker镜像中未安装xformers包。创建Docker容器后手动安装,以加速几何和外观建模的训练。

    pip install git+https://github.com/facebookresearch/xformers.git@main#egg=xformers
    

环境成功部署后,克隆Fantasia3D的库并开始。

git clone https://github.com/Gorilla-Lab-SCUT/Fantasia3D.git
cd Fantasia3D

开始

论文中的所有结果都使用8块3090 GPU生成。我们不能保证少于8块GPU可以达到相同的效果。

  • 零样本生成
# 多GPU训练
...
# 使用8块GPU进行几何建模
python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/car_geometry.json
# 使用4块GPU进行几何建模
python3 -m torch.distributed.launch --nproc_per_node=4 train.py --config configs/car_geometry.json
# 使用8块GPU进行外观建模
python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/car_appearance_strategy0.json
# 使用4块GPU进行外观建模
python3 -m torch.distributed.launch --nproc_per_node=4 train.py --config configs/car_appearance_strategy0.json
...
# 单GPU训练(只在菠萝上测试)。 
# 几何建模。在3090 GPU上大约需要15分钟。
python3  train.py --config configs/pineapple_geometry_single_gpu.json
# 外观建模。在3090 GPU上大约需要15分钟。
python3  train.py --config configs/pineapple_appearance_strategy0_single_gpu.json
  • 用户引导生成
# 多GPU训练
...
# 使用8块GPU进行几何建模
python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/Gundam_geometry.json
# 使用4块GPU进行几何建模
python3 -m torch.distributed.launch --nproc_per_node=4 train.py --config configs/Gundam_geometry.json
# 使用8块GPU进行外观建模
python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/Gundam_appearance.json
# 使用4块GPU进行外观建模
python3 -m torch.distributed.launch --nproc_per_node=4 train.py --config configs/Gundam_appearance.json
...
# 单GPU训练
# 几何建模(未测试)
python3  train.py --config configs/Gundam_geometry.json 
# 外观建模(未测试)
python3  train.py --config configs/Gundam_appearance.json

提示

  • (两者) 训练更长时间。 训练更长时间可能有助于细节的提高。你可以通过设置参数"iter"来延长训练时间。

  • (两者) 更大的批量大小。 更大的批量大小可以帮助更快地收敛。相应的参数是"batch"。

  • (两者) 尝试不同的种子。 不同的种子可以带来多样的结果。

  • (两者) 缩放对象。 增加初始化对象在视野=45屏幕中的比例可以增强几何和外观建模的质量。对于几何建模,它可以获得更多的局部几何细节。对于外观建模,这种方法可以减少出现饱和或奇怪颜色的概率,因为它减少了图像中背景颜色的比例。我们发现,如果背景颜色的比例太高,容易导致饱和和奇怪的颜色。

  • (几何建模) 提供目标形状的比例先验。 你可以将默认的半径为1的球体缩放为椭球体。例如,如果你想生成“由奶酪制成的车”,可以使椭球体在z轴上的半径更大。

    "mode": "geometry_modeling",
    "sdf_init_shape": "ellipsoid",
    "sdf_init_shape_scale": [0.56, 0.56, 0.84]
    

    有些情况椭球体不能提供比例先验,例如生成某些动物时,使用椭球体初始化容易导致生成的动物有多个脚。可使用以下命令检查:

    python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/elephant_geometry_fail_multi_face.json 
    

    相反,你可以使用四足动物的草图形状作为比例先验来生成任何你想要的动物形状。

    python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/elephant_geometry_succeed.json
    

    在其他情况中,如生成类似人类的形体,可以使用人类草图形状。

    python3 -m torch.distributed.launch --nproc_per_node=8 train.py --config configs/Gundam_geometry.json
    
  • (几何建模) 增加早期阶段的迭代次数。 早期阶段对于创造一个粗略且正确的形状非常关键。后期阶段只注重获得更精细的几何细节,所以整体形状不会有显著变化。如果你发现几何形状的轮廓不符合文本描述,可以增加参数"coarse_iter"的次数。

  • (几何建模) 使用更高的四面体分辨率。 在对网格面的数量要求不高的情况下,我推荐使用128的DMTet分辨率,以在质量和生成速度之间取得平衡。当使用128或更低分辨率时,生成速度显著加快。更高的分辨率能带来更多的局部几何细节。你可以通过将参数"dmtet_grid"的值修改为128或256来轻松改变分辨率。如果你发现在使用256分辨率时网格快速消失或分散,将SDS损失的指导权重从默认的100减少到50。据我的经验,单个GPU适合使用128分辨率而不是256。如果你想在256分辨率下获得高细节模型,多GPU训练是必要的。此外,对于明显具有方向性的物体,如人头雕像,多GPU效果比单GPU要好得多。顺便提一下,使用梯度累积技术可能可以使单个GPU达到多GPU的效果,但我还没有测试过。

  • (几何建模) 在早期阶段使用不同的时间步长范围。 我们通常在早期阶段使用时间步长范围[0.02,0.5]。但在某些情况下,如果你想基于初始化形状“生长”更多部件,可能无法生成所有部件。例如,文本“一个骑马的宇航员”可能无法在使用[0.02, 0.5]范围内“生长”宇航员部分,因为较低的时间步长对显著变形贡献较少。为了解决这个问题,我们建议使用较高的范围,例如[0.4, 0.6]。你可以尝试不同的范围并在问题中发布你的发现。

  • (几何建模) 旋转物体。 根据实际情况旋转物体可以缓解janus问题或帮助网络寻找模式。例如,在生成人头雕像时,将初始化的椭球体绕x轴旋转一些角度,以匹配人物后脑勺有一定曲率的情况。

  • (几何建模) 微调输入网格。 在用户引导生成任务下,如果你对输入网格的轮廓满意,只想增加几何细节,可以将参数“coarse_iter”设置为400。此设置将直接进入几何建模的后期阶段,以加强输入形状的局部几何细节。

  • (外观建模) 采用不同策略。 我们通过设置参数“sds_weight_strategy”提供三种策略(0 或 1 或 2)来优化外观。策略0会有更强的光影变化,表现出更逼真的最终外观。策略1或策略2的最终外观会更平滑、更舒适。如果目标外观过于简单,例如“一个细节丰富的西奥多罗斯·科洛科特罗尼斯石膏像”、“一个站立的大象”和“米开朗基罗风格的雕像正在看手机新闻的狗狗”,使用策略0可能会导致外观过饱和和颜色奇怪。在这种情况下,策略1或策略2比策略0能生成更自然的颜色。

    策略0可以按以下方式使用:

    "sds_weight_strategy": 0,
    "early_time_step_range": [0.02, 0.98],
    "late_time_step_range": [0.02, 0.5]
    

    "sds_weight_strategy": 0,
    "early_time_step_range": [0.02, 0.98],
    "late_time_step_range": [0.02, 0.98]
    

    策略1可以按以下方式使用:

    "sds_weight_strategy": 1,
    "early_time_step_range": [0.02, 0.98],
    "late_time_step_range": [0.02, 0.7]
    

    "sds_weight_strategy": 1,
    "early_time_step_range": [0.02, 0.98],
    "late_time_step_range": [0.02, 0.98]
    

    策略2可以按以下方式使用:

    "sds_weight_strategy": 2,
    "early_time_step_range": [0.02, 0.98],
    "late_time_step_range": [0.02, 0.98]
    
  • (外观建模) 使用不同的HDR环境贴图。 学习PBR材料是一个不适定问题。如果材料和光照一起学,会增加学习的难度。因此,我们使用固定的HDR光来优化外观。我们注意到,亮度分布均匀的HDR贴图(如多云天)有利于外观颜色的均匀性。一些不均匀的亮度分布可能会产生更逼真的效果(未经测试)。

  • (外观建模) 使用一些附加提示。 使用一些附加提示,例如“一个单反相机拍摄的 {你的文本},黑色背景”,可以在大多数情况下提高外观的真实性(但不是所有情况)。

  • (外观建模) 添加负面提示。 设置适当的负面提示可以提高外观建模中的视觉质量。

坐标系统

演示

你可以在Google drive 下载并观看一些演示的训练过程。 更多演示请参见这里

https://user-images.githubusercontent.com/128572637/e3e8bb82-6be0-42d0-9da3-1e59664354dd

https://user-images.githubusercontent.com/128572637/856c12bf-f100-47fc-a22c-80f123bd0a6d

https://user-images.githubusercontent.com/128572637/5872edbf-f87f-4dfe-9f71-f3941b84b8d7

https://user-images.githubusercontent.com/128572637/17ce275c-26bc-482e-ab61-a61f442de458

https://user-images.githubusercontent.com/128572637/a0d6fe70-b055-44a9-a34d-1449672dca7f

https://user-images.githubusercontent.com/128572637/ed0c303c-7554-4589-a1f5-56c9c1916aef

https://user-images.githubusercontent.com/128572637/c9867d8e-8e61-4a09-afd2-5599d6a85074

https://user-images.githubusercontent.com/128572637/01b1cc2c-5c5f-478a-83d0-1dd0ae2ee9e2

https://user-images.githubusercontent.com/128572637/0a909afb-e18c-4450-8ac8-35d50ced754a

https://user-images.githubusercontent.com/128572637/dcc5c159-fc3e-4eb8-9017-72153196f5b4

https://user-images.githubusercontent.com/128572637/244950828-21956cae-e6c4-42ce-89cd-a912c271de51.mp4

https://user-images.githubusercontent.com/128572637/244950909-0eb363f6-9bf3-4553-9090-fd1fd0003d67.mp4

https://user-images.githubusercontent.com/128572637/af266a61-afd4-451b-b4b8-89e77e96233e

https://user-images.githubusercontent.com/128572637/c0a09f43-c07f-43e9-ab9f-c49aa3bc3e2c

https://user-images.githubusercontent.com/128572637/0071b97a-93ce-4332-9f80-a3297b54f8c3

https://user-images.githubusercontent.com/128572637/27d2bce3-f126-4f91-9bcd-1199563618e8

https://user-images.githubusercontent.com/128572637/4c3e3783-2297-4b52-b67d-3c5cff4db4f4

https://user-images.githubusercontent.com/128572637/5d8f7b7f-141d-4800-8772-8fc132522390

https://user-images.githubusercontent.com/128572637/3e23c5f1-31d8-49a8-9013-123a6e97ac3b

https://user-images.githubusercontent.com/128572637/162adc7d-a416-49e5-8dde-73590119b1a9

https://user-images.githubusercontent.com/128572637/2b20a978-df20-4150-b272-5dac58d64908

待办事项

  • 发布代码。(2023.06.15)
  • 支持单GPU训练的梯度累积技术。
  • 支持由ProlificDreamer提出的VSD损失。

致谢

引文

@InProceedings{chen2023fantasia3d,
  author={Chen, Rui and Chen, Yongwei and Jiao, Ningxin and Jia, Kui},
  title={Fantasia3D: Disentangling Geometry and Appearance for High-quality Text-to-3D Content Creation},
  booktitle={Proceedings of the IEEE/CVF International Conference on Computer Vision (ICCV)},
  month={October},
  year={2023},
  pages={22246-22256}
}
项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号