Skip to content
ModelListedExternal
Download

Qwen25 Vl 3b Floorplan Grpo

Improved using Qwen — LoRA adapter continuing from mudasir13cs/qwen25-vl-3b-floorplan-sft; trained with GRPO and geometric rewards. Base checkpoint: Qwen2.5-VL-3B-Instruct (LICENSE).

KindOtherBase modelQwen/Qwen2.5-VL-3B-InstructVersionRevision 784b8bfBgrade

Model source

Kind
Other
File size
142 MB
Base model
Qwen/Qwen2.5-VL-3B-Instruct
Version
vRevision 784b8bf
Updated
Sep 14, 2026
Downloads
607
Source
Hugging Face

Source description

Qwen2.5-VL floor plan GRPO adapter (stage 2)

Hub: mudasir13cs/qwen25-vl-3b-floorplan-grpo

Improved using Qwen — LoRA adapter continuing from mudasir13cs/qwen25-vl-3b-floorplan-sft; trained with GRPO and geometric rewards. Base checkpoint: Qwen2.5-VL-3B-Instruct (LICENSE).

Intended non-commercial / research use, consistent with CubiCasa5K (CC BY‐NC 4.0) and the Qwen research license.

CAD symbol spotting (boxes / masks): FloorCAD Detect · FloorCAD Seg.

Example input

Original illustration for the model card (not a CubiCasa training image):

Demo residential floor plan

Data source

ResourceLink
CubiCasa5K paperA Dataset and an Approach to Floorplan Reconstruction
Zenodo downloaddoi:10.5281/zenodo.2613548
LicenseCC BY-NC 4.0
HF mirrorsClaudio9701/cubicasa5k · Forceless/Zenodo10K
MethodFloorplanVLM (arXiv:2602.06507)
Stage 1 adaptermudasir13cs/qwen25-vl-3b-floorplan-sft

GRPO continues from the SFT adapter using geometric rewards (JSON validity, outer-wall IoU, room IoU) on CubiCasa-derived JSON targets.

Paper & upstream training material

If you are working inside a clone of your training repo, the same files may exist locally beside this folder (relative paths).

Quick install

pip install torch torchvision transformers trl peft accelerate pillow

(Training also uses Shapely, datasets, numpy; inference does not strictly need Shapely.)

Loading the adapter

Use Hub IDs (recommended):

from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor
from peft import PeftModel

BASE = "Qwen/Qwen2.5-VL-3B-Instruct"
ADAPTER = "mudasir13cs/qwen25-vl-3b-floorplan-grpo"

processor = AutoProcessor.from_pretrained(BASE)
model = Qwen2_5_VLForConditionalGeneration.from_pretrained(
    BASE, torch_dtype="auto", device_map="auto"
)
model = PeftModel.from_pretrained(model, ADAPTER)
model.eval()

If you cloned weights into this folder locally: set ADAPTER = "./floorplan-vlm-grpo" (or an absolute path) instead of the Hub repo id.

Using the model (inference)

For best alignment with training, reuse the system prompt that includes the full JSON schema from stage 1 (see SYSTEM_PROMPT in train_floorplan_vlm.py). GRPO training uses a shorter system string in train_floorplan_grpo.py; either works, but the schema-explicit SFT prompt below usually yields more stable JSON.

User text (same as both scripts): “Vectorize this floor plan into structured JSON with all walls, doors, windows, and rooms.”

Minimal pattern (aligned with the inference test in train_floorplan_vlm.py):

import json, re, torch
from PIL import Image

# Same strings as train_floorplan_vlm.py (schema-in-the-prompt; recommended for decoding).
SYSTEM_PROMPT = (
    "You are a floor plan vectorization expert. Extract wall, door, window geometry "
    "from floor plan images into structured JSON.\n\n"
    "Output ONLY valid JSON with this schema:\n"
    '{"walls":[{"id":"wall_N","start":[x,y],"end":[x,y],"thickness":T,"curvature":0,'
    '"openings":[{"type":"door"|"window","center":D,"width":W}]}],'
    '"rooms":[{"label":"room_type","walls":["wall_N",...]}]}\n\n'
    "Coordinates normalized so longer image edge = 1024."
)
USER_PROMPT = "Vectorize this floor plan into structured JSON with all walls, doors, windows, and rooms."

image = Image.open("plan.png").convert("RGB")

messages = [
    {"role": "system", "content": [{"type": "text", "text": SYSTEM_PROMPT}]},
    {"role": "user", "content": [{"type": "image"}, {"type": "text", "text": USER_PROMPT}]},
]
text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
inputs = processor(text=[text], images=[image], return_tensors="pt", padding=True)
inputs = {k: v.to(model.device) if hasattr(v, "to") else v for k, v in inputs.items()}

with torch.no_grad():
    out = model.generate(**inputs, max_new_tokens=4096, do_sample=False)

raw = processor.batch_decode(out[:, inputs.input_ids.shape[1] :], skip_special_tokens=True)[0]
m = re.search(r"\{[\s\S]*\}", raw)
plan = json.loads(m.group()) if m else None

