Zum Inhalt springen

VisDrone-Datensatz

Der VisDrone-Datensatz ist ein umfangreicher Benchmark, der vom AISKYEYE-Team am Lab of Machine Learning and Data Mining der UniversitĂ€t Tianjin in China erstellt wurde. Er enthĂ€lt sorgfĂ€ltig kommentierte Ground-Truth-Daten fĂŒr verschiedene Computer-Vision-Aufgaben im Zusammenhang mit der dronenbasierten Bild- und Videoanalyse.

VisDrone besteht aus 288 Videoclips mit 261.908 Einzelbildern und 10.209 statischen Bildern, die von verschiedenen an Drohnen montierten Kameras aufgenommen wurden. Der Datensatz deckt eine Vielzahl von Aspekten ab, darunter den Standort (14 verschiedene StĂ€dte in China), die Umgebung (stĂ€dtisch und lĂ€ndlich), Objekte (FußgĂ€nger, Fahrzeuge, FahrrĂ€der usw.) und die Dichte (spĂ€rliche und ĂŒberfĂŒllte Szenen). Der Datensatz wurde mit verschiedenen Drohnenplattformen in unterschiedlichen Szenarien und bei unterschiedlichen Wetter- und LichtverhĂ€ltnissen aufgenommen. Diese Frames wurden manuell mit ĂŒber 2,6 Millionen Bounding Boxes von Zielen wie FußgĂ€ngern, Autos, FahrrĂ€dern und DreirĂ€dern beschriftet. Zur besseren Datennutzung werden auch Attribute wie Sichtbarkeit der Szene, Objektklasse und Verdeckung angegeben.

Struktur des Datensatzes

Der VisDrone-Datensatz ist in fĂŒnf Teilmengen unterteilt, die sich jeweils auf eine bestimmte Aufgabe konzentrieren:

  1. Aufgabe 1: Objekterkennung in Bildern
  2. Aufgabe 2: Objekterkennung in Videos
  3. Aufgabe 3: Verfolgung eines einzelnen Objekts
  4. Aufgabe 4: Multi-Objekt-Tracking
  5. Aufgabe 5: ZĂ€hlen von Menschenmassen

Anwendungen

Der VisDrone-Datensatz wird hĂ€ufig fĂŒr das Training und die Evaluierung von Deep-Learning-Modellen fĂŒr Drohnen-basierte Computer-Vision-Aufgaben wie Objekterkennung, Objektverfolgung und das ZĂ€hlen von Menschenmengen verwendet. Die vielfĂ€ltigen Sensordaten, Objektannotationen und Attribute des Datensatzes machen ihn zu einer wertvollen Ressource fĂŒr Forscher und Praktiker auf dem Gebiet des drohnenbasierten Computersehens.

Datensatz YAML

Eine YAML-Datei (Yet Another Markup Language) wird verwendet, um die Konfiguration des Datensatzes zu definieren. Sie enthĂ€lt Informationen ĂŒber die Pfade, Klassen und andere relevante Informationen des Datasets. Im Fall des Visdrone-Datensatzes ist die VisDrone.yaml Datei wird verwaltet unter https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.

