Autonomous Perception System
YOLOv11 perception with uncertainty estimation on Jetson Orin NX
The Problem
Standard object detectors output bounding boxes with single confidence scores that express how similar a feature patch looks to training examples, not whether the model is actually certain of its prediction. In autonomous driving scenarios, false certainty on obscured or out-of-distribution obstacles creates critical safety hazards.
My undergraduate thesis investigated how to modify YOLOv11 to capture multi-scale context in complex road-safety scenes while providing calibrated epistemic uncertainty on an embedded NVIDIA Jetson Orin NX computer.
How It Works
I structured the perception pipeline into three sequential stages to balance detection accuracy against real-time edge compute constraints.
Context-Aware Backbone and ASPP Triple Head
Integrated an Atrous Spatial Pyramid Pooling (ASPP) module with dilation rates of 1, 6, 12, and 18. This captures multi-scale visual context without increasing receptive field parameters or losing spatial resolution for small obstacles.
Feature Pyramid Network (FPN) and PANet Fusion
Routed multi-scale features through bidirectional paths combining top-down semantic propagation with bottom-up localization signals. This provides high-resolution feature maps to three distinct detection heads.
Monte Carlo Dropout Uncertainty Sampling
Retained active dropout (rate p = 0.2) across N=8 stochastic forward passes during inference. The variance across predicted bounding boxes approximates epistemic uncertainty, allowing downstream planners to distinguish high-confidence predictions from ambiguous edge cases.
Decisions and Trade-offs
Kept ASPP in the neck instead of adding deeper backbone layers
Deeper backbones improved offline mAP slightly in PyTorch on an RTX GPU, but spiked inference latency on the Jetson Orin NX beyond our 35ms target. ASPP achieved equivalent contextual coverage with dilated convolutions at a fraction of the parameter weight.
Stochastic forward passes vs Ensembles
Full deep ensembles produce strong uncertainty estimates but require loading multiple independent models into memory. On the Jetson Orin NX with 20W power capping, loading multiple model weights was non-viable. Monte Carlo Dropout provides a Bayesian approximation using a single set of trained weights.
The Jetson Orin NX was benchmarked in 20W operational mode. The system required memory headroom for ROS middleware and camera acquisition, making model footprint and tensor memory layout critical constraints.
28-Class road safety dataset
Rather than using generic COCO classes, the model was trained on a custom 28-class dataset tailored to Indonesian road traffic, covering mixed vehicles, vulnerable road users, and local obstacles under varied lighting conditions.
Results
Measurements were collected on the custom test set and verified on the physical Jetson Orin NX edge platform.
Links and Code
The inference pipeline and evaluation notebooks are available on GitHub:
- Repository: yolo_inference on GitHub