YOLO Vision 2026:
No license

VisDrone-Datensatz#

Das VisDrone Dataset ist ein groß angelegter Drohnen-Bilddaten-Benchmark, dessen Detektions-Subset (VisDrone2019-DET) 8.629 Luftbilder bereitstellt — 6.471 für das Training, 548 für die Validierung und 1.610 für Test-Dev — annotiert mit 10 Objektklassen für die Objekterkennung. Es wurde vom AISKYEYE-Team am Lab of Machine Learning and Data Mining der Tianjin University in China erstellt.



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

Der vollständige VisDrone-Benchmark umfasst 288 Videoclips (261.908 Frames) und 10.209 statische Bilder, die von drohnenmontierten Kameras in 14 verschiedenen Städten in ganz China aufgenommen wurden und städtische sowie ländliche Umgebungen, spärliche und überfüllte Szenen sowie verschiedene Wetter- und Lichtverhältnisse abdecken. Seine Frames enthalten über 2,6 Millionen manuell annotierte bounding boxes mit zusätzlichen Attributen wie Szenensichtbarkeit, Objektklasse und Okklusion. Die Ultralytics VisDrone.yaml-Konfiguration verwendet das statische Bild-Subset VisDrone2019-DET dieses Benchmarks.

Hauptfunktionen#

  • Kleine, dichte Objekte: Luftaufnahmen lassen Ziele winzig und gedrängt erscheinen – allein die 548 Validierungsbilder enthalten 38.759 gelabelte Boxen, durchschnittlich etwa 70 Objekte pro Bild.
  • Szenenvielfalt: Bilder aus 14 chinesischen Städten, die städtische und ländliche Standorte abdecken, bei Tag und Nacht sowie unter verschiedenen Wetterbedingungen.
  • Reichhaltige Annotationen: Über 2,6 Millionen Boxen über den gesamten Benchmark hinweg, mit Attributen für Verdeckung und Sichtbarkeit.
  • Vordefinierte Aufteilungen: Feste Aufteilungen in Train / Val / Test-dev (6.471 / 548 / 1.610 Bilder) für eine konsistente Evaluierung.

Datensatzstruktur#

Die Ultralytics VisDrone-Konfiguration deckt den VisDrone2019-DET-Bild-Teilsatz ab, der in drei Teile unterteilt ist:

SplitBilderBeschreibung
Trainieren6,471Labelierte Luftbilder zum Trainieren des Detektors
Validation548Bilder, die während der Entwicklung zur Evaluierung verwendet werden
Test-dev1,610Zurückgehaltene Bilder für die abschließende Evaluierung des trainierten Modells

Ein vierter Teil, test-challenge (1.580 Bilder), wird für den VisDrone-Wettbewerb zurückgehalten und nicht heruntergeladen, weshalb das vollständige DET-Set insgesamt 10.209 Bilder umfasst.

Der Datensatz annotiert 10 Objektklassen: pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus und motor. VisDrone unterscheidet pedestrian (eine stehende oder gehende Person) von people (eine Person in jeder anderen Haltung).

Automatische YOLO-Konvertierung

Bei der ersten Verwendung konvertiert das Download-Skript die ursprünglichen VisDrone-Annotationen in das YOLO-Format, wobei als ignoriert markierte Regionen übersprungen werden (was auch die ungenutzte Kategorie "others" ausschließt).

Anwendungen#

Die dichten Szenen und winzigen Ziele von VisDrone machen es zu einem Standard-Benchmark für die Erkennung kleiner Objekte aus der Luftperspektive. Häufige Anwendungen umfassen:

  • Verkehrsüberwachung und Fahrzeugzählung mittels UAVs
  • Mengenanalyse und Überwachung der öffentlichen Sicherheit
  • Inspektion von Infrastruktur und Baustellen
  • Computer vision-Forschung zur Erkennung kleiner Objekte in unübersichtlichen Szenen

Für andere Luftbild-Benchmarks siehe den satellitenfokussierten xView dataset oder den Dataset mit orientierten Bounding-Boxen DOTA-v2 dataset.

Datensatz-YAML#

Die Datei VisDrone.yaml definiert die Dataset-Konfiguration — die Dataset-Pfade, Klassennamen und das automatische Download- und Konvertierungsskript. Sie wird im Ultralytics-Repository unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml gepflegt.

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 directory

Verwendung#

~2 GB Download

