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](source repository publication pending). Live demo: [HF Space](Space deployment pendingsion).

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.479
yolo26s @ 1024, direct 0.479 0.290 0.119 0.260 0.401 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.

Source repository

程式碼、訓練與評估流程、測試與完整證據都在 GitHub:https://github.com/kuotunyu/uav-traffic-vision。GitHub kuotunyu 與 Hugging Face steven0226 為同一人。

Source code, the training/evaluation pipeline, tests and the full evidence trail live at https://github.com/kuotunyu/uav-traffic-vision. GitHub kuotunyu and Hugging Face steven0226 are the same author.

Downloads last month
66
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including steven0226/uav-traffic-vision