---
license: agpl-3.0
pipeline_tag: object-detection
library_name: ultralytics
datasets:
- Voxel51/VisDrone2019-DET
tags:
- object-detection
- aerial-imagery
- drone
- visdrone
- ultralytics
- pytorch
- computer-vision
metrics:
- map50
- map50-95
- precision
- recall
- f1
base_model: "Ultralytics/YOLOv9"
---
# YOLOv9s Finetuned on VisDrone
Fine-tuned YOLOv9s object detector for aerial imagery using the VisDrone benchmark dataset.
This model is part of the **VisDrone Detection Model Zoo**, a collection of YOLO models trained and evaluated under a common pipeline for aerial object detection.
## Detection Showcase
---
## Performance
| Metric | Score (%) |
| ---------- | --------------- |
| mAP@50 | 33.52 |
| mAP@50-95 | 19.26 |
| Precision | 46.16 |
| Recall | 37.43 |
| F1 Score | 41.34 |
| Parameters | 7.3M |
| FLOPs | 27.6B |
---
## Evaluation Protocol
Metrics reported in this model card are computed on the VisDrone test set with ground-truth annotations available for evaluation.
---
## VisDrone Model Zoo
| Rank | Model | mAP@50 | mAP@50-95 | Precision | Recall |
| -------------------------- | -------------------- | ------------- | --------------- | ----------------- | -------------- |
| | | | | | |
| 1 | YOLOv9e | 40.02 | 23.73 | 54.78 | 42.42 |
| | | | | | |
| 2 | YOLOv11x | 38.44 | 22.6 | 52.41 | 41.43 |
| | | | | | |
| 3 | YOLOv26x | 38.33 | 22.48 | 52.91 | 41.06 |
| | | | | | |
| 4 | YOLOv11l | 37.14 | 21.85 | 51.87 | 40.33 |
| | | | | | |
| 5 | YOLOv10x | 37.24 | 21.81 | 52.59 | 39.84 |
| | | | | | |
| 6 | YOLOv26l | 37.65 | 21.75 | 51.6 | 40.42 |
| | | | | | |
| 7 | YOLOv9c | 37.22 | 21.73 | 51.99 | 39.77 |
| | | | | | |
| 8 | YOLOv8x | 36.81 | 21.52 | 51.91 | 39.78 |
| | | | | | |
| 9 | YOLOv26m | 36.67 | 21.22 | 51.03 | 39.79 |
| | | | | | |
| 10 | YOLOv10l | 35.95 | 21.09 | 52.13 | 38.48 |
| | | | | | |
| 11 | YOLOv11m | 36.35 | 21.02 | 50.24 | 39.46 |
| | | | | | |
| 12 | YOLOv9m | 36.19 | 20.95 | 51.05 | 39.12 |
| | | | | | |
| 13 | YOLOv8m | 34.39 | 19.95 | 48.18 | 38.2 |
| | | | | | |
| 14 | YOLOv9s | 33.52 | 19.26 | 46.16 | 37.43 |
| | | | | | |
| 15 | YOLOv11s | 32.3 | 18.47 | 45.49 | 35.31 |
| | | | | | |
| 16 | YOLOv8s | 31.95 | 18.24 | 45.99 | 35.49 |
| | | | | | |
| 17 | YOLOv26s | 32.1 | 18.06 | 45.75 | 35.05 |
| | | | | | |
| 18 | YOLOv9t | 29.09 | 16.22 | 42.57 | 32.66 |
| | | | | | |
| 19 | YOLOv8n | 28.18 | 15.77 | 40.86 | 31.81 |
| | | | | | |
| 20 | YOLOv11n | 27.59 | 15.46 | 39.58 | 31.74 |
| | | | | | |
| 21 | YOLOv10n | 27.65 | 15.32 | 41.02 | 31.68 |
| | | | | | |
| 22 | YOLOv26n | 26.73 | 14.64 | 38.6 | 31.14 |
| | | | | | |
| 23 | rt_detr_l | 21.68 | 9.34 | 35.76 | 26.3 |
| | | | | | |
---
## Per-Class Performance
| Class | mAP@50 | mAP@50-95 |
| -------------------------- | --------------- | ----------------- |
| | | |
| pedestrian | 28.46 | 11.18 |
| | | |
| people | 14.96 | 5.0 |
| | | |
| bicycle | 11.62 | 4.51 |
| | | |
| car | 72.89 | 45.85 |
| | | |
| van | 37.49 | 24.54 |
| | | |
| truck | 42.23 | 27.41 |
| | | |
| tricycle | 19.49 | 10.34 |
| | | |
| awning-tricycle | 19.34 | 10.85 |
| | | |
| bus | 56.84 | 40.06 |
| | | |
| motor | 31.89 | 12.83 |
| | | |
---
## Evaluation Visualizations
### Precision-Recall Curve

