Ultralytics YOLO27:
No license

VisDrone-Datensatz#

Der VisDrone-Datensatz ist ein groß angelegter Benchmark für Drohnenaufnahmen, dessen Teilmenge zur Objekterkennung (VisDrone2019-DET) 8.629 Luftbilder umfasst – 6.471 für das Training, 548 für die Validierung und 1.610 für Test-Dev –, die mit 10 Objektklassen für die Objekterkennung annotiert sind. Er wurde vom AISKYEYE-Team am Lab of Machine Learning and Data Mining der Tianjin-Universität 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 Einzelbilder) und 10.209 statische Bilder, die von drohnenmontierten Kameras in 14 verschiedenen Städten in China aufgenommen wurden. Dabei werden städtische und ländliche Umgebungen, spärlich und dicht besiedelte Szenen sowie unterschiedliche Wetter- und Lichtbedingungen abgedeckt. Die Einzelbilder enthalten über 2,6 Millionen manuell annotierte Begrenzungsrahmen mit zusätzlichen Attributen wie Sichtbarkeit der Szene, Objektklasse und Verdeckung. Die Konfiguration VisDrone.yaml von Ultralytics verwendet die Teilmenge der statischen Bilder VisDrone2019-DET dieses Benchmarks.

Wichtige Funktionen#

  • Kleine, dicht angeordnete Objekte: Luftaufnahmen machen die Ziele klein und dicht gedrängt – allein die 548 Validierungsbilder enthalten 38.759 annotierte Rahmen, also durchschnittlich etwa 70 Objekte pro Bild.
  • Szenenvielfalt: Aufnahmen aus 14 chinesischen Städten, die städtische und ländliche Gebiete, Tag und Nacht sowie unterschiedliche Wetterbedingungen abdecken.
  • Umfangreiche Annotationen: Über 2,6 Millionen Rahmen im gesamten Benchmark mit Attributen zu Verdeckung und Sichtbarkeit.
  • Vordefinierte Aufteilungen: Feste Aufteilungen in Training, Validierung und Test-Dev (6.471 / 548 / 1.610 Bilder) für eine konsistente Evaluierung.

Datensatzstruktur#

Die VisDrone-Konfiguration von Ultralytics umfasst die Bildteilmenge VisDrone2019-DET, die in drei Teile aufgeteilt ist:

AufteilungBilderBeschreibung
Trainieren6,471Annotierte Luftbilder, die zum Trainieren des Detektors verwendet werden
Validierung548Bilder, die während der Entwicklung zur Evaluierung verwendet werden
Test-Dev1,610Zurückgehaltene Bilder für die abschließende Auswertung des trainierten Modells

Eine vierte Aufteilung, Test-Challenge (1.580 Bilder), wird für den VisDrone-Wettbewerb zurückgehalten und nicht heruntergeladen. Daher umfasst der vollständige DET-Datensatz insgesamt 10.209 Bilder.

Der Datensatz annotiert 10 Objektklassen: Fußgänger, Personen, Fahrrad, Auto, Kleintransporter, Lastwagen, Dreirad, Dreirad mit Markise, Bus und Motorrad. VisDrone unterscheidet zwischen Fußgängern (einer stehenden oder gehenden Person) und Personen (einer Person in jeder anderen Körperhaltung).

Automatische YOLO-Konvertierung

Bei der ersten Verwendung konvertiert das Download-Skript die ursprünglichen VisDrone-Annotationen in das YOLO-Format und überspringt als ignoriert markierte Bereiche, wodurch auch die nicht verwendete Kategorie "others" ausgeschlossen wird.

Anwendungen#

Die dichten Szenen und kleinen Ziele von VisDrone machen den Datensatz zu einem Standardbenchmark für die Erkennung kleiner Objekte aus der Luft. Häufige Anwendungsbereiche sind:

  • Verkehrsüberwachung und Fahrzeugzählung mit UAVs
  • Analyse von Menschenmengen und Überwachung zur öffentlichen Sicherheit
  • Inspektion von Infrastruktur und Baustellen
  • Forschung im Bereich Computer Vision zur Erkennung kleiner Objekte in unübersichtlichen Szenen

Weitere Benchmarks für Luftaufnahmen findest du im satellitenorientierten xView-Datensatz oder im Datensatz DOTA-v2 für orientierte Rahmen.

