Skip to content

Jeu de données VisDrone

L'ensemble de données VisDrone est un benchmark à grande échelle créé par l'équipe AISKYEYE du Lab of Machine Learning and Data Mining, de l'université de Tianjin, en Chine. Il contient des données de vérité terrain soigneusement annotées pour diverses tâches de vision par ordinateur liées à l'analyse d'images et de vidéos par drone.

VisDrone est composé de 288 clips vidéo avec 261 908 images et 10 209 images statiques, capturées par diverses caméras montées sur des drones. L'ensemble de données couvre un large éventail d'aspects, notamment le lieu (14 villes différentes à travers la Chine), l'environnement (urbain et rural), les objets (piétons, véhicules, vélos, etc.) et la densité (scènes clairsemées et bondées). L'ensemble de données a été collecté à l'aide de diverses plateformes de drones dans différents scénarios et conditions météorologiques et d'éclairage. Ces images sont annotées manuellement avec plus de 2,6 millions de boîtes englobantes de cibles telles que des piétons, des voitures, des vélos et des tricycles. Des attributs tels que la visibilité de la scène, la classe d'objet et l'occlusion sont également fournis pour une meilleure utilisation des données.

Structure de l'ensemble de données

L'ensemble de données VisDrone est organisé en cinq sous-ensembles principaux, chacun se concentrant sur une tâche spécifique :

  1. Tâche 1: Détection d'objets dans les images
  2. Tâche 2: détection d'objets dans les vidéos
  3. Tâche 3: suivi d'un seul objet
  4. Tâche 4: suivi de plusieurs objets
  5. Tâche 5: compter les foules

Applications

L'ensemble de données VisDrone est largement utilisé pour former et évaluer des modèles d'apprentissage profond dans des tâches de vision par ordinateur basées sur des drones, telles que la détection et le suivi d'objets, et le comptage de foules. L'ensemble diversifié de données de capteurs, d'annotations d'objets et d'attributs de l'ensemble de données en fait une ressource précieuse pour les chercheurs et les praticiens dans le domaine de la vision informatique par drone.

Jeu de données YAML

Un fichier YAML (Yet Another Markup Language) est utilisé pour définir la configuration du jeu de données. Il contient des informations sur les chemins d'accès au jeu de données, les classes et d'autres informations pertinentes. Dans le cas du jeu de données Visdrone, le fichier VisDrone.yaml est maintenu à 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

Utilisation

Pour entraîner un modèle YOLOv8n sur l'ensemble de données VisDrone pour 100 époques avec une taille d'image de 640, tu peux utiliser les extraits de code suivants. Pour obtenir une liste complète des arguments disponibles, reporte-toi à la page Entraînement du modèle.

Exemple de train

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

Exemples de données et d'annotations

Le jeu de données VisDrone contient un ensemble varié d'images et de vidéos capturées par des caméras montées sur des drones. Voici quelques exemples de données issues du jeu de données, ainsi que les annotations correspondantes :

Image de l'échantillon du jeu de données

  • Tâche 1: Détection d'objets dans les images - Cette image montre un exemple de détection d'objets dans les images, où les objets sont annotés avec des boîtes de délimitation. L'ensemble de données fournit une grande variété d'images prises à différents endroits, environnements et densités afin de faciliter le développement de modèles pour cette tâche.

Cet exemple montre la variété et la complexité des données de l'ensemble de données VisDrone et souligne l'importance des données de capteur de haute qualité pour les tâches de vision par ordinateur basées sur les drones.

Citations et remerciements

Si tu utilises le jeu de données VisDrone dans tes travaux de recherche ou de développement, cite l'article suivant :

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

Nous tenons à remercier l'équipe AISKYEYE du Lab of Machine Learning and Data Mining de l'Université de Tianjin, en Chine, pour avoir créé et entretenu le jeu de données VisDrone, qui constitue une ressource précieuse pour la communauté de recherche en vision par ordinateur basée sur les drones. Pour plus d'informations sur le jeu de données VisDrone et ses créateurs, visite le dépôt GitHub du jeu de données VisDrone.



Créé le 2023-11-12, Mis à jour le 2023-11-22
Auteurs : glenn-jocher (3), Laughing-q (1)

Commentaires