Dataset VisDrone

El VisDrone Dataset es un benchmark a gran escala creado por el equipo AISKYEYE del Laboratorio de Machine Learning y Minería de Datos de la Universidad de Tianjin, China. Contiene datos de verdad fundamental cuidadosamente anotados para diversas tareas de visión artificial relacionadas con el análisis de imágenes y vídeos basados en drones.



Watch: How to Train Ultralytics YOLO26 on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀

VisDrone se compone de 288 clips de vídeo con 261,908 fotogramas y 10,209 imágenes estáticas, capturados por varias cámaras montadas en drones. El conjunto de datos cubre una amplia gama de aspectos, incluyendo la ubicación (14 ciudades diferentes en China), el entorno (urbano y rural), los objetos (peatones, vehículos, bicicletas, etc.) y la densidad (escenas dispersas y concurridas). El conjunto de datos se recopiló utilizando varias plataformas de drones en diferentes escenarios y condiciones climáticas y de iluminación. Estos fotogramas están anotados manualmente con más de 2.6 millones de cajas delimitadoras (bounding boxes) de objetivos como peatones, coches, bicicletas y triciclos. También se proporcionan atributos como la visibilidad de la escena, la clase de objeto y la oclusión para una mejor utilización de los datos.

Estructura del conjunto de datos

El conjunto de datos VisDrone está organizado en cinco subconjuntos principales, cada uno centrado en una tarea específica:

  1. Tarea 1: Detección de objetos en imágenes
  2. Tarea 2: Detección de objetos en vídeos
  3. Tarea 3: Seguimiento de un solo objeto
  4. Tarea 4: Seguimiento de múltiples objetos
  5. Tarea 5: Recuento de multitudes

Aplicaciones

El conjunto de datos VisDrone se utiliza ampliamente para entrenar y evaluar modelos de deep learning en tareas de computer vision basadas en drones, como la detección de objetos, el seguimiento de objetos y el recuento de multitudes. El conjunto diverso de datos de sensores, anotaciones de objetos y atributos del conjunto de datos lo convierte en un recurso valioso para investigadores y profesionales en el campo de la visión artificial basada en drones.

YAML del conjunto de datos

Se utiliza un archivo YAML (Yet Another Markup Language) para definir la configuración del conjunto de datos. Contiene información sobre las rutas del conjunto de datos, las clases y otra información relevante. En el caso del conjunto de datos Visdrone, el archivo VisDrone.yaml se mantiene en 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.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: 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

Uso

Para entrenar un modelo YOLO26n en el conjunto de datos VisDrone durante 100 epochs con un tamaño de imagen de 640, puedes utilizar los siguientes fragmentos de código. Para obtener una lista completa de los argumentos disponibles, consulta la página de Training del modelo.

Ejemplo de entrenamiento
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)

Muestra de datos y anotaciones

El conjunto de datos VisDrone contiene un conjunto diverso de imágenes y vídeos capturados por cámaras montadas en drones. Aquí tienes algunos ejemplos de datos del conjunto de datos, junto con sus anotaciones correspondientes:

Imagen aérea de drones del conjunto de datos VisDrone con detección de objetos

  • Tarea 1: Object detection en imágenes - Esta imagen muestra un ejemplo de detección de objetos en imágenes, donde los objetos se anotan con bounding boxes. El conjunto de datos proporciona una gran variedad de imágenes tomadas desde diferentes ubicaciones, entornos y densidades para facilitar el desarrollo de modelos para esta tarea.

El ejemplo muestra la variedad y complejidad de los datos en el conjunto de datos VisDrone y destaca la importancia de datos de sensores de alta calidad para tareas de visión artificial basadas en drones.

Citas y reconocimientos

Si utilizas el conjunto de datos VisDrone en tu trabajo de investigación o desarrollo, por favor cita el siguiente artículo:

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

Nos gustaría agradecer al equipo AISKYEYE del Laboratorio de Machine Learning y Data Mining, Universidad de Tianjin, China, por crear y mantener el conjunto de datos VisDrone como un recurso valioso para la comunidad de investigación de visión artificial basada en drones. Para obtener más información sobre el conjunto de datos VisDrone y sus creadores, visita el repositorio de GitHub del VisDrone Dataset.

Preguntas frecuentes

¿Qué es el VisDrone Dataset y cuáles son sus características principales?

El VisDrone Dataset es un benchmark a gran escala creado por el equipo AISKYEYE de la Universidad de Tianjin, China. Está diseñado para diversas tareas de visión artificial relacionadas con el análisis de imágenes y vídeos basados en drones. Las características principales incluyen:

  • Composición: 288 clips de vídeo con 261,908 fotogramas y 10,209 imágenes estáticas.
  • Anotaciones: Más de 2.6 millones de cajas delimitadoras para objetos como peatones, coches, bicicletas y triciclos.
  • Diversidad: Recopilado en 14 ciudades, en entornos urbanos y rurales, bajo diferentes condiciones meteorológicas y de iluminación.
  • Tareas: Dividido en cinco tareas principales: detección de objetos en imágenes y vídeos, seguimiento de uno y múltiples objetos, y recuento de multitudes.

¿Cómo puedo utilizar el VisDrone Dataset para entrenar un modelo YOLO26 con Ultralytics?

Para entrenar un modelo YOLO26 en el conjunto de datos VisDrone durante 100 epochs con un tamaño de imagen de 640, puedes seguir estos pasos:

Ejemplo de entrenamiento
from ultralytics import YOLO

# Load a pretrained model
model = YOLO("yolo26n.pt")

# Train the model
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

Para opciones de configuración adicionales, por favor consulta la página de Training del modelo.

¿Cuáles son los subconjuntos principales del conjunto de datos VisDrone y sus aplicaciones?

El conjunto de datos VisDrone se divide en cinco subconjuntos principales, cada uno adaptado para una tarea específica de visión artificial:

  1. Tarea 1: Detección de objetos en imágenes.
  2. Tarea 2: Detección de objetos en vídeos.
  3. Tarea 3: Seguimiento de un solo objeto.
  4. Tarea 4: Seguimiento de múltiples objetos.
  5. Tarea 5: Recuento de multitudes.

Estos subconjuntos se utilizan ampliamente para entrenar y evaluar modelos de deep learning en aplicaciones basadas en drones como vigilancia, monitorización de tráfico y seguridad pública.

¿Dónde puedo encontrar el archivo de configuración para el conjunto de datos VisDrone en Ultralytics?

El archivo de configuración para el conjunto de datos VisDrone, VisDrone.yaml, se puede encontrar en el repositorio de Ultralytics en el siguiente enlace: VisDrone.yaml.

¿Cómo puedo citar el conjunto de datos VisDrone si lo utilizo en mi investigación?

Si utilizas el conjunto de datos VisDrone en tu trabajo de investigación o desarrollo, por favor cita el siguiente artículo:

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

Comentarios