Dataset VisDrone

Il VisDrone Dataset è un benchmark su larga scala creato dal team AISKYEYE presso il Laboratorio di Machine Learning e Data Mining dell'Università di Tianjin, in Cina. Contiene dati di ground truth accuratamente annotati per diverse attività di computer vision legate all'analisi di immagini e video basata su droni.



Watch: How to Train Ultralytics YOLO26 on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀

VisDrone è composto da 288 clip video con 261.908 fotogrammi e 10.209 immagini statiche, catturati da varie telecamere montate su droni. Il dataset copre un'ampia gamma di aspetti, tra cui posizione (14 diverse città in Cina), ambiente (urbano e rurale), oggetti (pedoni, veicoli, biciclette, ecc.) e densità (scene sparse e affollate). Il dataset è stato raccolto utilizzando varie piattaforme di droni in diversi scenari e condizioni meteorologiche e di illuminazione. Questi fotogrammi sono annotati manualmente con oltre 2,6 milioni di bounding box di target come pedoni, auto, biciclette e tricicli. Sono forniti anche attributi come la visibilità della scena, la classe dell'oggetto e l'occlusione per un migliore utilizzo dei dati.

Struttura del dataset

Il dataset VisDrone è organizzato in cinque sottogruppi principali, ciascuno focalizzato su un'attività specifica:

  1. Attività 1: Object detection nelle immagini
  2. Attività 2: Object detection nei video
  3. Attività 3: Tracciamento di singoli oggetti
  4. Attività 4: Multi-object tracking
  5. Attività 5: Conteggio della folla

Applicazioni

Il dataset VisDrone è ampiamente utilizzato per addestrare e valutare modelli di deep learning in attività di computer vision basate su droni, come l'object detection, il tracciamento di oggetti e il conteggio della folla. La serie diversificata di dati dei sensori, annotazioni di oggetti e attributi del dataset lo rendono una risorsa preziosa per ricercatori e professionisti nel campo della computer vision basata su droni.

YAML del dataset

Viene utilizzato un file YAML (Yet Another Markup Language) per definire la configurazione del dataset. Contiene informazioni sui percorsi del dataset, le classi e altre informazioni rilevanti. Nel caso del dataset Visdrone, il file VisDrone.yaml è mantenuto su https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.

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.3 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 directory

Utilizzo

Per addestrare un modello YOLO26n sul dataset VisDrone per 100 epoch 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 di Training del modello.

Esempio di training
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)

Dati ed annotazioni di esempio

Il dataset VisDrone contiene un set diversificato di immagini e video catturati da telecamere montate su droni. Ecco alcuni esempi di dati provenienti dal dataset, insieme alle relative annotazioni:

Immagini aeree di droni del dataset VisDrone con object detection

  • Attività 1: Object detection nelle immagini - Questa immagine mostra un esempio di object detection nelle immagini, dove gli oggetti sono annotati con bounding box. Il dataset fornisce un'ampia varietà di immagini scattate da diverse posizioni, ambienti e densità per facilitare lo sviluppo di modelli per questa attività.

L'esempio mostra la varietà e la complessità dei dati nel dataset VisDrone e sottolinea l'importanza di dati dei sensori di alta qualità per le attività di computer vision basate su droni.

Citazioni e ringraziamenti

Se utilizzi il dataset VisDrone nel tuo lavoro di ricerca o sviluppo, cita il seguente articolo:

Citazione
@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={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3119563}}

Vorremmo ringraziare il team AISKYEYE presso il Laboratorio di Machine Learning e Data Mining, dell'Università di Tianjin, in Cina, per aver creato e mantenuto il dataset VisDrone come risorsa preziosa per la comunità di ricerca sulla computer vision basata su droni. Per ulteriori informazioni sul dataset VisDrone e i suoi creatori, visita il repository GitHub del VisDrone Dataset.

FAQ

Cos'è il VisDrone Dataset e quali sono le sue caratteristiche principali?

Il VisDrone Dataset è un benchmark su larga scala creato dal team AISKYEYE presso l'Università di Tianjin, in Cina. È progettato per diverse attività di computer vision legate all'analisi di immagini e video basata su droni. Le caratteristiche principali includono:

  • Composizione: 288 clip video con 261.908 fotogrammi e 10.209 immagini statiche.
  • Annotazioni: Oltre 2,6 milioni di bounding box per oggetti come pedoni, auto, biciclette e tricicli.
  • Diversità: Raccolto in 14 città, in contesti urbani e rurali, in diverse condizioni meteorologiche e di illuminazione.
  • Attività: Suddiviso in cinque attività principali: object detection in immagini e video, tracciamento di singoli oggetti e multi-oggetto, e conteggio della folla.

Come posso utilizzare il VisDrone Dataset per addestrare un modello YOLO26 con Ultralytics?

Per addestrare un modello YOLO26 sul dataset VisDrone per 100 epoch con una dimensione dell'immagine di 640, puoi seguire questi passaggi:

Esempio di training
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n.pt")

# Train the model
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

Per ulteriori opzioni di configurazione, fai riferimento alla pagina di Training del modello.

Quali sono i principali sottogruppi del dataset VisDrone e le loro applicazioni?

Il dataset VisDrone è suddiviso in cinque sottogruppi principali, ciascuno su misura per una specifica attività di computer vision:

  1. Attività 1: Object detection nelle immagini.
  2. Attività 2: Object detection nei video.
  3. Attività 3: Tracciamento di singoli oggetti.
  4. Attività 4: Multi-object tracking.
  5. Attività 5: Conteggio della folla.

Questi sottogruppi sono ampiamente utilizzati per addestrare e valutare modelli di deep learning in applicazioni basate su droni come la sorveglianza, il monitoraggio del traffico e la sicurezza pubblica.

Dove posso trovare il file di configurazione per il dataset VisDrone in Ultralytics?

Il file di configurazione per il dataset VisDrone, VisDrone.yaml, si trova nel repository Ultralytics al seguente link: VisDrone.yaml.

Come posso citare il dataset VisDrone se lo uso nella mia ricerca?

Se utilizzi il dataset VisDrone nel tuo lavoro di ricerca o sviluppo, cita il seguente articolo:

Citazione
@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={2021},
  volume={},
  number={},
  pages={1-1},
  doi={10.1109/TPAMI.2021.3119563}
}

Commenti