MeshAnythingV2项目部署
该项目部署总体来说,十分顺利!
项目地址: https://github.com/buaacyw/MeshAnythingV2
环境要求:Ubuntu 22、CUDA 11.8
1 基础环境配置
1.拉取源代码
git clone https://github.com/buaacyw/MeshAnythingV2.git && cd MeshAnythingV2
2.创建虚拟环境,配置依赖项目
conda create -n MeshAnythingV2 python==3.10.13 -y
conda activate MeshAnythingV2
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip install -r requirements.txt
pip install flash-attn --no-build-isolation
pip install -U gradio
2 项目运行
1、相邻网格标记化和去标记化的实现(可选,非必须)
# We release our adjacent mesh tokenization implementation in adjacent_mesh_tokenization.py.
# For detokenization please check the function adjacent_detokenize in MeshAnything/models/meshanything_v2.py
python adjacent_mesh_tokenization.py
解释:这些脚本用于实现相邻网格的标记化和去标记化,主要用于模型的训练和研究目的。
对于用户而言,直接使用提供的命令行工具或 Gradio 界面即可完成从文本或图像到艺术家设计网格的生成。
2、有三种输入
- 文本/图像
- 网格mesh
- 点云
文本/图像
对于文本/图像,建议先使用 Rodin将文本或图像实现到密集网格(我理解是obj格式)。然后将密集网格作为输入。
python main.py --input_dir rodin_result --out_dir mesh_output --input_type mesh --mc
参数解释:
–mc 启用 Marching Cubes 算法对输入网格进行预处理。
Marching Cubes 是一种常用于从点云或密集体素生成三角形网格的算法。
它的主要作用是将稀疏网格或点云数据转化为规则的、高质量的三角形网格。
在 MeshAnythingV2 的流程中,建议使用 Marching Cubes 对输入的网格进行预处理,以便与模型的训练数据对齐,生成更好的结果。
–input_dirrodin_result:指定输入网格的目录,新建rodin_result文件夹,目录中应包含 .obj 格式的网格文件。
–out_dir mesh_output:指定输出网格的存储目录。
–input_type mesh:指定输入类型为网格(mesh),而不是其他类型(如点云、图像等)。
网格
重要提示:如果您的网格输入不是由 Marching Cubes 生成的,我们建议您先使用 Marching Cubes 对网格进行预处理(只需添加 --mc)。
# folder input 文件夹包含的所有文件
python main.py --input_dir examples --out_dir mesh_output --input_type mesh
# single file input 一个文件
python main.py --input_path examples/wand.obj --out_dir mesh_output --input_type mesh
# Preprocess with Marching Cubes first 文件夹包含的所有文件 使用mc算法
python main.py --input_dir examples --out_dir mesh_output --input_type mesh --mc
# The mc resolution is default to be 128. For some delicate mesh, this resolution is not sufficient. Raise this resolution takes more time to preprocess but should achieve a better result.
# Change it by : --mc_level 7 -> 128 (2^7), --mc_level 8 -> 256 (2^8).
# 256 resolution Marching Cube example.
python main.py --input_dir examples --out_dir mesh_output --input_type mesh --mc --mc_level 8
参数解释:
–mc_level
设置 Marching Cubes 的分辨率等级,决定生成网格的细节程度。
默认值: --mc_level 7,即分辨率为 128( 2 7 2^7 27)。
更高分辨率:
–mc_level 8,分辨率为 256( 2 8 2^8 28),适用于更细致的网格。
注意: 分辨率越高,预处理时间越长,但细节表现更好。
点云
文件格式应为 .npy 文件,形状为 (N, 6),其中 N 为点的数量。前 3 列是坐标,后 3 列是法向量。
# inference for folder
python main.py --input_dir pc_examples --out_dir pc_output --input_type pc_normal
# inference for single file
python main.py --input_path pc_examples/grenade.npy --out_dir pc_output --input_type pc_normal
参数解释:
–input_path pc_examples/grenade.npy:指定单个输入点云文件的路径。
–out_dir pc_output:指定输出文件存储的目录路径。
–input_type pc_normal:输入类型为带法向量的点云。
结果:
代码会加载单个 .npy 文件进行推理,生成的输出文件存储在 pc_output 目录中。
3 重要说明
在 A6000 GPU 上生成网格大约需要 8GB 和 45 秒(取决于生成网格的面数)。
输入网格将被归一化为单位边界框。输入网格的向上向量应为 +Y,以获得更好的结果。
受计算资源限制,MeshAnything 是在面数少于 1600 的网格上进行训练的,无法生成面数超过 1600 的网格。输入网格的形状应该足够清晰;否则,仅用 1600 个面来表示它将非常困难。因此,前馈 3D 生成方法通常会由于形状质量不足而产生不良结果。我们建议使用 3D 重建、扫描、基于 SDS 的方法(如DreamCraft3D)或Rodin 的结果作为 MeshAnything 的输入。
更多示例请参阅https://huggingface.co/spaces/Yiwen-ntu/MeshAnything/tree/main/examples 。