All work
Pasona Tech, Osaka·2020 – 2021

Detecting CAD symbols nobody had labelled

A blueprint-reading system for construction cost estimation, trained entirely on synthetic data because the real labels did not exist and were never going to.

Role
AI Engineer and Project Lead · 3-person team
Result
85% across 30+ classes
Mask R-CNNBlenderUnreal EngineOpenCVUnity ML-Agents

The problem

Construction cost estimation starts with a human reading a blueprint and counting things: symbols, fixtures, annotations, across dozens of categories. It is slow, and the people doing it are expensive and would rather be doing something else.

The obvious approach is object detection. The obvious blocker is that detecting 30+ symbol classes needs a labelled dataset of blueprints, and no such dataset existed. Producing one by hand would have consumed the entire project budget before any modelling started.

The constraint that decided everything

No labels, no budget to make them, and a long tail of rare symbols. Even if we had paid for annotation, the rare classes would still have had almost no examples, which is exactly where a detector fails and exactly where a costing error is expensive.

What I decided

Generate the data instead of collecting it. The symbols are defined shapes. Blueprints have predictable structure. That combination is unusually friendly to synthesis: I built pipelines in Blender, Unreal and OpenCV that produced labelled pages directly, with the annotation coming free because the generator already knows what it drew.

Treat class balance as a parameter, not a fact. The decisive advantage of synthetic data is not volume, it is control. Rare symbols stop being rare, because you choose how often they appear. That single property is what made 30+ classes tractable.

Vary the things that break detectors. Scale, rotation, line weight, overlap, and the noise that comes from real scans, rather than generating clean pages that would only teach the model the easy case.

Outcome

85% accuracy across more than 30 classes, with zero manual annotation, and several prototypes adopted by customers for production use.

What this taught me

Data scarcity is often a modelling problem in disguise. Before accepting “we don’t have the data”, it is worth asking whether the data can be constructed, and whether constructing it gives you control you would not have had otherwise. The synthetic route is not always cheaper. When the labels come free from the generator, it usually is.