MeshAnything V2:
基于邻接网格标记化的
艺术家级网格生成
陈艺文1,
王一凯2*,
罗逸豪3,
王正一2,
陈子龙2,
朱军2,
张驰4*,
林国升1*
*通讯作者
1南洋理工大学,
2清华大学,
3帝国理工学院,
4西湖大学
目录
安装
我们的环境已在Ubuntu 22、CUDA 11.8和A800上测试过。
- 克隆我们的仓库并创建conda环境
git clone https://github.com/buaacyw/MeshAnythingV2.git && cd MeshAnythingV2
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
使用
邻接网格标记化和反标记化的实现
# 我们在adjacent_mesh_tokenization.py中发布了邻接网格标记化的实现。
# 反标记化请查看MeshAnything/models/meshanything_v2.py中的adjacent_detokenize函数
python adjacent_mesh_tokenization.py
文本/图像到艺术家级网格。我们建议先使用Rodin将文本或图像转换为密集网格。然后将密集网格输入给我们。
# 将Rodin的输出obj文件放入rodin_result文件夹,然后使用以下命令生成艺术家级网格。
# 我们建议使用--mc标志首先用行进立方体算法预处理输入网格。这有助于我们将推理点云对齐到我们的训练域。
python main.py --input_dir rodin_result --out_dir mesh_output --input_type mesh --mc
网格命令行推理
重要说明:如果您的网格输入不是由行进立方体算法生成的,我们建议您先用行进立方体算法预处理网格(只需添加--mc)。
# 文件夹输入
python main.py --input_dir examples --out_dir mesh_output --input_type mesh
# 单文件输入
python main.py --input_path examples/wand.obj --out_dir mesh_output --input_type mesh
# 先用行进立方体算法预处理
python main.py --input_dir examples --out_dir mesh_output --input_type mesh --mc
# mc分辨率默认为128。对于一些精细的网格,这个分辨率可能不够。提高这个分辨率会增加预处理时间,但应该能获得更好的结果。
# 通过以下方式更改:--mc_level 7 -> 128 (2^7),--mc_level 8 -> 256 (2^8)。
# 256分辨率行进立方体示例。
python main.py --input_dir examples --out_dir mesh_output --input_type mesh --mc --mc_level 8
点云命令行推理
# 注意:如果您想使用自己的点云,请确保包含法线。
# 文件格式应为.npy文件,形状为(N, 6),其中N是点的数量。前3列是坐标,后3列是法线。
# 文件夹推理
python main.py --input_dir pc_examples --out_dir pc_output --input_type pc_normal
# 单文件推理
python main.py --input_path pc_examples/grenade.npy --out_dir pc_output --input_type pc_normal
本地Gradio演示
python app.py
重要说明
- 在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。
致谢
我们的代码基于以下优秀的仓库:
引用
@misc{chen2024meshanythingv2artistcreatedmesh,
title={MeshAnything V2: Artist-Created Mesh Generation With Adjacent Mesh Tokenization},
author={Yiwen Chen and Yikai Wang and Yihao Luo and Zhengyi Wang and Zilong Chen and Jun Zhu and Chi Zhang and Guosheng Lin},
year={2024},
eprint={2408.02555},
archivePrefix={arXiv},
primaryClass={cs.CV},
url={https://arxiv.org/abs/2408.02555},
}