CoolFace
Modelpublic

betty0/uav-traffic-vision

sourceHugging Faceotherupdated 3mo agoView on Hugging Face
0likes42downloads
Model Card

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

filedescription
yolo26s_visdrone_640.ptyolo26s, imgsz=640, 97 epochs (early-stopped)
yolo26s_visdrone_1024.ptyolo26s, 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.onnxONNX 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).

settingAP50AP@[.5:.95]AP tiny (<16px)AP smallAP mediumAP large
yolo26s @ 640, direct0.3800.2220.0750.1840.3160.480
yolo26s @ 1024, direct0.4800.2910.1190.2610.4030.463
yolo26s @ 640 + SAHI 512/0.20.4650.2690.1340.2480.3490.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)

backendmean latencyFPS
PyTorch .pt (RTX 4090)13.4 ms74.6
ONNX (CPU)49.0 ms20.4
TensorRT FP16 (RTX 4090)11.5 ms86.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

python
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.