### F1 Curve

### Confusion Matrix

---
## Dataset
VisDrone is a large-scale benchmark for object detection in aerial imagery captured from unmanned aerial vehicles (UAVs).
The dataset contains diverse scenes including:
* Urban environments
* Residential areas
* Traffic intersections
* Crowded pedestrian regions
### Classes
* pedestrian
* people
* bicycle
* car
* van
* truck
* tricycle
* awning-tricycle
* bus
* motor
---
## Usage
### Install Dependencies
```bash
pip install ultralytics huggingface_hub
```
### Load Model from Hugging Face
```python
from huggingface_hub import hf_hub_download
from ultralytics import YOLO
weights = hf_hub_download(
repo_id="dronefreak/yolov9s-visdrone",
filename="best.pt"
)
model = YOLO(weights)
```
### Run Inference
```python
results = model.predict(
source="image.jpg",
conf=0.25
)
results[0].show()
```
---
## Training Configuration
| Setting | Value |
| ---------------- | ------------------------------- |
| Epochs | 300 |
| Dataset | VisDrone2019-DET |
| Framework | Ultralytics YOLO |
| Training Toolkit | VisDrone Dataset Python Toolkit |
---
## Repository Contents
```text
best.pt
results.csv
args.yaml
BoxPR_curve.png
BoxF1_curve.png
confusion_matrix.png
assets/visdrone_showcase.gif
README.md
```
---
## Related Resources
* VisDrone Detection Model Zoo (Hugging Face Collection)
* VisDrone Dataset Python Toolkit: https://github.com/dronefreak/VisDrone-dataset-python-toolkit
* VisDrone Dataset: https://github.com/VisDrone/VisDrone-Dataset
---
## Training Framework
These models were trained using the VisDrone Dataset Python Toolkit, an open-source framework for aerial object detection research and benchmarking on the VisDrone dataset.
Features include:
* Dataset preparation and conversion utilities
* Training and evaluation pipelines
* Detection benchmarking
* Visualization tools
* Support for multiple YOLO model families
Repository:
https://github.com/dronefreak/VisDrone-dataset-python-toolkit
If you find these models useful, please consider starring the repository.
---
## Known Limitations
Performance may degrade in:
* Extremely dense crowds
* Heavy occlusions
* Severe motion blur
* Very small objects occupying only a few pixels
* Night-time or low-light aerial imagery
---
## Citation
If you use this model in your research, please consider citing:
1. The VisDrone dataset
2. The original YOLO architecture
3. The VisDrone Detection Toolkit
```bibtex
@article{visdrone2019,
title={Vision Meets Drones: A Challenge},
author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Ling, Haibin and Hu, Qinghua},
journal={International Journal of Computer Vision},
year={2021}
}
@software{Saksena_VisDrone_Detection_Toolkit_2025,
author = {Saksena, Saumya Kumaar},
title = {VisDrone Detection Toolkit: Modern PyTorch Implementation for Aerial Object Detection},
url = {https://github.com/dronefreak/VisDrone-dataset-python-toolkit},
version = {2.0.0},
year = {2025}
}
```