DStruct2Design: Data and Benchmarks for Data Structure Driven Generative Floor Plan Design

November 22, 2024 ยท View on GitHub

Paper

Our paper is available here

if you use this repository, please cite our work:

@misc{luo2024dstruct2designdatabenchmarksdata,
      title={DStruct2Design: Data and Benchmarks for Data Structure Driven Generative Floor Plan Design}, 
      author={Zhi Hao Luo and Luis Lara and Ge Ya Luo and Florian Golemo and Christopher Beckham and Christopher Pal},
      year={2024},
      eprint={2407.15723},
      archivePrefix={arXiv},
      primaryClass={cs.CL},
      url={https://arxiv.org/abs/2407.15723}, 
}

Getting Started

These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.

Prerequisites

In our paper, we train a LLama3-8B-Instruct model. Training is enabled by llama-receipe. You can either install llama-receipe, or install from requirement.txt

Install with llama-receipe:

pip install llama-recipes

Install from requirement.txt:

pip install -r requirements.txt

Datasets

ProcTHOR

You can download the converted ProcTHOR-10K dataset from here and put it under datasets/procthor_converted/

RPLAN

RPLAN dataset needs to be requested from its homepage.

After it's obtained, save all the data (pngs) under datasets/rplan/. Then run our conversion script to convert it. The converted dataset will be saved under datasets/rplan_converted/:

python scripts/rplan_dataset_convert.py

Pretrained Weights

The pretrained PEFT LoRA weights for all of our models can be obtained:

Weights for 4 model variants trained on RPLAN

https://drive.google.com/file/d/1cAYlEupNUGJefNdwkNaaq7fD3X3_P46D/view?usp=sharing

Weights for 3 bubble diagram model variants trained on ProcTHOR

https://drive.google.com/file/d/16cYPK6g_Ho4VbvjvBZIGHMzNTBWzcAZT/view?usp=drive_link

Weights for 3 constraint only (no bubble diagram) model variants trained on ProcTHOR

https://drive.google.com/file/d/13k-pBmhGhYthm4WbHzrRH7WjaSKNkTpq/view?usp=drive_link

After download, they can be un-compressed and put under their respective folder under models/.

Training

Alternatively, these weights can be trained from scratch with the following command:

to train on ProcTHOR:

python -m llama_recipes.finetuning --use_peft --peft_method lora --quantization --model_name meta-llama/Meta-Llama-3-8B-Instruct --batch_size_training 2 --num_epochs 8 --dataset "custom_dataset" --custom_dataset.file "procthor_dataset.py" --use_wandb False --wandb_config.project "floorplans" --output_dir procthor --exprm $EXPRM_VAR --load_peft False --ds_version $BD_VAR --load_peft False

here $BD_VAR and $EXPRM_VAR indicate the model variants to be trained as explained in Section 6.1 of our paper.

$BD_VAR can be set to either 'bd' or 'non_bd',

$EXPRM_VAR can be set to 'specific', 'mask', or 'preset_mask'

to train on RPLAN:

python -m llama_recipes.finetuning --use_peft --peft_method lora --quantization --model_name meta-llama/Meta-Llama-3-8B-Instruct --batch_size_training 2 --num_epochs 5 --dataset "custom_dataset" --custom_dataset.file "rplan_dataset.py" --use_wandb False --wandb_config.project "floorplans" --output_dir rplan --exprm $EXPRM_VAR$ --load_peft False

for RPLAN, the model variant is decided by just $EXPRM_VAR.

$EXPRM_VAR can be 1 of '5R', '6R', '7R', or '8R'. The differences between these variants are explained in Section 6.1 of our paper.

Inference

To run genneration after the pretrained weights are obtained, do the following:

(note that you can run greedy or sample generations. In our experiments, we use both, and sampling is done with num_samples set to 20).

To run generation on PROCTHOR-trained models:

python run_generation_procthor.py --exprm $EXPRM_VAR --num_samples 1 --version $BD_VAR

$BD_VAR can be set to either 'bd' or 'non_bd',

$EXPRM_VAR can be set to 'specific', 'mask', or 'preset_mask'

It will load the trained model variant according to the variable.

To run generation on RPLAN-trained models:

python run_generation_rplan.py --exprm $EXPRM_VAR --num_samples 1

$EXPRM_VAR can be 1 of '5R', '6R', '7R', or '8R'.

It will load the trained model variant according to the variable.

Evaluation

To evaluate generated results saved in $RESULTS_DIR, simply run the following command:

python run_metric.py $RESULTS_DIR