YOLO Vision 2026:
No license

Dataset VisDrone#

O VisDrone Dataset é um benchmark de imagens de drones em larga escala cuja subcoleção de deteção (VisDrone2019-DET) fornece 8.629 imagens aéreas — 6.471 de treino, 548 de validação e 1.610 de teste-desenvolvimento — anotadas com 10 classes de objetos para object detection. Foi criado pela equipa AISKYEYE do Laboratório de Machine Learning e Data Mining da Universidade de Tianjin, na China.



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

O benchmark VisDrone completo inclui 288 clips de vídeo (261.908 fotogramas) e 10.209 imagens estáticas capturadas por câmaras montadas em drones em 14 cidades diferentes em toda a China, abrangendo ambientes urbanos e rurais, cenas dispersas e cheias de gente, e condições variadas de clima e iluminação. Os seus fotogramas contêm mais de 2,6 milhões de bounding boxes anotadas manualmente, com atributos extra como visibilidade da cena, classe do objeto e oclusão. A configuração VisDrone.yaml da Ultralytics utiliza a subcoleção de imagens estáticas VisDrone2019-DET deste benchmark.

Principais recursos#

  • Objetos pequenos e densos: Pontos de vista aéreos tornam os alvos minúsculos e aglomerados — apenas as 548 imagens de validação contêm 38.759 caixas rotuladas, uma média de cerca de 70 objetos por imagem.
  • Diversidade de cenas: Imagens de 14 cidades chinesas cobrindo locais urbanos e rurais, dia e noite, e diferentes condições climáticas.
  • Anotações ricas: Mais de 2,6 milhões de caixas em todo o benchmark, com atributos de oclusão e visibilidade.
  • Divisões pré-definidas: Divisões fixas de treino / val / test-dev (6.471 / 548 / 1.610 imagens) para avaliação consistente.

Estrutura do Dataset#

A configuração VisDrone da Ultralytics cobre o subconjunto de imagens VisDrone2019-DET, dividido em três partes:

DivisãoImagensDescrição
Treinar6,471Imagens aéreas rotuladas usadas para treinar o detector
Validação548Imagens usadas para evaluation durante o desenvolvimento
Test-dev1,610Imagens reservadas para a avaliação final do modelo treinado

Uma quarta divisão, test-challenge (1.580 imagens), é mantida reservada para a competição VisDrone e não é baixada, motivo pelo qual o conjunto DET completo totaliza 10.209 imagens.

O conjunto de dados anota 10 classes de objetos: pedestre, pessoas, bicicleta, carro, van, caminhão, triciclo, triciclo com toldo, ônibus e motor. O VisDrone distingue pedestre (uma pessoa parada ou caminhando) de pessoas (uma pessoa em qualquer outra postura).

Conversão automática YOLO

No primeiro uso, o script de download converte as anotações originais do VisDrone para o formato YOLO, ignorando regiões marcadas como descartadas (o que também exclui a categoria "outros" não utilizada).

Aplicações#

As cenas densas e os alvos minúsculos do VisDrone tornam-no num benchmark padrão para small-object detection a partir de pontos de vista aéreos. As aplicações comuns incluem:

  • Monitoramento de tráfego e contagem de veículos a partir de UAVs
  • Análise de multidões e vigilância de segurança pública
  • Inspeção de infraestrutura e canteiros de obras
  • Investigação em Computer vision sobre a deteção de pequenos objetos em cenas complexas

Para outros benchmarks de imagens aéreas, consulta o xView dataset focado em satélites ou o DOTA-v2 dataset de caixas orientadas.

YAML do Dataset#

O ficheiro VisDrone.yaml define a configuração do dataset — os caminhos do dataset, os nomes das classes e o script automático de transferência e conversão. É mantido no repositório da Ultralytics em 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

Uso#

~2 GB de download

O VisDrone baixa automaticamente na primeira vez que você treina — três arquivos totalizando cerca de 2 GB — e precisa de aproximadamente 4 GB de espaço livre em disco durante a extração e conversão.

