Dataset VisDrone#
Il VisDrone Dataset è un benchmark di immagini da drone su larga scala il cui sottoinsieme di rilevamento (VisDrone2019-DET) fornisce 8.629 immagini aeree — 6.471 di addestramento, 548 di validazione e 1.610 di test-dev — annotate con 10 classi di oggetti per il object detection. È stato creato dal team AISKYEYE del Lab of Machine Learning and Data Mining, Tianjin University, Cina.
Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀
Il benchmark VisDrone completo comprende 288 clip video (261.908 fotogrammi) e 10.209 immagini statiche catturate da telecamere montate su droni in 14 diverse città della Cina, che coprono ambienti urbani e rurali, scene sparse e affollate e condizioni meteorologiche e di illuminazione variabili. I suoi fotogrammi contengono oltre 2,6 milioni di bounding boxes annotate manualmente, con attributi aggiuntivi come visibilità della scena, classe dell'oggetto e occlusione. La configurazione Ultralytics VisDrone.yaml utilizza il sottoinsieme di immagini statiche VisDrone2019-DET di questo benchmark.
Caratteristiche principali#
- Oggetti piccoli e densi: I punti di vista aerei rendono i bersagli minuscoli e affollati — le sole 548 immagini di validazione contengono 38.759 box etichettate, una media di circa 70 oggetti per immagine.
- Diversità delle scene: Immagini provenienti da 14 città cinesi che coprono località urbane e rurali, giorno e notte, e diverse condizioni meteorologiche.
- Annotazioni ricche: Oltre 2,6 milioni di box sull'intero benchmark, con attributi di occlusione e visibilità.
- Split predefiniti: Split fissi di train / val / test-dev (6.471 / 548 / 1.610 immagini) per una valutazione coerente.
Struttura del dataset#
La configurazione Ultralytics VisDrone copre il sottoinsieme di immagini VisDrone2019-DET, suddiviso in tre parti:
| Split | Immagini | Descrizione |
|---|---|---|
| Addestramento | 6,471 | Immagini aeree etichettate utilizzate per addestrare il rilevatore |
| Validazione | 548 | Immagini utilizzate per la evaluation durante lo sviluppo |
| Test-dev | 1,610 | Immagini tenute da parte per la valutazione finale del modello addestrato |
Un quarto split, test-challenge (1.580 immagini), è riservato alla competizione VisDrone e non viene scaricato, motivo per cui l'intero set DET totalizza 10.209 immagini.
Il dataset annota 10 classi di oggetti: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus e motor. VisDrone distingue pedestrian (una persona in piedi o che cammina) da people (una persona in qualsiasi altra postura).
Al primo utilizzo, lo script di download converte le annotazioni VisDrone originali nel formato YOLO, saltando le regioni contrassegnate come ignorate (il che esclude anche la categoria inutilizzata "others").
Applicazioni#
Le scene dense e i piccoli target di VisDrone lo rendono un benchmark standard per il small-object detection da punti di vista aerei. Le applicazioni comuni includono:
- Monitoraggio del traffico e conteggio dei veicoli da UAV
- Analisi della folla e sorveglianza per la pubblica sicurezza
- Ispezione di infrastrutture e cantieri edili
- Ricerca sulla Computer vision per il rilevamento di piccoli oggetti in scene caotiche
Per altri benchmark di immagini aeree, consulta il xView dataset incentrato sui satelliti o il DOTA-v2 dataset con box orientati.
Dataset YAML#
Il file VisDrone.yaml definisce la configurazione del dataset — i percorsi del dataset, i nomi delle classi e lo script automatico di download e conversione. È mantenuto nel repository Ultralytics su https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# VisDrone2019-DET dataset https://github.com/VisDrone/VisDrone-Dataset by Tianjin University
# Documentation: https://docs.ultralytics.com/datasets/detect/visdrone
# Example usage: yolo train data=VisDrone.yaml
# parent
# ├── ultralytics
# └── datasets
# └── VisDrone ← downloads here (~2 GB)
# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: VisDrone # dataset root dir
train: images/train # train images (relative to 'path') 6471 images
val: images/val # val images (relative to 'path') 548 images
test: images/test # test-dev images (optional) 1610 images
# Classes
names:
0: pedestrian
1: people
2: bicycle
3: car
4: van
5: truck
6: tricycle
7: awning-tricycle
8: bus
9: motor
# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
import os
from pathlib import Path
import shutil
from ultralytics.utils.downloads import download
from ultralytics.utils import ASSETS_URL, TQDM
def visdrone2yolo(dir, split, source_name=None):
"""Convert VisDrone annotations to YOLO format with images/{split} and labels/{split} structure."""
from PIL import Image
source_dir = dir / (source_name or f"VisDrone2019-DET-{split}")
images_dir = dir / "images" / split
labels_dir = dir / "labels" / split
labels_dir.mkdir(parents=True, exist_ok=True)
# Move images to new structure
if (source_images_dir := source_dir / "images").exists():
images_dir.mkdir(parents=True, exist_ok=True)
for img in source_images_dir.glob("*.jpg"):
img.rename(images_dir / img.name)
for f in TQDM((source_dir / "annotations").glob("*.txt"), desc=f"Converting {split}"):
img_size = Image.open(images_dir / f.with_suffix(".jpg").name).size
dw, dh = 1.0 / img_size[0], 1.0 / img_size[1]
lines = []
with open(f, encoding="utf-8") as file:
for row in [x.split(",") for x in file.read().strip().splitlines()]:
if row[4] != "0": # Skip ignored regions
x, y, w, h = map(int, row[:4])
cls = int(row[5]) - 1
# Convert to YOLO format
x_center, y_center = (x + w / 2) * dw, (y + h / 2) * dh
w_norm, h_norm = w * dw, h * dh
lines.append(f"{cls} {x_center:.6f} {y_center:.6f} {w_norm:.6f} {h_norm:.6f}\n")
(labels_dir / f.name).write_text("".join(lines), encoding="utf-8")
# Download (ignores test-challenge split)
dir = Path(yaml["path"]) # dataset root dir
urls = [
f"{ASSETS_URL}/VisDrone2019-DET-train.zip",
f"{ASSETS_URL}/VisDrone2019-DET-val.zip",
f"{ASSETS_URL}/VisDrone2019-DET-test-dev.zip",
# f"{ASSETS_URL}/VisDrone2019-DET-test-challenge.zip",
]
download(urls, dir=dir, threads=4)
# Convert
splits = {"VisDrone2019-DET-train": "train", "VisDrone2019-DET-val": "val", "VisDrone2019-DET-test-dev": "test"}
for folder, split in splits.items():
visdrone2yolo(dir, split, folder) # convert VisDrone annotations to YOLO labels
shutil.rmtree(dir / folder) # cleanup original directoryUtilizzo#
VisDrone si scarica automaticamente la prima volta che effettui l'addestramento — tre archivi per un totale di circa 2 GB — e richiede circa 4 GB di spazio libero su disco durante l'estrazione e la conversione.
Per addestrare un modello YOLO26n sul dataset VisDrone per 100 epochs con una dimensione dell'immagine di 640, puoi utilizzare i seguenti snippet di codice. Per un elenco completo degli argomenti disponibili, fai riferimento alla pagina Training del modello.
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)Per etichettare immagini aeree aggiuntive e gestire i cicli di addestramento di VisDrone nel tuo browser, usa Ultralytics Platform.
Dati di esempio e annotazioni#
L'esempio qui sotto mostra una tipica scena VisDrone: un punto di vista aereo sopra una strada trafficata dove pedoni e veicoli appaiono come bersagli piccoli e densamente raggruppati, molti parzialmente occlusi l'uno dall'altro.

