Ultralytics YOLO27 :
No license

Jeu de données VisDrone#

Le jeu de données VisDrone est un benchmark à grande échelle d’images prises par drone. Son sous-ensemble de détection (VisDrone2019-DET) comprend 8,629 images aériennes — 6,471 pour l’entraînement, 548 pour la validation et 1,610 pour le test-dev — annotées avec 10 classes d’objets pour la détection d’objets. Il a été créé par l’équipe AISKYEYE du laboratoire de l’apprentissage automatique et de l’exploration de données de l’université de Tianjin, en Chine.



Regarder : Comment entraîner Ultralytics YOLO sur le jeu de données VisDrone | Détection aérienne | Tutoriel complet 🚀

Le benchmark VisDrone complet comprend 288 séquences vidéo (261,908 images) et 10,209 images fixes capturées par des caméras montées sur des drones dans 14 villes différentes de Chine. Il couvre des environnements urbains et ruraux, des scènes peu denses et bondées, ainsi que des conditions météorologiques et d’éclairage variées. Ses images contiennent plus de 2,6 millions de boîtes englobantes annotées manuellement, accompagnées d’attributs supplémentaires tels que la visibilité de la scène, la classe de l’objet et son occultation. La configuration Ultralytics VisDrone.yaml utilise le sous-ensemble d’images fixes VisDrone2019-DET de ce benchmark.

Fonctionnalités clés#

  • Objets petits et nombreux : les vues aériennes rendent les cibles minuscules et rapprochées — les 548 images de validation contiennent à elles seules 38,759 boîtes annotées, soit environ 70 objets par image.
  • Diversité des scènes : les images proviennent de 14 villes chinoises et couvrent des environnements urbains et ruraux, le jour et la nuit, ainsi que différentes conditions météorologiques.
  • Annotations riches : plus de 2,6 millions de boîtes dans l’ensemble du benchmark, avec des attributs d’occultation et de visibilité.
  • Partitions prédéfinies : des partitions fixes train / val / test-dev (6,471 / 548 / 1,610 images) pour une évaluation cohérente.

Structure du jeu de données#

La configuration VisDrone d’Ultralytics couvre le sous-ensemble d’images VisDrone2019-DET, réparti en trois parties :

PartitionImagesDescription
Entraînement6,471Images aériennes annotées utilisées pour entraîner le détecteur
Validation548Images utilisées pour l’évaluation pendant le développement
Test-dev1,610Images mises à part pour l’évaluation finale du modèle entraîné

Une quatrième partition, test-challenge (1,580 images), est réservée à la compétition VisDrone et n’est pas téléchargée, ce qui explique pourquoi l’ensemble DET complet compte 10,209 images.

Le jeu de données annote 10 classes d’objets : pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus et motor. VisDrone distingue pedestrian (une personne debout ou en train de marcher) de people (une personne dans toute autre posture).

Conversion automatique au format YOLO

Lors de la première utilisation, le script de téléchargement convertit les annotations VisDrone d’origine au format YOLO et ignore les régions signalées comme ignorées (ce qui exclut également la catégorie « others », qui n’est pas utilisée).

Applications#

Les scènes denses et les cibles minuscules de VisDrone en font un benchmark de référence pour la détection de petits objets depuis des vues aériennes. Parmi les applications courantes :

  • Surveillance du trafic et comptage des véhicules à partir de UAV
  • Analyse des foules et surveillance pour la sécurité publique
  • Inspection des infrastructures et des chantiers de construction
  • Recherche en vision par ordinateur sur la détection de petits objets dans des scènes encombrées

Pour d’autres benchmarks d’images aériennes, consulte le jeu de données xView, axé sur les images satellite, ou le jeu de données DOTA-v2, qui utilise des boîtes orientées.

Fichier YAML du jeu de données#

Le fichier VisDrone.yaml définit la configuration du jeu de données — les chemins d’accès, les noms des classes et le script de téléchargement et de conversion automatiques. Il est maintenu dans le dépôt Ultralytics à https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VisDrone.yaml.

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

Utilisation#

Téléchargement d’environ 2 Go

