AeroEdge - YOLO11n aerial object detection (8 classes, edge-ready)
Fine-tuned YOLO11n for aerial imagery (VisDrone UAV + DOTA satellite tiles), unified 8-class taxonomy:
person, car, truck, bus, van, bicycle_motor, boat_ship, aircraft.
Code, pipeline, Rust runtime and OTA fleet system: https://github.com/pavanyadava007/aeroedge
Files
| File | What | Size | val mAP@0.5 |
|---|---|---|---|
aeroedge_yolo11n.pt |
PyTorch weights (trained 50 ep @960) | 5.5 MB | 0.688 (train-val, 960) |
aero_fp32.onnx |
ONNX opset 17, static 1×3×640×640, NMS outside graph | 10.6 MB | 0.569 (runtime path, 640) |
aero_int8.onnx |
INT8 QDQ (Conv/MatMul, percentile calib) | 3.2 MB | 0.523 |
aero_int8_416.onnx |
INT8 @416 (Pi-class budget) | 3.1 MB | 0.396 |
Measured on AMD EPYC x86, 8 threads, 5-min thermal soak: INT8@640 p95 29.6 ms / 34 FPS. Full measured results incl. domain-shift splits, failure modes and honest limitations: docs/results.md
Usage (ONNX, NMS outside the graph)
import onnxruntime as ort
# pre/post-processing reference (letterbox 114, decode, class-aware NMS):
# https://github.com/pavanyadava007/aeroedge/blob/main/aeroedge/utils/boxes.py
sess = ort.InferenceSession("aero_int8.onnx")
Output layout 1×(4+8)×N (xywh + class scores); apply decode + NMS as in the reference (mirrored bit-exactly in the repo's Rust runtime).
License note: weights derive from Ultralytics YOLO11n (AGPL-3.0); datasets VisDrone / DOTA are academic-use.