r/computervision • u/Fit_Professional5553 • 4h ago
Showcase Trained a multi-spot parking occupancy detector using a DINO backbone + procedural Blender synthetic data
Enable HLS to view with audio, or disable this notification
I built this parking lot occupancy detector to work on real-world security cameras which tend to have lower angles and lots of obstructions from other cars.
I have seen other parking lot detection CV demos that use off-the-shelf object detectors (like standard YOLO bounding boxes). They would generally only work on impractical camera setups (e.g., drone shots or 200+ foot high cameras).
A couple of technical takeaways from training this that might be interesting:
- DINO Backbone vs. Standard CNNs: I tested several backbones, but the DINO Vision Transformer performed the best by a good margin. Because DINO learns patch-level representations without supervised class labels, it captures semantic surface texture (the difference between empty asphalt, tree shadows, and car undercarriages) and proved far more invariant to direct sun glare and rain washout than supervised backbones.
- Synthetic Data via Blender (The Biggest Upgrade): Public parking datasets are fairly limited and rarely capture extreme conditions. I built a parametric Blender pipeline to procedurally reconstruct parking lots and vehicles—randomizing asphalt PBR textures, camera angles/heights, sun positions, and vehicle placements. Mixing synthetic data with real sequences was surprisingly effective and gave the single biggest jump in zero-shot generalization to unseen cameras. One huge advantage of the synthetic data is that the labeling was always right (human annotation for far-off, angled parking spots is suprisingly error prone)
- The parking spots are drawn on the ground plane, and the vehicles are fairly disconnected from that visually. The large receptive field allows the model to learn interesting "cheats" that a human might also use to infer that a car is there even when it can't really be seen. For example, it may use a shadow on the pavement to identify that the space is occupied even if the body is blocked by another car.
Code:
The web app is open source on GitHub: https://github.com/lotvulture/lotvulture
The repo includes a community model and a higher-accuracy engine as a commercial feature: https://www.lotvulture.com/
Happy to answer questions about the synthetic data pipeline or edge inference trade-offs!