VisDrone se télécharge automatiquement lors du premier entraînement — trois archives totalisant environ 2 Go — et nécessite environ 4 Go d’espace disque libre pendant l’extraction et la conversion.

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

Exemple d’entraînement
from ultralytics import YOLO

# Charger un modèle
model = YOLO("yolo26n.pt")  # charger un modèle préentraîné (recommandé pour l’entraînement)

# Entraîner le modèle - le jeu de données se télécharge automatiquement à la première exécution
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

Pour annoter d’autres images aériennes et gérer les exécutions d’entraînement VisDrone dans ton navigateur, utilise Ultralytics Platform.

Données et annotations d’exemple#

L’exemple ci-dessous montre une scène VisDrone typique : une vue aérienne d’une route très fréquentée où les piétons et les véhicules apparaissent comme de petites cibles rapprochées, souvent partiellement masquées les unes par les autres.

Images aériennes de drones du jeu de données VisDrone avec détection d’objets

Citations et remerciements#

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

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

Nous souhaitons saluer l’équipe AISKYEYE du laboratoire d’apprentissage automatique et d’exploration de données de l’université de Tianjin, en Chine, pour avoir créé et maintenu le jeu de données VisDrone. Pour en savoir plus, consulte le dépôt GitHub du jeu de données VisDrone.

FAQ#

  • VisDrone sert à entraîner et à évaluer des détecteurs sur des images capturées par drone, où les objets sont petits, nombreux et vus d’en haut. La combinaison de vues aériennes, de scènes bondées et de conditions variées en fait un banc d’essai de référence pour la surveillance du trafic par UAV, l’analyse des foules et la recherche sur la détection de petits objets.

  • La configuration VisDrone d’Ultralytics contient 8,629 images : 6,471 pour l’entraînement, 548 pour la validation et 1,610 pour le test (test-dev). Les partitions partagent les mêmes 10 classes : pedestrian, people, bicycle, car, van, truck, tricycle, awning-tricycle, bus et motor. Consulte Structure du jeu de données pour obtenir la répartition complète.

  • VisDrone se télécharge automatiquement lors du premier entraînement avec data="VisDrone.yaml" — aucune étape manuelle n’est nécessaire. Le script récupère trois archives (environ 2 Go) depuis les ressources de la version GitHub d’Ultralytics et convertit les annotations au format YOLO. La partition test-challenge réservée à la compétition n’est pas incluse.

  • Entraîne un modèle YOLO26n sur VisDrone pendant 100 époques avec une taille d’image de 640 :

    Exemple d’entraînement
    from ultralytics import YOLO
    
    # Charger un modèle
    model = YOLO("yolo26n.pt")  # charger un modèle préentraîné (recommandé pour l’entraînement)
    
    # Entraîner le modèle
    results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

    Pour consulter les configurations détaillées, consulte la page Entraînement et les conseils d’entraînement des modèles.

  • Les objets de VisDrone sont minuscules par rapport à l’image — souvent de quelques dizaines de pixels seulement — et apparaissent en groupes denses et fortement occultés, ce qui met à rude épreuve les détecteurs entraînés sur des photos prises au niveau du sol. Entraîner le modèle et effectuer les prédictions à une résolution plus élevée (par exemple imgsz=1280 avec une taille de lot plus petite) permet de mieux détecter les petites cibles, tandis que l’inférence par tuiles SAHI découpe les grandes images afin que les petits objets occupent une plus grande partie de chaque fenêtre d’inférence.

  • Le benchmark VisDrone complet couvre cinq tâches — détection d’objets dans des images, détection d’objets dans des vidéos, suivi d’un objet unique, suivi multi-objets et comptage de foule — sur 288 séquences vidéo et 10,209 images fixes. La configuration Ultralytics VisDrone.yaml couvre uniquement la tâche de détection dans les images (VisDrone2019-DET) et télécharge ses 6,471 images d’entraînement, 548 images de validation et 1,610 images de test-dev.

  • Cite l’article « Detection and Tracking Meet Drones Challenge » (IEEE TPAMI, vol. 44, no 11, 2022, DOI 10.1109/TPAMI.2021.3119563) ; l’entrée BibTeX complète se trouve dans la section Citations et remerciements ci-dessus.

Commentaires