Link to this sectionDataset VisDrone#
O VisDrone Dataset é um benchmark de imagens de drones em larga escala, cujo subconjunto de detecção (VisDrone2019-DET) fornece 8.629 imagens aéreas — 6.471 de treino, 548 de validação e 1.610 de test-dev — anotadas com 10 classes de objetos para detecção de objetos. Foi criado pela equipe AISKYEYE do Laboratório de Machine Learning e Data Mining da Universidade de Tianjin, China.
Watch: How to Train Ultralytics YOLO on the VisDrone Dataset | Aerial Detection | Complete Tutorial 🚀
O benchmark completo do VisDrone compreende 288 videoclipes (261.908 frames) e 10.209 imagens estáticas capturadas por câmeras montadas em drones em 14 cidades diferentes na China, abrangendo ambientes urbanos e rurais, cenas esparsas e lotadas, e condições climáticas e de iluminação variadas. Seus frames contêm mais de 2,6 milhões de bounding boxes anotadas manualmente, com atributos extras como visibilidade de cena, classe de objeto e oclusão. A configuração VisDrone.yaml da Ultralytics utiliza o subconjunto de imagens estáticas VisDrone2019-DET deste benchmark.
Link to this sectionPrincipais 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.
Link to this sectionEstrutura do Dataset#
A configuração VisDrone da Ultralytics cobre o subconjunto de imagens VisDrone2019-DET, dividido em três partes:
| Divisão | Imagens | Descrição |
|---|---|---|
| Treinar | 6.471 | Imagens aéreas rotuladas usadas para treinar o detector |
| Validação | 548 | Imagens usadas para avaliação durante o desenvolvimento |
| Test-dev | 1.610 | Imagens 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).
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).
Link to this sectionAplicações#
As cenas densas e os alvos minúsculos do VisDrone tornam-no um benchmark padrão para detecção de pequenos objetos a partir de pontos de vista aéreos. 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
- Computer vision pesquisa sobre a detecção de pequenos objetos em cenas complexas
Para outros benchmarks de imagens aéreas, veja o dataset xView, focado em satélites, ou o dataset DOTA-v2, de caixas orientadas.
Link to this sectionYAML do Dataset#
O arquivo VisDrone.yaml define a configuração do conjunto de dados — os caminhos do conjunto de dados, nomes de classes e o script automático de download e conversão. Ele é mantido no repositório da Ultralytics em https://github.com/ultralytics/ultralytics/blob/main/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 directoryLink to this sectionUso#
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 snippets de código. Para uma lista completa de argumentos disponíveis, consulta a página de Treino do modelo.
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 gerenciar execuções de treinamento do VisDrone no seu navegador, use a Ultralytics Platform.
Link to this sectionDados 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.

Link to this sectionCitações e Agradecimentos#
Se utilizares o dataset VisDrone no teu trabalho de investigação ou desenvolvimento, por favor cita o seguinte artigo:
@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 à equipe AISKYEYE do Laboratório de Machine Learning e Data Mining, Universidade de Tianjin, China, por criar e manter o conjunto de dados VisDrone. Para mais informações, visite o repositório GitHub do VisDrone Dataset.
Link to this sectionFAQ#
Link to this sectionPara que serve o conjunto de dados VisDrone?#
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.
Link to this sectionQuantas imagens e classes o VisDrone possui?#
A configuração VisDrone da Ultralytics contém 8.629 imagens: 6.471 para treinamento, 548 para validação e 1.610 para teste (test-dev). Todas as divisões compartilham as mesmas 10 classes: pedestre, pessoas, bicicleta, carro, van, caminhão, triciclo, triciclo com toldo, ônibus e motor. Veja Estrutura do Conjunto de Dados para o detalhamento completo.
Link to this sectionComo faço o download do conjunto de dados VisDrone?#
O VisDrone baixa automaticamente na primeira vez que você treina com data="VisDrone.yaml" — nenhuma etapa manual é necessária. O script busca três arquivos (cerca de 2 GB) dos ativos de release do GitHub da Ultralytics e converte as anotações para o formato YOLO. A divisão test-challenge da competição não está incluída.
Link to this sectionComo treino um modelo YOLO26 no conjunto de dados VisDrone?#
Treine um modelo YOLO26n no VisDrone por 100 épocas com um tamanho de imagem de 640:
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, consulte a página de Treinamento e as dicas de treinamento de modelos.
Link to this sectionPor que o VisDrone é difícil para detectores de objetos e como posso melhorar a precisão?#
Os objetos no VisDrone são minúsculos em relação ao frame — muitas vezes apenas algumas dezenas de pixels — e aparecem em grupos densos e fortemente ocluídos, o que sobrecarrega detectores ajustados em fotos ao nível do solo. Treinar e prever em uma resolução mais alta (por exemplo imgsz=1280 com um lote menor) recupera alvos pequenos, e a inferência em mosaico SAHI divide imagens grandes para que objetos pequenos ocupem mais de cada janela de inferência.
Link to this sectionQual é a diferença entre VisDrone-DET e o benchmark VisDrone completo?#
O benchmark VisDrone completo abrange cinco tarefas — detecção de objetos em imagens, detecção de objetos em vídeos, rastreamento de objeto único, rastreamento de múltiplos objetos e contagem de multidões — em 288 videoclipes e 10.209 imagens estáticas. A configuração VisDrone.yaml da Ultralytics cobre apenas a tarefa de detecção de imagem (VisDrone2019-DET), baixando suas 6.471 imagens de treino, 548 de validação e 1.610 de test-dev.
Link to this sectionComo cito o VisDrone em minha pesquisa?#
Cite 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 está na seção Citações e Agradecimentos acima.