Dataset-YAML#

Die Datei VisDrone.yaml definiert die Datensatzkonfiguration – die Pfade zum Datensatz, die Klassennamen und das automatische Skript zum Herunterladen und Konvertieren. 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#

Download von etwa 2 GB

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

Um ein YOLO26n-Modell 100 Epochen lang auf dem VisDrone-Datensatz mit einer Bildgröße von 640 zu trainieren, kannst du die folgenden Codeausschnitte verwenden. Eine vollständige Liste der verfügbaren Argumente findest du auf der Seite zum Training des Modells.

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 die Ultralytics Platform.

Beispieldaten und Annotationen#

Das folgende Beispiel zeigt eine typische VisDrone-Szene: eine Luftaufnahme einer stark befahrenen Straße, auf der Fußgänger und Fahrzeuge als kleine, dicht angeordnete Ziele erscheinen, die häufig teilweise voneinander verdeckt werden.

Luftaufnahmen von Drohnen im VisDrone-Datensatz mit Objekterkennung

Zitate und Danksagungen#

Wenn du den VisDrone-Datensatz für deine Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte die folgende Publikation:

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 dem AISKYEYE-Team am Lab of Machine Learning and Data Mining der Tianjin-Universität in China für die Erstellung und Pflege des VisDrone-Datensatzes danken. Weitere Informationen findest du im GitHub-Repository des VisDrone-Datensatzes.

FAQ#

  • VisDrone wird zum Trainieren und Bewerten von Detektoren für von Drohnen aufgenommene Bilder verwendet, auf denen Objekte klein und dicht angeordnet sind und aus der Vogelperspektive betrachtet werden. Die Kombination aus Luftaufnahmen, dicht bevölkerten Szenen und unterschiedlichen Bedingungen macht den Datensatz zu einer Standardtestumgebung für UAV-basierte Verkehrsüberwachung, Menschenmengenanalyse und die Erforschung der Erkennung kleiner Objekte.

  • Die VisDrone-Konfiguration von Ultralytics umfasst 8.629 Bilder: 6.471 für das Training, 548 für die Validierung und 1.610 für das Testen (Test-Dev). Alle Aufteilungen verwenden dieselben 10 Klassen: Fußgänger, Personen, Fahrrad, Auto, Kleintransporter, Lastwagen, Dreirad, Dreirad mit Markise, Bus und Motorrad. Eine vollständige Aufschlüsselung findest du unter Datensatzstruktur.

  • VisDrone wird beim ersten Training mit data="VisDrone.yaml" automatisch heruntergeladen – manuelle Schritte sind nicht erforderlich. Das Skript lädt drei Archive (etwa 2 GB) aus den Release-Assets von Ultralytics auf GitHub herunter und konvertiert die Annotationen in das YOLO-Format. Die für den Wettbewerb zurückgehaltene Aufteilung Test-Challenge ist nicht enthalten.

  • Trainiere ein YOLO26n-Modell 100 Epochen lang auf VisDrone mit 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)

    Ausführliche Konfigurationen findest du auf der Seite zum Training und bei den Tipps zum Modelltraining.

  • Die Objekte in VisDrone sind im Verhältnis zum Bild klein – oft nur wenige Dutzend Pixel groß – und erscheinen in dichten, stark verdeckten Gruppen. Das stellt Detektoren vor Herausforderungen, die auf Bildern aus Bodenperspektive trainiert wurden. Wenn du mit einer höheren Auflösung trainierst und Vorhersagen erstellst, beispielsweise mit imgsz=1280 und einer kleineren Batch-Größe, werden kleine Ziele besser erfasst. Die gekachelte SAHI-Inferenz teilt große Bilder in Ausschnitte auf, 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, Verfolgung einzelner Objekte, Verfolgung mehrerer Objekte und Zählen von Menschenmengen – in 288 Videoclips und 10.209 statischen Bildern. Die Konfiguration VisDrone.yaml von Ultralytics deckt nur die Bildaufgabe zur Objekterkennung (VisDrone2019-DET) ab und lädt deren 6.471 Trainings-, 548 Validierungs- und 1.610 Test-Dev-Bilder herunter.

  • Zitiere die Publikation "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 oben im Abschnitt Zitate und Danksagungen.

Kommentare