Overslaan naar inhoud

VisDrone Dataset

De VisDrone Dataset is een grootschalige benchmark gemaakt door het AISKYEYE team van het Lab of Machine Learning and Data Mining, Tianjin University, China. Het bevat zorgvuldig geannoteerde ground truth gegevens voor verschillende computer vision taken met betrekking tot drone-gebaseerde beeld- en videoanalyse.

VisDrone bestaat uit 288 videoclips met 261.908 frames en 10.209 statische beelden, gemaakt door verschillende camera's die op een drone zijn gemonteerd. De dataset omvat een breed scala aan aspecten, waaronder locatie (14 verschillende steden in China), omgeving (stedelijk en landelijk), objecten (voetgangers, voertuigen, fietsen, enz.) en dichtheid (schaarse en drukke scènes). De dataset is verzameld met verschillende drone-platforms onder verschillende scenario's en weers- en lichtomstandigheden. Deze frames zijn handmatig geannoteerd met meer dan 2,6 miljoen bounding boxes van doelen zoals voetgangers, auto's, fietsen en driewielers. Attributen zoals zichtbaarheid van de scène, objectklasse en occlusie worden ook geleverd voor een beter gebruik van de gegevens.

Structuur dataset

De VisDrone dataset is onderverdeeld in vijf subsets, die elk gericht zijn op een specifieke taak:

  1. Opdracht 1: Objectdetectie in afbeeldingen
  2. Taak 2: Objectdetectie in video's
  3. Taak 3: Eén object volgen
  4. Taak 4: Multi-object volgen
  5. Opdracht 5: Menigte tellen

Toepassingen

De VisDrone dataset wordt veel gebruikt voor het trainen en evalueren van deep learning modellen in drone-gebaseerde computer vision taken zoals objectdetectie, het volgen van objecten en het tellen van menigten. De diverse set sensorgegevens, objectannotaties en attributen van de dataset maken het een waardevolle bron voor onderzoekers en praktijkmensen op het gebied van computer vision met behulp van drones.

Dataset YAML

Een YAML (Yet Another Markup Language) bestand wordt gebruikt om de configuratie van de dataset te definiëren. Het bevat informatie over de paden, klassen en andere relevante informatie van de dataset. In het geval van de Visdrone dataset is de VisDrone.yaml bestand wordt onderhouden op 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

Gebruik

Om een YOLOv8n model te trainen op de VisDrone dataset voor 100 epochs met een afbeeldingsgrootte van 640, kun je de volgende codefragmenten gebruiken. Raadpleeg de pagina Model Training voor een uitgebreide lijst met beschikbare argumenten.

Voorbeeld trein

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

Voorbeeldgegevens en annotaties

De VisDrone dataset bevat een diverse set afbeeldingen en video's die zijn vastgelegd door op een drone gemonteerde camera's. Hier zijn enkele voorbeelden van gegevens uit de dataset, samen met de bijbehorende annotaties:

Voorbeeldafbeelding dataset

  • Opdracht 1: Objectdetectie in afbeeldingen - Deze afbeelding demonstreert een voorbeeld van objectdetectie in afbeeldingen, waarbij objecten worden geannoteerd met bounding boxes. De dataset biedt een grote verscheidenheid aan afbeeldingen van verschillende locaties, omgevingen en dichtheden om de ontwikkeling van modellen voor deze taak te vergemakkelijken.

Het voorbeeld laat de verscheidenheid en complexiteit van de gegevens in de VisDrone dataset zien en benadrukt het belang van hoogwaardige sensorgegevens voor computervisietaken met behulp van drones.

Citaten en erkenningen

Als je de VisDrone dataset gebruikt in je onderzoek of ontwikkeling, citeer dan het volgende document:

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

We willen graag het AISKYEYE team van het Lab of Machine Learning and Data Mining, Tianjin University, China, bedanken voor het maken en onderhouden van de VisDrone dataset als een waardevolle bron voor de drone-gebaseerde computer vision onderzoeksgemeenschap. Ga voor meer informatie over de VisDrone dataset en de makers ervan naar de VisDrone Dataset GitHub repository.



Aangemaakt 2023-11-12, Bijgewerkt 2023-11-22
Auteurs: glenn-jocher (3), Laughing-q (1)

Reacties