Para treinar um modelo YOLO26n no dataset VisDrone durante 100 epochs com um tamanho de imagem de 640, podes usar os seguintes troços de código. Para uma lista abrangente de argumentos disponíveis, consulta a página de Training do modelo.

Exemplo de Treinamento
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 rotular imagens aéreas adicionais e gerir execuções de treino do VisDrone no teu navegador, usa a Ultralytics Platform.

Dados de Amostra e Anotações#

A amostra abaixo mostra uma cena típica do VisDrone: um ponto de vista aéreo sobre uma estrada movimentada, onde pedestres e veículos aparecem como alvos pequenos e densamente compactados, muitos parcialmente ocluídos uns pelos outros.

VisDrone dataset aerial drone imagery with object detection

Citações e Agradecimentos#

Se utilizares o dataset VisDrone no teu trabalho de investigação ou desenvolvimento, por favor cita o seguinte artigo:

Citação
@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}}

Gostaríamos de agradecer à equipa AISKYEYE do Laboratório de Machine Learning e Data Mining da Universidade de Tianjin, na China, por criar e manter o dataset VisDrone. Para mais informações, visita o VisDrone Dataset GitHub repository.

FAQ#

  • O VisDrone é usado para treinar e avaliar detectores em imagens capturadas por drones, onde os objetos são pequenos, densos e vistos de cima. Sua combinação de pontos de vista aéreos, cenas lotadas e condições variadas o torna um banco de testes padrão para monitoramento de tráfego baseado em UAV, análise de multidões e pesquisa de detecção de pequenos objetos.

  • A configuração VisDrone da Ultralytics contém 8.629 imagens: 6.471 para treino, 548 para validação e 1.610 para teste (test-dev). Todas as divisões partilham as mesmas 10 classes: peão, pessoas, bicicleta, automóvel, carrinha, camião, triciclo, triciclo com cobertura, autocarro e motociclo. Consulta a Dataset Structure para ver a descrição completa.

  • O VisDrone é descarregado automaticamente na primeira vez que treinas com data="VisDrone.yaml" — não são necessários passos manuais. O script obtém três arquivos (cerca de 2 GB) a partir dos recursos de lançamento do GitHub da Ultralytics e converte as anotações para o formato YOLO. A divisão de teste do concurso retida não está incluída.

  • Treine um modelo YOLO26n no VisDrone por 100 épocas com um tamanho de imagem de 640:

    Exemplo de Treinamento
    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 configurações detalhadas, consulta a página de Training e model training tips.

  • Os objetos no VisDrone são minúsculos em relação ao fotograma — muitas vezes apenas algumas dezenas de píxeis — e aparecem em grupos densos e fortemente ocluídos, o que sobrecarrega os detetores sintonizados em fotografias ao nível do solo. O treino e a previsão a uma resolução mais alta (por exemplo, imgsz=1280 com um lote mais pequeno) recuperam alvos pequenos, e a SAHI tiled inference divide imagens grandes para que os objetos pequenos ocupem uma maior parte de cada janela de inferência.

  • O benchmark VisDrone completo abrange cinco tarefas — deteção de objetos em imagens, deteção de objetos em vídeos, rastreio de objeto único, multi-object tracking e contagem de multidões — em 288 clips de vídeo e 10.209 imagens estáticas. A configuração VisDrone.yaml da Ultralytics abrange apenas a tarefa de deteção de imagens (VisDrone2019-DET), descarregando as suas 6.471 imagens de treino, 548 de validação e 1.610 de teste-desenvolvimento.

  • Cita o artigo "Detection and Tracking Meet Drones Challenge" (IEEE TPAMI, vol. 44, n.º 11, 2022, DOI 10.1109/TPAMI.2021.3119563); a entrada BibTeX completa encontra-se na secção Citations and Acknowledgments acima.

Comentários