The Cold Start Problem
We needed to train an object detection model to identify highly specific, proprietary industrial equipment from drone footage. The problem? We only had 50 real photos of the equipment.
Synthetic Generation with Unreal Engine
We hired a 3D artist to accurately model the equipment in Unreal Engine 5. We then wrote a script to generate 50,000 synthetic images.
To prevent the neural network from overfitting to the "video game" look, we applied aggressive Domain Randomization. The script randomized the camera angle, the time-of-day lighting, weather conditions (rain, fog), and even placed the object against random backgrounds scraped from the internet.
# We then use a standard YOLOv11 architecture for detection
from ultralytics import YOLO
# Pre-train heavily on the 50,000 synthetic Unreal Engine images
model = YOLO('yolov11n.yaml')
model.train(data='synthetic_dataset.yaml', epochs=100)
# Fine-tune gently on the 50 real-world photos
model.train(data='real_dataset.yaml', epochs=20, lr0=1e-5)We pre-trained our YOLO object detector on the massive synthetic dataset, and then fine-tuned it on the 50 real photos. The model generalized perfectly to real-world deployment.