ultralytics/cfg/datasets/VisDrone.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/VisDrone # dataset root dir
train: VisDrone2019-DET-train/images # train images (relative to 'path')  6471 images
val: VisDrone2019-DET-val/images # val images (relative to 'path')  548 images
test: VisDrone2019-DET-test-dev/images # test 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

  from ultralytics.utils.downloads import download

  def visdrone2yolo(dir):
      from PIL import Image
      from tqdm import tqdm

      def convert_box(size, box):
          # Convert VisDrone box to YOLO xywh box
          dw = 1. / size[0]
          dh = 1. / size[1]
          return (box[0] + box[2] / 2) * dw, (box[1] + box[3] / 2) * dh, box[2] * dw, box[3] * dh

      (dir / 'labels').mkdir(parents=True, exist_ok=True)  # make labels directory
      pbar = tqdm((dir / 'annotations').glob('*.txt'), desc=f'Converting {dir}')
      for f in pbar:
          img_size = Image.open((dir / 'images' / f.name).with_suffix('.jpg')).size
          lines = []
          with open(f, 'r') as file:  # read annotation.txt
              for row in [x.split(',') for x in file.read().strip().splitlines()]:
                  if row[4] == '0':  # VisDrone 'ignored regions' class 0
                      continue
                  cls = int(row[5]) - 1
                  box = convert_box(img_size, tuple(map(int, row[:4])))
                  lines.append(f"{cls} {' '.join(f'{x:.6f}' for x in box)}\n")
                  with open(str(f).replace(f'{os.sep}annotations{os.sep}', f'{os.sep}labels{os.sep}'), 'w') as fl:
                      fl.writelines(lines)  # write label.txt


  # Download
  dir = Path(yaml['path'])  # dataset root dir
  urls = ['https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-train.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-val.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-dev.zip',
          'https://github.com/ultralytics/yolov5/releases/download/v1.0/VisDrone2019-DET-test-challenge.zip']
  download(urls, dir=dir, curl=True, threads=4)

  # Convert
  for d in 'VisDrone2019-DET-train', 'VisDrone2019-DET-val', 'VisDrone2019-DET-test-dev':
      visdrone2yolo(dir / d)  # convert VisDrone annotations to YOLO labels

Verwendung

Um ein YOLOv8n Modell auf dem VisDrone-Datensatz fĂŒr 100 Epochen mit einer BildgrĂ¶ĂŸe von 640 zu trainieren, kannst du die folgenden Codeschnipsel verwenden. Eine umfassende Liste der verfĂŒgbaren Argumente findest du auf der Seite Modelltraining.

Beispiel fĂŒr einen Zug

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.pt')  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data='VisDrone.yaml', epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VisDrone.yaml model=yolov8n.pt epochs=100 imgsz=640

Beispieldaten und Anmerkungen

Der VisDrone-Datensatz enthĂ€lt eine Vielzahl von Bildern und Videos, die von an Drohnen montierten Kameras aufgenommen wurden. Hier sind einige Beispiele fĂŒr Daten aus dem Datensatz mit den dazugehörigen Kommentaren:

Datensatz Beispielbild

  • Aufgabe 1: Objekterkennung in Bildern - Dieses Bild zeigt ein Beispiel fĂŒr die Objekterkennung in Bildern, bei dem die Objekte mit Bounding Boxes versehen sind. Der Datensatz enthĂ€lt eine Vielzahl von Bildern, die an unterschiedlichen Orten, in unterschiedlichen Umgebungen und in unterschiedlichen Dichten aufgenommen wurden, um die Entwicklung von Modellen fĂŒr diese Aufgabe zu erleichtern.

Das Beispiel zeigt die Vielfalt und KomplexitĂ€t der Daten im VisDrone-Datensatz und verdeutlicht, wie wichtig hochwertige Sensordaten fĂŒr drohnenbasierte Computer Vision-Aufgaben sind.

Zitate und Danksagungen

Wenn du den VisDrone-Datensatz in deiner Forschungs- oder Entwicklungsarbeit verwendest, zitiere bitte das folgende Dokument:

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

Wir möchten dem AISKYEYE-Team im Lab of Machine Learning and Data Mining an der UniversitĂ€t Tianjin, China, fĂŒr die Erstellung und Pflege des VisDrone-Datensatzes danken, der eine wertvolle Ressource fĂŒr die dronenbasierte Computer-Vision-Forschungsgemeinschaft darstellt. Weitere Informationen ĂŒber den VisDrone-Datensatz und seine Ersteller findest du im VisDrone Dataset GitHub Repository.



Erstellt 2023-11-12, Aktualisiert 2023-11-22
Autoren: glenn-jocher (3), Laughing-q (1)

Kommentare