A neuro-symbolic AI middleware that grounds site photos and field notes to specific IFC element GUIDs in a BIM model, hallucination-free, making on-site data fully traceable.
M.Sc. Computational Design Β· Carnegie Mellon University
AEC projects standardise on OpenBIM/IFC, yet day-to-day site coordination still runs on manual interpretive labour. Subcontractors log unstructured on-site evidence β photos, chat messages, annotated floorplan patches β into forms; construction managers re-key it into the system. The front-line worker sees a local condition but not the BIM GUID; the coordinator sees the model but not the site context; the developer in the office receives it late and degraded, and plans against it anyway.
Bridging that gap by hand leaks in two ways: semantic drift as detail is re-described and re-typed, and context decay as notes go stale and people roll off the project. It is worst in high-rise work, where dozens of windows and walls are visually identical β a photo of "a window" could be any of them, so even a faithful description never pins down which one.
In a BIM-native workflow every issue should resolve to a GUID linked back to the model, so downstream teams β issue tracking, compliance, planning β inherit it cleanly. Ungrounded records break that chain: not query-able, not traceable, and the decisions built on them arrive late and drift from site reality.
Before any system can reason about what changed or what comes next, it must answer the question that unlocks the rest β where, exactly, is this? That is spatial grounding: a hallucination-resistant link from site evidence to the exact model element. This work introduces an interpreter middleware to close that gap β streamlining data across many stakeholders and formats by making on-site evidence traceable.
Coordinating AEC projects means constantly translating messy site evidence into the structured BIM record β error-prone, manual work. This paper asks: how can AI act as an interpreter middleware to reliably align unstructured site evidence with digital project data? The answer is a hierarchical neuro-symbolic architecture with two complementary layers. The neural layer is a fine-tuned, domain-specific vision-language model that reads a photo, field note, and plan patch and extracts the typed spatial relationships between elements β the flexible, probabilistic front end. The symbolic layer is a knowledge graph mined from the enriched IFC model: those typed constraints drive a deterministic, priority-ordered traversal that can only return GUIDs that exist in the graph β the hallucination-resistant back end. A deterministic, calibrated soft-rerank produces the final ranked candidates (an optional Graph-RAG/LLM reorder helps only on coarse pools). The load-bearing idea is a type-conditional spatial address β a relational key computable from the BIM model with no labels and recoverable from a flat image. Supplied perfectly it lifts pool right-first from 4.9% to 78.5%; one realized deterministic detector lifts the addressable subset to 58.9% end-to-end, and a calibrated answer/defer gate raises the answered subset to 73.4% β the system knows when to abstain.
A fine-tuned Qwen2.5-VL (LoRA) reads photo + note + plan into a typed spatial contract, trained with zero real labels β generated deterministically from raw IFC (structure mining β Blender hard-negative renders β Gemini scenario text β LLM-as-judge filter), then augmented to 990 training cases.
The neural layer never writes a query. A typed Constraints JSON fills deterministic Cypher templates over an IFC-native knowledge graph, so the system can only return GUIDs that exist in the model β zero hallucinated IDs, fully repeatable.
Decoupling probabilistic extraction from deterministic retrieval removes black-box failure: every error is traceable to a specific stage β type, floor, position, confidence, or ranking.
Architecture in five stages: multimodal input β neural extraction (VLM + LoRA) β Constraints JSON β symbolic retrieval (priority Cypher cascade over a Neo4j IFC graph) β calibrated soft-rerank (optional Graph-RAG/LLM reorder) β ranked GUIDs.
The neural side translates evidence into a typed spatial address; the symbolic side names only GUIDs that exist in the model. Design rationale: reliability over flexibility (deterministic templates instead of Text-to-Cypher), and an IFC-native graph built from the schema itself rather than noisy document-level extraction.
Constraints JSON {storey, ifc_class, spatial_relations[{predicate, object_type, direction}]}, each field a {value, confidence, source} record. It describes; it never names a GUID.p0βͺp1 union returns a candidate pool with the target retained ~100% of the time. The relational predicates build the pool, not the within-pool ranking.(i of M) from the plan; candidates are reordered by a soft score (storey + class + confidence-weighted slot match) that never removes a candidate.A fuller engineered stack β a ResNet size-band filter and a Gemini Graph-RAG LLM reranker β was evaluated and not adopted: on the topology-filtered pool the LLM reorder is redundant and lowers Top-1 (6.7% β 1.7%) while breaking the 100% recall guarantee. The deployed ranking is deterministic end-to-end apart from the VLM perception front end.
FILLS (windowβhost-wall hub) and NEXT_TO (consecutive openings) edges, held fixed across all four panels. The recall-safe pool of 76 candidates narrows to 46 same-storey+class windows in 6 host-wall clusters; the target's wall is a 10-opening chain and the position-slot (8 of 10) re-weights the siblings (none removed); the target lands at rank 1.
Converts raw IFC into a query-ready Neo4j graph, enriching topology beyond native containment/fill with retrieval-oriented edges: NEXT_TO, CONNECTS_TO, ADJACENT_TO, ON_STOREY.
Nine priority strategies; the recall-preserving p0βͺp1 union planner combines attribute filtering with spatial-topology ranking. Templates are deterministic β same input, same query, same result. The final rerank is a deterministic calibrated soft-rerank; the Graph-RAG (LLM) reorder is optional and helps only on coarse pools.
Skeleton-first generation fixes ground truth before adding stochastic visual evidence: IFC mining β Blender hard-negative renders β Gemini scenario text β LLM-as-judge filter, then augmentation β 990 training cases, no real labels.
OpenCV handles counting and ordinal slot position; ResNet classifies element size bands β the sub-tasks VLMs do unreliably. These inject discriminative cues into the reranker.
Qwen2.5-VL as backbone with LoRA finetuned with domain specific data emits a typed contract {storey, ifc_class, spatial_relations[]}, saturates coarse fields (storey/class β 100%) and learns relation typing (e.g. direction 0% β 82%), but discriminating slot/size stay at 0% β the evidence for delegating them to specialists.
The address fields carry a {value, confidence, source} record (position + size live today; generalizing to every field is in progress). The gate routes on this confidence β which discriminates correct from wrong (AUROC 0.80) and is temperature-calibrated (ECE 0.21) β applying constraints softly and deferring to a human instead of guessing. Whether a learned router or LLM-agent beats this static threshold at equal budget is an open ablation (accuracy / latency / repeatability).
Each contract has an experiment behind it: what to let the VLM do, what to push into deterministic geometry, when to trust an extracted address, and how much graph context is recoverable from a flat image.
| Engineering question | Decision | Comparison / evidence |
|---|---|---|
| Should the VLM directly name the BIM element? | No. The VLM emits typed JSON; deterministic queries name only existing IFC GUIDs. | Fine-tuned VLM reaches 100% GT-in-pool but only 6.7% Top-1 β sibling selection needs explicit spatial structure. |
| Can generic retrieval solve the task? | No. Retrieval is ontology-constrained, then re-ranked by a spatial address over the IFC graph. | Lexical/dense baselines stay at 1.7% Top-1; the address ceiling reaches 78.5% Top-1 / 98.1% Top-10 (n=60). |
| Should noisy address fields hard-filter candidates? | No. The address is a soft prior with calibrated answer/defer routing, preserving recall. | Realized end-to-end reaches 58.9% Top-1 (67.6% with oracle coarse fields); selective prediction lifts the answered subset to 73.4%. |
| How deep should graph context go? | Compile one-hop context into the element record; do not chase deep relation chains from an image. | Realizable discrimination saturates at one hop: the confusable set shrinks from 13 to about 8, with little further realized gain. |
| Learned perception vs deterministic specialists? | VLM for coarse semantics; OpenCV/ResNet specialists for count, ordinal slot, and size. | The VLM reaches 100% on storey/class but 0% on slot/size; the realized slot specialist reaches 58.9% Top-1 end-to-end (n=35 fillers). |
The paper proved the architecture sound β with perfect perception the symbolic engine keeps the correct element 100% of the time and compresses the shortlist toward one, so the bottleneck is perception, not graph logic. The core advance deepens the deterministic specialists into a principled spatial-interpretation layer: instead of ad-hoc cues, the system recovers a spatial address β a relational key read from plain 2D images, computable from the BIM model and recoverable from the evidence. Three questions, answered with measurements:
It is type-conditional: a coarse prefix (storey + class) is necessary but saturated; the discriminator is class-specific β a position-slot (i of M) for an opening, a connectivity fingerprint for a wall.
Hard filtering deletes the answer, so the address is a soft prior in a recall-fixed pool. One real detector closes most of the gap; its confidence passes a calibration gate, and its payoff is knowing when to abstain.
A depth law: deeper relations are more unique but their recovery from an image collapses with distance, so discrimination saturates at one hop β compile the relation into the element rather than chase deep chains.
Median candidate pool on the AP held-out targets (n=60). Each stage adds one slice of the spatial address; the same real case is traced below.
| Stage | What it does | Median pool |
|---|---|---|
| VLM typed output | The fine-tuned VLM emits {storey, ifc_class, spatial_relations[]} β each field a {value, confidence, source} record, no GUID | 1233 |
| Coarse attribute-only retrieval | storey + IFC class filter the graph to same-type elements | 46 |
| Topology-aware retrieval | FILLS / NEXT_TO / CONNECTS_TO edges narrow to same-host-wall siblings | ~9 |
| Spatial address (KG traversal) | the type-conditional address β position-slot (i of M) for an opening β reorders the siblings to the target | 1 |
A calibration gate (AUROC 0.80) then routes ANSWER (commit the GUID) vs DEFER (return the pool), and the deterministic slot soft-rerank produces the final ranked candidates β traced on one real case below.
{value, confidence, source} record (VLM β storey/class; OpenCV β the position-slot; ResNet β size) β (c) the depth-1 spatial-address record β (d) calibrated routing β (e) the knowledge-graph shortlist collapses to a GUID. The highlighted lane is the confidence-routing path.The Oracle test measures the symbolic engine under perfect extraction β no VLM hallucination noise β to isolate how far the graph-query strategy can go. With the full spatial address it drives the median pool from 1233 candidates down to 1: the exact position-slot is a decisive discriminator once supplied, which is exactly why perception, not graph logic, is the bottleneck.
Median live pool Β· AP held-out benchmark (n=60)
| Fingerprint level | Median pool |
|---|---|
| L0 β no filter | 1233 |
| L1 β storey + class | 46 |
| L3 β + direction + subtype | 9 |
| L4 β + exact position slot* | 1 |
*L4 extractable for the addressable filler subset. L3 fingerprints provide the dominant compression.
AP held-out benchmark (n=60), p0βͺp1 planner.
| Model / diagnostic | GT-in-pool | Top-1 | Top-10 | MRR@10 |
|---|---|---|---|---|
| Zero-shot Gemini | 91.7% | 1.7% | 18.3% | 0.056 |
| Fine-tuned VLM (best end-to-end) | 100% | 6.7% | 30.0% | 0.110 |
| + realized position-slot specialist (end-to-end) | 100% | 58.9% | 67.1% | β |
| + realized slot, oracle coarse (upper bound) | 100% | 67.6% | 80.9% | β |
| + type-conditional spatial-address ceiling | 100% | 78.5% | 98.1% | 0.854 |
The ceiling row is a diagnostic upper bound, not a deployed end-to-end system. The realized row is the actual spatial-address path currently built β a deterministic position-slot specialist for the 35 window/door filler cases; realized wall/other extractors are future work. The realized 58.9% is the aggregate over those 35 fillers; on the realistic cluttered-floor subset it is 21.2% end-to-end (39.1% with oracle coarse fields) β the aggregate is flattered by 18 sparser re-rendered upper-floor plans, so we report the split.
Two real held-out cases through the same gate: when the detector is correct and confident it commits; when it is wrong but unsure it abstains and returns candidates β the behaviour that makes a triage tool trustworthy.
| Filter level | Median pool | Expected inspections | β time / element | Top-1 |
|---|---|---|---|---|
| No retrieval (building-wide) | 1233 | ~616 | ~2.6 h | β |
| Storey + type | 46 | 23 | ~345 s | 4.9% |
| + spatial relationship (1-hop) | ~9 | ~5 | ~68 s | β |
| + exact position slot | 1 | ~0.5 | ~8 s | 78.5% |
Not a user study or observed field-labour time β a ranking-derived proxy over the held-out targets: the median candidate pool a coordinator would scan, with expected inspections β Β½Β·pool at ~15 s each, before reaching the correct element.
The address ladder turns a building-wide search (1233 elements) into a near-front verification task: storey + type alone still leaves ~46 look-alikes; the spatial address collapses the pool toward one.
Median candidate pool on the held-out targets; expected inspections β Β½Β·pool under a 15 s/inspection assumption β read as scale, not measured labour. The position-slot row is the oracle spatial-address ceiling (Top-1 78.5%).