docs/en/datasets/detect/visdrone.md
The VisDrone Dataset is a large-scale drone-imagery benchmark whose detection subset (VisDrone2019-DET) provides 8,629 aerial images — 6,471 train, 548 validation, and 1,610 test-dev — annotated with 10 object classes for object detection. It was created by the AISKYEYE team at the Lab of Machine Learning and Data Mining, Tianjin University, China.
<p align="center"> <iframe loading="lazy" width="720" height="405" src="https://www.youtube.com/embed/9ymyH4H1fG4" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen> </iframe><strong>Watch:</strong> How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀
</p>The full VisDrone benchmark comprises 288 video clips (261,908 frames) and 10,209 static images captured by drone-mounted cameras in 14 different cities across China, spanning urban and rural environments, sparse and crowded scenes, and varied weather and lighting conditions. Its frames carry over 2.6 million manually annotated bounding boxes, with extra attributes such as scene visibility, object class, and occlusion. The Ultralytics VisDrone.yaml configuration uses the VisDrone2019-DET static-image subset of this benchmark.
The Ultralytics VisDrone configuration covers the VisDrone2019-DET image subset, split into three parts:
| Split | Images | Description |
|---|---|---|
| Train | 6,471 | Labeled aerial images used to train the detector |
| Validation | 548 | Images used for evaluation during development |
| Test-dev | 1,610 | Held-out images for final evaluation of the trained model |
A fourth split, test-challenge (1,580 images), is withheld for the VisDrone competition and is not downloaded, which is why the full DET set totals 10,209 images.
The dataset annotates 10 object classes: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus, and motor. VisDrone distinguishes pedestrian (a person standing or walking) from people (a person in any other posture).
!!! note "Automatic YOLO conversion"
On first use the download script converts the original VisDrone annotations to YOLO format, skipping regions marked as ignored (which also excludes the unused "others" category).
VisDrone's dense scenes and tiny targets make it a standard benchmark for small-object detection from aerial viewpoints. Common applications include:
For other aerial-imagery benchmarks, see the satellite-focused xView dataset or the oriented-box DOTA-v2 dataset.
The VisDrone.yaml file defines the dataset configuration — the dataset paths, class names, and the automatic download-and-convert script. It is maintained in the Ultralytics repository at https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.
!!! example "ultralytics/cfg/datasets/VisDrone.yaml"
```yaml
--8<-- "ultralytics/cfg/datasets/VisDrone.yaml"
```
!!! note "~2 GB download"
VisDrone downloads automatically the first time you train — three archives totaling about 2 GB — and needs roughly 4 GB of free disk space during extraction and conversion.
To train a YOLO26n model on the VisDrone dataset for 100 epochs with an image size of 640, you can use the following code snippets. For a comprehensive list of available arguments, refer to the model Training page.
!!! example "Train Example"
=== "Python"
```python
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model - dataset will auto-download on first run
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)
```
=== "CLI"
```bash
# Start training from a pretrained *.pt model
# Dataset will auto-download and convert on first run
yolo detect train data=VisDrone.yaml model=yolo26n.pt epochs=100 imgsz=640
```
To label additional aerial images and manage VisDrone training runs in your browser, use Ultralytics Platform.
The sample below shows a typical VisDrone scene: an aerial viewpoint over a busy road where pedestrians and vehicles appear as small, densely packed targets, many partially occluded by one another.
If you use the VisDrone dataset in your research or development work, please cite the following paper:
!!! quote ""
=== "BibTeX"
```bibtex
@ARTICLE{9573394,
author={Zhu, Pengfei and Wen, Longyin and Du, Dawei and Bian, Xiao and Fan, Heng and Hu, Qinghua and Ling, Haibin},
journal={IEEE Transactions on Pattern Analysis and Machine Intelligence},
title={Detection and Tracking Meet Drones Challenge},
year={2022},
volume={44},
number={11},
pages={7380-7399},
doi={10.1109/TPAMI.2021.3119563}}
```
We would like to acknowledge the AISKYEYE team at the Lab of Machine Learning and Data Mining, Tianjin University, China, for creating and maintaining the VisDrone dataset. For more information, visit the VisDrone Dataset GitHub repository.
VisDrone is used to train and benchmark detectors on drone-captured imagery, where objects are small, dense, and seen from above. Its combination of aerial viewpoints, crowded scenes, and varied conditions makes it a standard testbed for UAV-based traffic monitoring, crowd analysis, and small-object detection research.
The Ultralytics VisDrone configuration contains 8,629 images: 6,471 for training, 548 for validation, and 1,610 for testing (test-dev). All splits share the same 10 classes: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus, and motor. See Dataset Structure for the full breakdown.
VisDrone downloads automatically the first time you train with data="VisDrone.yaml" — no manual steps are required. The script fetches three archives (about 2 GB) from Ultralytics GitHub release assets and converts the annotations to YOLO format. The competition's withheld test-challenge split is not included.
Train a YOLO26n model on VisDrone for 100 epochs at an image size of 640:
!!! example "Train Example"
=== "Python"
```python
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)
```
=== "CLI"
```bash
# Start training from a pretrained *.pt model
yolo detect train data=VisDrone.yaml model=yolo26n.pt epochs=100 imgsz=640
```
For detailed configurations, see the Training page and model training tips.
Objects in VisDrone are tiny relative to the frame — often only a few dozen pixels — and appear in dense, heavily occluded groups, which strains detectors tuned on ground-level photos. Training and predicting at a higher resolution (for example imgsz=1280 with a smaller batch) recovers small targets, and SAHI tiled inference slices large images so small objects occupy more of each inference window.
The full VisDrone benchmark spans five tasks — object detection in images, object detection in videos, single-object tracking, multi-object tracking, and crowd counting — across 288 video clips and 10,209 static images. The Ultralytics VisDrone.yaml configuration covers only the image detection task (VisDrone2019-DET), downloading its 6,471 train, 548 validation, and 1,610 test-dev images.
Cite the paper "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI, vol. 44, no. 11, 2022, DOI 10.1109/TPAMI.2021.3119563); the full BibTeX entry is in the Citations and Acknowledgments section above.