Output shape: top-level walls (with optional openings) and rooms. Example JSON shape is spelled out under Output JSON Schema in the manitocross training README.

Reproducing stage 2

  1. Finish or download stage 1: mudasir13cs/qwen25-vl-3b-floorplan-sft.
  2. Run train_floorplan_grpo.py from a checkout with the environment described there (CubiCasa5K under ./cubicasa_data, huggingface-cli login if PUSH_TO_HUB = True; config block at top of file).

Citation

@article{floorplanvlm2026,
  title={FloorplanVLM: A Vision-Language Model for Floorplan Vectorization},
  journal={arXiv preprint arXiv:2602.06507},
  year={2026}
}

Acknowledgments

Author / contact

Mudasir — Sr. AI Engineer at ECODA (에코다), building multimodal AI for architecture and building-performance workflows. MS AI Convergence, 숭실대학교 — Soongsil University, Seoul. More credentials, publications, and projects: mudasir13cs.github.io

Sources

1 source
Hugging FacePrimaryVersion 784b8bf4705939887122bcfba029a6fce13e9ff4
huggingface.co/mudasir13cs/qwen25-vl-3b-floorplan-grpo/tree/784b8bf4705939887122bcfba029a6fce13e9ff4

Verified Aug 20

Model artifacts

4 artifacts

adapter_model.safetensors

safetensors · 142 MB · SHA-256 089892a88153…0132 · Hugging Face

Download

checkpoint-100/adapter_model.safetensors

safetensors · 142 MB · SHA-256 089892a88153…0132 · Hugging Face

Download

checkpoint-100/ref/adapter_model.safetensors

safetensors · 142 MB · SHA-256 089892a88153…0132 · Hugging Face

Download

ref/adapter_model.safetensors

safetensors · 142 MB · SHA-256 089892a88153…0132 · Hugging Face

Download

Source excerpts

2 excerpts

--- base_model: Qwen/Qwen2.5-VL-3B-Instruct pipeline_tag: image-to-text library_name: peft tags: - vision-language - lora - floor-plan - floorplan - vectorization - structured-json - cubicasa - grpo - reinforcement-learning - qwen2.5-vl - architecture - aec - gbxml - cad datasets: - Claudio9701/cubicasa5k - Forceless/Zenodo10K license: apache-2.0 language: - en --- # Qwen2.5-VL floor plan GRPO adapter (stage 2) **Hub:** [`mudasir13cs/qwen25-vl-3b-floorplan-grpo`](https://huggingface.co/mudasir13cs/qwen25-vl-3b-floorplan-grpo) **Improved using Qwen** — LoRA adapter continuing from [`mudasir13cs/qwen25-vl-3b-floorplan-sft`](https://huggingface.co/mudasir13cs/qwen25-vl-3b-floorplan-sft); trained with **GRPO** and geometric rewards. Base checkpoint: [**Qwen2.5-VL-3B-Instruct**](https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct) ([LICENSE](https://huggingface.co/Qwen/Qwen2.5-VL-3B-Instruct/blob/main/LICENSE)). Intended **non-commercial / research** use, consistent with **[CubiCasa5K](https://arxiv.org/abs/1904.01920)** (**[CC BY‑NC 4.0](https://github.com/CubiCasa/CubiCasa5k/blob/master/LICENSE)**) and the Qwen research license. CAD symbol spotting (boxes / masks): [FloorCAD Detect](https://huggingface.co/mudasir13cs/floorcad-yolov8n-detect) · [FloorCAD Seg](https://huggingface.co/mudasir13cs/floorcad-yolov8n-seg). ## Example input Original illustration for the model card (not a CubiCasa training image): ![Demo residential floor plan](examples/demo_residential_floorplan.png) ## Data source | Resource | Link | |----------|------| | **CubiCasa5K paper** | [A Dataset and an Approach to Floorplan Reconstruction](https://arxiv.org/abs/1904.01920) | | **Zenodo download** | [doi:10.5281/zenodo.2613548](https://doi.org/10.5281/zenodo.2613548) | | **License** | [CC BY-NC 4.0](https://github.com/CubiCasa/CubiCasa5k/blob/master/LICENSE) | | **HF mirrors** | [`Claudio9701/cubicasa5k`](https://huggingface.co/datasets/Claudio9701/cubicasa5k) · [`Forceless/Zenodo10K`](https://huggingface.co/datasets/Forceless/Zenodo10K) | | **Method** | [FloorplanVLM (arXiv:2602.06507)](https://arxiv.org/abs/2602.06507) | | **Stage 1 adapter** | [`mudasir13cs/qwen25-vl-3b-floorplan-sft`](https://huggingface.co/mudasir13cs/qwen25-vl-3b-floorplan-sft) | GRPO continues from the SFT adapter using geometric rewards (JSON validity, outer-wall IoU, room IoU) on CubiCasa-derived JSON tar...

Source context: 607 downloads · 12 likes · Pipeline image-to-text · Library peft · Repo mudasir13cs/qwen25-vl-3b-floorplan-grpo