uav-traffic-vision: YOLO26 on VisDrone2019-DET

Drone-view object detection trained on VisDrone2019-DET (10 classes: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus, motor). Part of a portfolio project also covering SAHI sliced inference, ByteTrack-based traffic flow counting, and edge deployment benchmarks β€” full code and writeups: GitHub repo. Live demo: HF Space.

Files

file description
yolo26s_visdrone_640.pt yolo26s, imgsz=640, 97 epochs (early-stopped)
yolo26s_visdrone_1024.pt yolo26s, imgsz=1024, 74 epochs (early-stopped, best at epoch 54) β€” higher accuracy at the same inference latency on a desktop GPU (see benchmarks)
yolo26s_visdrone_640.onnx ONNX export of the 640 model, end-to-end (NMS-free), used by the Gradio demo

Evaluation (VisDrone2019-DET val, 548 images)

Same evaluation protocol across all rows (pycocotools, conf=0.01, custom tiny/small/medium/large area buckets β€” see the GitHub repo for the exact methodology).

setting AP50 AP@[.5:.95] AP tiny (<16px) AP small AP medium AP large
yolo26s @ 640, direct 0.380 0.222 0.075 0.184 0.316 0.480
yolo26s @ 1024, direct 0.480 0.291 0.119 0.261 0.403 0.463
yolo26s @ 640 + SAHI 512/0.2 0.465 0.269 0.134 0.248 0.349 0.455

No single setting dominates every object-size bucket: SAHI wins on the smallest objects (native-resolution tiling), the 1024 checkpoint wins small/medium objects with no slicing overhead, and plain 640 direct is marginally best on large objects. See the GitHub repo's README for the full discussion.

Edge deployment (measured on a desktop RTX 4090 / host CPU β€” not a Jetson)

backend mean latency FPS
PyTorch .pt (RTX 4090) 13.4 ms 74.6
ONNX (CPU) 49.0 ms 20.4
TensorRT FP16 (RTX 4090) 11.5 ms 86.8

YOLO26 exports end-to-end (NMS-free) by default: the ONNX/TensorRT graph output is a fixed (1, 300, 6) tensor with no NMS op, which simplifies onboard deployment (no NMS-plugin version dependency, latency independent of scene density). TensorRT engines are architecture-specific and are not included here β€” rebuild on your target GPU with model.export(format="engine").

Usage

from ultralytics import YOLO

model = YOLO("yolo26s_visdrone_1024.pt")  # or _640.pt / .onnx
results = model.predict("your_drone_image.jpg", imgsz=1024)
results[0].show()

Intended use & limitations

  • Trained for aerial/drone-viewpoint object detection at the altitudes and camera angles represented in VisDrone (urban streets, intersections, campuses). Not validated for other viewpoints (ground-level, satellite).
  • Small-object detection remains the hardest case (see the tiny-object AP figures above) β€” for safety- or compliance-critical use, pair with SAHI sliced inference or the 1024 checkpoint rather than the 640 direct baseline alone.
  • Heavy class imbalance in the source data (144.9k car instances vs 3.2k awning-tricycle in training) β€” expect weaker recall on the rarer vehicle classes.

Dataset license β€” please read

VisDrone2019 (AISKYEYE team, Tianjin University) is released for academic / research use only. These weights were trained on VisDrone and inherit that restriction β€” this is not a general-purpose commercially-licensed model. The dataset itself is not redistributed in this repository.

Downloads last month
89
Inference Providers NEW
This model isn't deployed by any Inference Provider. πŸ™‹ Ask for provider support

Space using betty0/uav-traffic-vision 1