Citazioni e riconoscimenti#
Se utilizzi il dataset VisDrone nel tuo lavoro di ricerca o sviluppo, cita il seguente articolo:
@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}}Desideriamo ringraziare il team AISKYEYE presso il Lab of Machine Learning and Data Mining, Tianjin University, Cina, per aver creato e mantenuto il dataset VisDrone. Per maggiori informazioni, visita il VisDrone Dataset GitHub repository.
FAQ#
VisDrone viene utilizzato per addestrare e sottoporre a benchmark rilevatori su immagini catturate da droni, dove gli oggetti sono piccoli, densi e visti dall'alto. La sua combinazione di punti di vista aerei, scene affollate e condizioni variabili lo rende un banco di prova standard per il monitoraggio del traffico tramite UAV, l'analisi della folla e la ricerca sul rilevamento di piccoli oggetti.
La configurazione Ultralytics VisDrone contiene 8.629 immagini: 6.471 per l'addestramento, 548 per la validazione e 1.610 per il test (test-dev). Tutti gli split condividono le stesse 10 classi: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus e motor. Vedi Dataset Structure per la suddivisione completa.
VisDrone si scarica automaticamente la prima volta che ti addestri con
data="VisDrone.yaml"— non sono richiesti passaggi manuali. Lo script recupera tre archivi (circa 2 GB) dagli asset di rilascio GitHub di Ultralytics e converte le annotazioni nel formato YOLO. Lo split di test-challenge trattenuto della competizione non è incluso.Addestra un modello YOLO26n su VisDrone per 100 epoche con una dimensione dell'immagine di 640:
Esempio di Addestramentofrom 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)Per configurazioni dettagliate, consulta la pagina Training e i model training tips.
Gli oggetti in VisDrone sono minuscoli rispetto al fotogramma — spesso solo poche decine di pixel — e compaiono in gruppi densi e fortemente occlusi, il che mette a dura prova i rilevatori ottimizzati su foto a livello del suolo. L'addestramento e la predizione a una risoluzione più elevata (ad esempio
imgsz=1280con un batch più piccolo) recuperano i piccoli target, e la SAHI tiled inference suddivide le immagini grandi in modo che i piccoli oggetti occupino una porzione maggiore di ciascuna finestra di inferenza.Il benchmark VisDrone completo copre cinque attività: object detection nelle immagini, object detection nei video, tracciamento di oggetti singoli, multi-object tracking e conteggio della folla, attraverso 288 clip video e 10.209 immagini statiche. La configurazione Ultralytics
VisDrone.yamlcopre solo l'attività di rilevamento di immagini (VisDrone2019-DET), scaricando le sue 6.471 immagini di train, 548 di validation e 1.610 di test-dev.Cita il documento "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI, vol. 44, n. 11, 2022, DOI 10.1109/TPAMI.2021.3119563); la voce BibTeX completa si trova nella sezione Citations and Acknowledgments qui sopra.



