Seguridad preparada para empresas: Conforme a ISO 27001 + SOC 2 Tipo I.
No license

Link to this sectionDataset VisDrone#

El VisDrone Dataset es un benchmark de imágenes de drones a gran escala cuyo subconjunto de detección (VisDrone2019-DET) proporciona 8.629 imágenes aéreas — 6.471 de entrenamiento, 548 de validación y 1.610 de prueba (test-dev) — anotadas con 10 clases de objetos para detección de objetos. Fue creado por el equipo AISKYEYE en el Laboratorio de Machine Learning y Data Mining de la Universidad de Tianjin, China.



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

El benchmark completo de VisDrone comprende 288 clips de vídeo (261.908 fotogramas) y 10.209 imágenes estáticas capturadas por cámaras montadas en drones en 14 ciudades diferentes de China, cubriendo entornos urbanos y rurales, escenas dispersas y concurridas, además de diversas condiciones meteorológicas y de iluminación. Sus fotogramas contienen más de 2,6 millones de bounding boxes anotadas manualmente, con atributos adicionales como visibilidad de la escena, clase de objeto y oclusión. La configuración VisDrone.yaml de Ultralytics utiliza el subconjunto de imágenes estáticas VisDrone2019-DET de este benchmark.

Link to this sectionCaracterísticas clave#

  • Objetos pequeños y densos: Los puntos de vista aéreos hacen que los objetivos sean diminutos y estén amontonados; las 548 imágenes de validación por sí solas contienen 38.759 cajas etiquetadas, un promedio de unos 70 objetos por imagen.
  • Diversidad de escenas: Imágenes de 14 ciudades chinas que cubren ubicaciones urbanas y rurales, día y noche, y diferentes condiciones meteorológicas.
  • Anotaciones enriquecidas: Más de 2,6 millones de cajas en todo el benchmark, con atributos de oclusión y visibilidad.
  • Divisones predefinidas: Divisiones fijas de entrenamiento / validación / prueba (6.471 / 548 / 1.610 imágenes) para una evaluación consistente.

Link to this sectionEstructura del dataset#

La configuración VisDrone de Ultralytics cubre el subconjunto de imágenes VisDrone2019-DET, dividido en tres partes:

SplitImágenesDescripción
Entrenar6.471Imágenes aéreas etiquetadas usadas para entrenar el detector
Validación548Imágenes utilizadas para la evaluación durante el desarrollo
Test-dev1.610Imágenes reservadas para la evaluación final del modelo entrenado

Una cuarta división, test-challenge (1.580 imágenes), se reserva para la competición VisDrone y no se descarga, razón por la cual el conjunto completo DET suma 10.209 imágenes.

El conjunto de datos anota 10 clases de objetos: peatón, personas, bicicleta, coche, furgoneta, camión, triciclo, triciclo con toldo, autobús y motor. VisDrone distingue entre peatón (una persona de pie o caminando) y personas (una persona en cualquier otra postura).

Conversión automática a YOLO

En el primer uso, el script de descarga convierte las anotaciones originales de VisDrone al formato YOLO, omitiendo las regiones marcadas como ignoradas (lo que también excluye la categoría "otros" no utilizada).

Link to this sectionAplicaciones#

Las escenas densas y los objetivos diminutos de VisDrone lo convierten en un estándar de referencia para la detección de objetos pequeños desde perspectivas aéreas. Las aplicaciones comunes incluyen:

  • Monitorización del tráfico y conteo de vehículos desde UAVs
  • Análisis de multitudes y vigilancia de seguridad pública
  • Inspección de infraestructuras y obras de construcción
  • Investigación en computer vision sobre la detección de objetos pequeños en escenas abarrotadas

Para otros benchmarks de imágenes aéreas, consulta el dataset xView centrado en satélites o el dataset DOTA-v2 de cajas orientadas.

Link to this sectionYAML del dataset#

El archivo VisDrone.yaml define la configuración del conjunto de datos: las rutas, los nombres de las clases y el script de descarga y conversión automática. Se mantiene en el repositorio de Ultralytics 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 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

Link to this sectionUso#

~2 GB de descarga

VisDrone se descarga automáticamente la primera vez que entrenas — tres archivos que suman cerca de 2 GB — y requiere aproximadamente 4 GB de espacio libre en disco durante la extracción y conversión.

Para entrenar un modelo YOLO26n en el dataset VisDrone durante 100 epochs con un tamaño de imagen de 640, puedes usar 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 - dataset will auto-download on first run
results = model.train(data="VisDrone.yaml", epochs=100, imgsz=640)

