Text2CAD: Generating Sequential CAD Designs from Beginner-to-Expert Level Text Prompts
May 15, 2025 · View on GitHub
Text2CAD: Generating Sequential CAD Designs from Beginner-to-Expert Level Text Prompts
Mohammad Sadil Khan* · Sankalp Sinha* · Talha Uddin Sheikh · Didier Stricker · Sk Aziz Ali · Muhammad Zeshan Afzal
*equal contributions
NeurIPS 2024 (Spotlight 🤩)
⚙️ Installation
🌍 Environment
- 🐧 Linux
- 🐍 Python >=3.9
📦 Dependencies
$ conda env create --file environment.yml
✅ Todo List
- Release Data Preparation Code
- Release Training Code
- Release Inference Code
📊 Data Preparation
Download the DeepCAD data from here.
Generate Vector Representation from DeepCAD Json
You can also download the processed cad vec from here.
$ cd CadSeqProc
$ python3 json2vec.py --input_dir $DEEPCAD_JSON --split_json $TRAIN_TEST_VAL_JSON --output_dir $OUTPUT_DIR --max_workers $WORKERS --padding --deduplicate
Download the text annotations from here. Download the preprocessed training and validation data and place it in Cad_VLM/dataprep folder.
🚀 Training
In the Cad_VLM/config/trainer.yaml, provide the following path.
Required Updates in yaml
cache_dir: The directory to load model weights from Huggingface.cad_seq_dir: The root directory that contains the ground truth CAD vector.prompt_path: Path for the text annotation.split_filepath: Json file containing the UIDs for train, test or validation.log_dir: Directory for saving logs, outputs, checkpoints.checkpoint_path(Optional): For resuming training after some epochs.
$ cd Cad_VLM
$ python3 train.py --config_path config/trainer.yaml
🤖 Inference
For Test Dataset
In the Cad_VLM/config/inference.yaml, provide the following path. Download the checkpoint for v1.0 here.
Required Updates in yaml
cache_dir: The directory to load model weights from Huggingface.cad_seq_dir: The root directory that contains the ground truth CAD vector.prompt_path: Path for the text annotation.split_filepath: Json file containing the UIDs for train, test or validation.log_dir: Directory for saving logs, outputs, checkpoints.checkpoint_path: The path to model weights.
$ cd Cad_VLM
$ python3 test.py --config_path config/inference.yaml
Run Evaluation
$ cd Evaluation
$ python3 eval_seq.py --input_path ./output.pkl --output_dir ./output
For Random Text Prompts
In the Cad_VLM/config/inference_user_input.yaml, provide the following path.
Required Updates in yaml
cache_dir: The directory to load model weights from Huggingface.log_dir: Directory for saving logs, outputs, checkpoints.checkpoint_path: The path to model weights.prompt_file(Optional): For single prompt ignore it, for multiple prompts provide a txt file.
For single prompt
$ cd Cad_VLM
$ python3 test_user_input.py --config_path config/inference_user_input.yaml --prompt "A rectangular prism with a hole in the middle."
For Multiple prompts
$ cd Cad_VLM
$ python3 test_user_input.py --config_path config/inference_user_input.yaml
💻 Run Demo
In the Cad_VLM/config/inference_user_input.yaml, provide the following path.
Required Updates in yaml
cache_dir: The directory to load model weights from Huggingface.log_dir: Directory for saving logs, outputs, checkpoints.checkpoint_path: The path to model weights.
$ cd App
$ gradio app.py
👥 Contributors
Our project owes its success to the invaluable contributions of these remarkable individuals. We extend our heartfelt gratitude for their dedication and support.
✍🏻 Acknowledgement
We thank the authors of DeepCAD and SkexGen and acknowledge the use of their code.
📜 Citation
If you use this dataset in your work, please consider citing the following publications.
@inproceedings{text2cad,
author = {Khan, Mohammad Sadil and Sinha, Sankalp and Sheikh, Talha Uddin and Stricker, Didier and Ali, Sk Aziz and Afzal, Muhammad Zeshan},
booktitle = {Advances in Neural Information Processing Systems},
editor = {A. Globerson and L. Mackey and D. Belgrave and A. Fan and U. Paquet and J. Tomczak and C. Zhang},
pages = {7552--7579},
publisher = {Curran Associates, Inc.},
title = {Text2CAD: Generating Sequential CAD Designs from Beginner-to-Expert Level Text Prompts},
url = {https://proceedings.neurips.cc/paper_files/paper/2024/file/0e5b96f97c1813bb75f6c28532c2ecc7-Paper-Conference.pdf},
volume = {37},
year = {2024},
bdsk-url-1 = {https://proceedings.neurips.cc/paper_files/paper/2024/file/0e5b96f97c1813bb75f6c28532c2ecc7-Paper-Conference.pdf}}