VisDrone wird beim ersten Training automatisch heruntergeladen – drei Archive mit insgesamt etwa 2 GB – und benötigt während der Entpackung und Konvertierung etwa 4 GB freien Festplattenspeicher.

Um ein YOLO26n-Modell für 100 epochs mit einer Bildgröße von 640 auf dem VisDrone-Dataset zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine vollständige Liste der verfügbaren Argumente findest du auf der Modellseite für Training.

Trainingsbeispiel
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)

Um zusätzliche Luftbilder zu annotieren und VisDrone-Trainingsläufe in deinem Browser zu verwalten, verwende Ultralytics Platform.

Beispieldaten und Annotationen#

Das Beispiel unten zeigt eine typische VisDrone-Szene: eine Luftaufnahme über einer belebten Straße, wo Fußgänger und Fahrzeuge als kleine, dicht gedrängte Ziele erscheinen, von denen viele teilweise durch andere verdeckt sind.

VisDrone dataset aerial drone imagery with object detection

Zitate und Danksagungen#

Wenn du den VisDrone-Datensatz in deiner Forschung oder Entwicklungsarbeit verwendest, zitiere bitte die folgende Arbeit:

Zitat
@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}}

Wir möchten uns beim AISKYEYE-Team am Lab of Machine Learning and Data Mining der Tianjin University, China, für die Erstellung und Pflege des VisDrone-Datasets bedanken. Weitere Informationen findest du im VisDrone Dataset GitHub repository.

FAQ#

  • VisDrone wird zum Trainieren und Evaluieren von Detektoren auf von Drohnen aufgenommenen Bildern verwendet, bei denen Objekte klein, dicht und von oben gesehen sind. Die Kombination aus Vogelperspektive, überfüllten Szenen und unterschiedlichen Bedingungen macht ihn zu einer Standard-Testumgebung für UAV-basierte Verkehrsüberwachung, Mengenanalyse und Forschung zur Objekterkennung kleiner Ziele.

  • Die Ultralytics VisDrone-Konfiguration enthält 8.629 Bilder: 6.471 für das Training, 548 für die Validierung und 1.610 für das Testen (test-dev). Alle Splits teilen sich dieselben 10 Klassen: Fußgänger, Personen, Fahrrad, Auto, Transporter, Lkw, Dreirad, Planen-Dreirad, Bus und Motorrad. Siehe Dataset Structure für die vollständige Aufschlüsselung.

  • VisDrone wird beim ersten Training mit data="VisDrone.yaml" automatisch heruntergeladen — es sind keine manuellen Schritte erforderlich. Das Skript ruft drei Archive (ca. 2 GB) von den Ultralytics GitHub-Release-Assets ab und konvertiert die Annotationen in das YOLO-Format. Der vom Wettbewerb zurückgehaltene Test-Challenge-Split ist nicht enthalten.

  • Trainiere ein YOLO26n-Modell auf VisDrone für 100 Epochen bei einer Bildgröße von 640:

    Trainingsbeispiel
    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)

    Detaillierte Konfigurationen findest du auf der Training-Seite und in den model training tips.

  • Objekte in VisDrone sind im Vergleich zum Bildausschnitt winzig — oft nur wenige Dutzend Pixel — und treten in dichten, stark verdeckten Gruppen auf, was Detektoren belastet, die auf Aufnahmen aus Bodenhöhe abgestimmt sind. Das Training und die Vorhersage bei höherer Auflösung (zum Beispiel imgsz=1280 mit einem kleineren Batch) stellen kleine Ziele wieder her, und die SAHI tiled inference schneidet große Bilder zu, sodass kleine Objekte einen größeren Teil jedes Inferenzfensters einnehmen.

  • Der vollständige VisDrone-Benchmark umfasst fünf Aufgaben — Objekterkennung in Bildern, Objekterkennung in Videos, Einzelobjektverfolgung, multi-object tracking und Crowd-Zählung — verteilt auf 288 Videoclips und 10.209 statische Bilder. Die Ultralytics VisDrone.yaml-Konfiguration deckt nur die Bilddetektionsaufgabe (VisDrone2019-DET) ab und lädt deren 6.471 Trainings-, 548 Validierungs- und 1.610 Test-Dev-Bilder herunter.

  • Zitiere das Paper „Detection and Tracking Meet Drones Challenge“ (IEEE TPAMI, Bd. 44, Nr. 11, 2022, DOI 10.1109/TPAMI.2021.3119563); der vollständige BibTeX-Eintrag befindet sich im obigen Abschnitt Citations and Acknowledgments.

Kommentare