Para etiquetar imágenes aéreas adicionales y gestionar los entrenamientos de VisDrone en tu navegador, usa Ultralytics Platform.

Link to this sectionEjemplos de datos y anotaciones#

La muestra a continuación muestra una escena típica de VisDrone: una vista aérea sobre una carretera transitada donde los peatones y vehículos aparecen como objetivos pequeños y densamente empaquetados, muchos de ellos parcialmente ocluidos unos por otros.

Imágenes aéreas de drones del dataset VisDrone con detección de objetos

Link to this sectionCitas y agradecimientos#

Si utilizas el dataset VisDrone en tu investigación o trabajo de 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={2022},
  volume={44},
  number={11},
  pages={7380-7399},
  doi={10.1109/TPAMI.2021.3119563}}

Nos gustaría agradecer al equipo AISKYEYE en el Laboratorio de Machine Learning y Data Mining, de la Universidad de Tianjin, China, por crear y mantener el conjunto de datos VisDrone. Para obtener más información, visita el repositorio de GitHub del dataset VisDrone.

Link to this sectionFAQ#

Link to this section¿Para qué se utiliza el conjunto de datos VisDrone?#

VisDrone se utiliza para entrenar y evaluar detectores en imágenes capturadas por drones, donde los objetos son pequeños, densos y vistos desde arriba. Su combinación de perspectivas aéreas, escenas concurridas y condiciones variables lo convierte en un banco de pruebas estándar para el monitoreo de tráfico basado en UAV, análisis de multitudes e investigación en detección de objetos pequeños.

Link to this section¿Cuántas imágenes y clases tiene VisDrone?#

La configuración VisDrone de Ultralytics contiene 8.629 imágenes: 6.471 para entrenamiento, 548 para validación y 1.610 para pruebas (test-dev). Todas las divisiones comparten las mismas 10 clases: peatón, personas, bicicleta, coche, furgoneta, camión, triciclo, triciclo con toldo, autobús y motor. Consulta Estructura del conjunto de datos para ver el desglose completo.

Link to this section¿Cómo descargo el conjunto de datos VisDrone?#

VisDrone se descarga automáticamente la primera vez que entrenas con data="VisDrone.yaml" — no se requieren pasos manuales. El script obtiene tres archivos (aproximadamente 2 GB) de los assets de lanzamiento de Ultralytics en GitHub y convierte las anotaciones al formato YOLO. La división test-challenge reservada de la competición no está incluida.

Link to this section¿Cómo entreno un modelo YOLO26 en el conjunto de datos VisDrone?#

Entrena un modelo YOLO26n en VisDrone durante 100 épocas con un tamaño de imagen de 640:

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)

Para configuraciones detalladas, consulta la página de Entrenamiento y los consejos para el entrenamiento de modelos.

Link to this section¿Por qué VisDrone es difícil para los detectores de objetos y cómo puedo mejorar la precisión?#

Los objetos en VisDrone son minúsculos en relación con el fotograma — a menudo solo unas pocas docenas de píxeles — y aparecen en grupos densos y fuertemente ocluidos, lo que pone a prueba a los detectores ajustados en fotos a nivel del suelo. Entrenar y predecir a una resolución mayor (por ejemplo imgsz=1280 con un batch más pequeño) recupera objetivos pequeños, y la inferencia por mosaicos SAHI divide las imágenes grandes para que los objetos pequeños ocupen más de cada ventana de inferencia.

Link to this section¿Cuál es la diferencia entre VisDrone-DET y el benchmark VisDrone completo?#

El benchmark VisDrone completo abarca cinco tareas: detección de objetos en imágenes, detección de objetos en vídeos, seguimiento de un solo objeto, seguimiento de múltiples objetos y conteo de multitudes, en 288 clips de vídeo y 10.209 imágenes estáticas. La configuración VisDrone.yaml de Ultralytics cubre únicamente la tarea de detección en imágenes (VisDrone2019-DET), descargando sus 6.471 imágenes de entrenamiento, 548 de validación y 1.610 de prueba (test-dev).

Link to this section¿Cómo cito VisDrone en mi investigación?#

Cita el artículo "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI, vol. 44, n.º 11, 2022, DOI 10.1109/TPAMI.2021.3119563); la entrada BibTeX completa se encuentra en la sección Citas y agradecimientos más arriba.

Comentarios