AiuniAI / Unique3D

Official implementation of Unique3D: High-Quality and Efficient 3D Mesh Generation from a Single Image
https://wukailu.github.io/Unique3D/
MIT License
1.96k stars 131 forks source link
3d-aigc aigc image-to-3d

中文版本

日本語版

Unique3D

Official implementation of Unique3D: High-Quality and Efficient 3D Mesh Generation from a Single Image.

Kailu Wu, Fangfu Liu, Zhihan Cai, Runjie Yan, Hanyang Wang, Yating Hu, Yueqi Duan, Kaisheng Ma

Paper | Project page | Huggingface Demo | Gradio Demo | Online Demo

If the Gradio Demo unfortunately hangs or is very crowded, you can use the Online Demo aiuni.ai, which is free to try (get the registration invitation code Join Discord: https://discord.gg/aiuni). However, the Online Demo is slightly different from the Gradio Demo, in that the inference speed is slower, and the generation results is less stable, but the quality of the material is better.

High-fidelity and diverse textured meshes generated by Unique3D from single-view wild images in 30 seconds.

More features

The repo is still being under construction, thanks for your patience.

Preparation for inference

Linux System Setup.

Adapted for Ubuntu 22.04.4 LTS and CUDA 12.1.

conda create -n unique3d python=3.11
conda activate unique3d

pip install ninja
pip install diffusers==0.27.2

pip install mmcv-full -f https://download.openmmlab.com/mmcv/dist/cu121/torch2.3.1/index.html

pip install -r requirements.txt

oak-barry provide another setup script for torch210+cu121 at here.

Windows Setup.

According to issues/15, implemented a bat script to run the commands, so you can:

  1. Might still require Visual Studio Build Tools, you can find it from Visual Studio Build Tools.
  2. Create conda env and activate it
    1. conda create -n unique3d-py311 python=3.11
    2. conda activate unique3d-py311
  3. download triton whl for py311, and put it into this project.
  4. run install_windows_win_py311_cu121.bat
  5. answer y while asking you uninstall onnxruntime and onnxruntime-gpu
  6. create the output folder tmp\gradio under the driver root, such as F:\tmp\gradio for me.
  7. python app/gradio_local.py --port 7860

More details prefer to issues/15.

Interactive inference: run your local gradio demo.

  1. Download the weights from huggingface spaces or Tsinghua Cloud Drive, and extract it to ckpt/*.

    Unique3D
    ├──ckpt
        ├── controlnet-tile/
        ├── image2normal/
        ├── img2mvimg/
        ├── realesrgan-x4.onnx
        └── v1-inference.yaml
  2. Run the interactive inference locally.

    python app/gradio_local.py --port 7860

ComfyUI Support

Thanks for the ComfyUI-Unique3D implementation from jtydhr88!

Tips to get better results

  1. Unique3D is sensitive to the facing direction of input images. Due to the distribution of the training data, orthographic front-facing images with a rest pose always lead to good reconstructions.
  2. Images with occlusions will cause worse reconstructions, since four views cannot cover the complete object. Images with fewer occlusions lead to better results.
  3. Pass an image with as high a resolution as possible to the input when resolution is a factor.

Acknowledgement

We have intensively borrowed code from the following repositories. Many thanks to the authors for sharing their code.

Collaborations

Our mission is to create a 4D generative model with 3D concepts. This is just our first step, and the road ahead is still long, but we are confident. We warmly invite you to join the discussion and explore potential collaborations in any capacity. If you're interested in connecting or partnering with us, please don't hesitate to reach out via email (wkl22@mails.tsinghua.edu.cn).

Citation

If you found Unique3D helpful, please cite our report:

@misc{wu2024unique3d,
      title={Unique3D: High-Quality and Efficient 3D Mesh Generation from a Single Image}, 
      author={Kailu Wu and Fangfu Liu and Zhihan Cai and Runjie Yan and Hanyang Wang and Yating Hu and Yueqi Duan and Kaisheng Ma},
      year={2024},
      eprint={2405.20343},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}