Link to this sectionDataset 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 l'object detection. È stato creato dal team AISKYEYE presso il laboratorio di Machine Learning e Data Mining della Tianjin University, in Cina.
Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀
Il benchmark completo VisDrone comprende 288 video clip (261.908 fotogrammi) e 10.209 immagini statiche catturate da telecamere montate su droni in 14 diverse città della Cina, spaziando tra ambienti urbani e rurali, scene sparse e affollate e condizioni meteorologiche e di luce 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.
Link to this sectionCaratteristiche 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.
Link to this sectionStruttura 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 l'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").
Link to this sectionApplicazioni#
Le scene dense e i bersagli minuscoli 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 di Computer vision sul rilevamento di piccoli oggetti in scene ingombre
Per altri benchmark di immagini aeree, consulta il dataset xView focalizzato sui satelliti o il dataset DOTA-v2 a box orientate.
Link to this sectionDataset 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 di Ultralytics all'indirizzo 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 directoryLink to this sectionUtilizzo#
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 frammenti di codice. Per un elenco completo degli argomenti disponibili, fai riferimento alla pagina di 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 ulteriori immagini aeree e gestire le esecuzioni di addestramento su VisDrone nel tuo browser, utilizza la Ultralytics Platform.
Link to this sectionDati 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.

Link to this sectionCitazioni 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 laboratorio di Machine Learning e Data Mining della Tianjin University, Cina, per aver creato e mantenuto il dataset VisDrone. Per maggiori informazioni, visita il repository GitHub del VisDrone Dataset.
Link to this sectionFAQ#
Link to this sectionA cosa serve il dataset VisDrone?#
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.
Link to this sectionQuante immagini e classi contiene VisDrone?#
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.
Link to this sectionCome posso scaricare il dataset VisDrone?#
VisDrone si scarica automaticamente la prima volta che effettui un addestramento con data="VisDrone.yaml" — non sono richiesti passaggi manuali. Lo script recupera tre archivi (circa 2 GB) dagli asset delle release GitHub di Ultralytics e converte le annotazioni nel formato YOLO. Lo split test-challenge riservato per la competizione non è incluso.
Link to this sectionCome faccio ad addestrare un modello YOLO26 sul dataset VisDrone?#
Addestra un modello YOLO26n su VisDrone per 100 epoche con una dimensione dell'immagine di 640:
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)Per configurazioni dettagliate, consulta la pagina Training e i consigli per l'addestramento del modello.
Link to this sectionPerché VisDrone è difficile per i rilevatori di oggetti e come posso migliorare l'accuratezza?#
Gli oggetti in VisDrone sono minuscoli rispetto al fotogramma — spesso solo poche decine di pixel — e appaiono in gruppi densi e pesantemente occlusi, il che mette a dura prova i rilevatori ottimizzati su foto scattate da terra. Addestrare e prevedere a una risoluzione più elevata (ad esempio imgsz=1280 con un batch più piccolo) permette di recuperare piccoli bersagli, e l'SAHI tiled inference suddivide immagini grandi in modo che gli oggetti piccoli occupino una porzione maggiore di ciascuna finestra di inferenza.
Link to this sectionQual è la differenza tra VisDrone-DET e il benchmark completo VisDrone?#
Il benchmark completo VisDrone copre cinque task — object detection in immagini, object detection in video, inseguimento di singolo oggetto, multi-object tracking e conteggio della folla — su 288 video clip e 10.209 immagini statiche. La configurazione Ultralytics VisDrone.yaml copre solo il task di rilevamento su immagini (VisDrone2019-DET), scaricando le sue 6.471 immagini di train, 548 di validazione e 1.610 di test-dev.
Link to this sectionCome posso citare VisDrone nella mia ricerca?#
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.