/projects/synthetic-blenDR
software · synthetic blendr · 2023

Synthetic blenDR

Synthetic blenDR

A recurring bottleneck in industrial AI development is data: not enough of it, and too expensive to annotate by hand. This project builds a synthetic data pipeline in Blender that bypasses both problems by generating annotated training images at scale by randomising the rendering conditions that determine whether a model generalises.

Applied to a quadcopter assembly with 8 component classes, a YOLOv7 model trained using transfer learning on exclusively 500 synthetic images reached 71.21% mAP on real-world detection with zero manual labels.


The domain gap

Synthetic images are cheap to produce but differ from real photographs in ways that consistently degrade model performance. The solution approach is to widen the synthetic parameter space until the real-world distribution falls inside it.

Box plots comparing real data distribution, narrow synthetic distribution, and wide synthetic distribution after domain randomization

Domain randomisation

Six randomisation factors were drawn from a review of 30 published studies and ranked by importance using the Analytic Hierarchy Process.

Textures (34%) — surface textures sampled from a library each frame

Object position (22%) — camera distributed across a Fibonacci sphere for uniform angular coverage

Light properties (20%) — intensity and colour temperature randomised per render

Light position (12%) — light source relocated each frame

Backgrounds (8%) — environment images swapped between renders

Distractors (3%) — random geometry partially occluding components


Experimental design

Factor levels were arranged into a Taguchi L16 orthogonal array — 16 dataset configurations that cover all factor interactions with the minimum possible number of runs. Each configuration was trained seven times to establish statistical robustness, yielding 112 training runs in total.

Three-phase methodology flowchart covering Experiment Preparation (AHP, Taguchi DOE, pipeline setup), Experiment Execution (iterative train-test loop over 16 datasets), and Experiment Analysis (results, literature comparison, final assessment)

Pipeline

STL assembly files and a config.json specifying paths and randomisation ranges drive a headless Blender session using the zpy library. Each frame produces a paired RGB render and instance segmentation mask; bounding boxes are derived automatically, yielding a COCO-format dataset with zero manual labelling.


Results

All 16 dataset configurations exceeded 65% mAP on the real-world test set. The best configuration reached 71.21% mAP at IoU ≥ 0.5, validated against 50 real images across 8 component classes.

Real-world test images of the quadcopter assembly with artificial occlusions simulating partial cover of components

A second test set with artificial occlusions confirmed that including distractors in training improves detection under partial cover. Training mAP across all 112 runs stayed above 90%, with a Pearson correlation between training and test mAP confirming that synthetic performance reliably predicts real-world generalisation.