Conjunto de dados PASCAL VOC#
O conjunto de dados PASCAL VOC (Visual Object Classes) é uma referência clássica de object detection com 20 classes de objetos do dia a dia. A configuração do Ultralytics VOC.yaml combina as divisões de trainval VOC2007 e VOC2012 num conjunto de treino de 16.551 imagens, valida nas 4.952 imagens de teste do VOC2007 anotadas publicamente e transfere tudo automaticamente (2,8 GB) na primeira utilização.
Watch: How to Train Ultralytics YOLO on the Pascal VOC Dataset | Object Detection | Computer Vision 🚀
Os desafios PASCAL VOC decorreram entre 2005 e 2012 e moldaram a forma como os modelos de object detection são avaliados: a referência abrange tarefas de classificação de imagens, deteção e segmentação, e popularizou o mean Average Precision (mAP) como a métrica de deteção padrão. A configuração do Ultralytics VOC.yaml utiliza as anotações de deteção, convertendo as caixas delimitadoras XML originais para o formato YOLO durante a transferência.
Principais recursos#
- 20 classes de objetos do cotidiano: pessoa; seis animais (pássaro, gato, vaca, cachorro, cavalo, ovelha); sete veículos (avião, bicicleta, barco, ônibus, carro, moto, trem); e seis objetos internos (garrafa, cadeira, mesa de jantar, planta em vaso, sofá, monitor de TV).
- Duas gerações de desafios combinadas: o treinamento mescla o trainval do VOC2007 (5.011 imagens) com o trainval do VOC2012 (11.540 imagens).
- Avaliação padronizada: décadas de baselines do VOC publicados tornam-no um ponto de referência conveniente para comparar modelos de detecção.
- Pronto para YOLO: o script de download busca os arquivos e converte as anotações automaticamente — sem preparação manual.
Estrutura do Dataset#
A configuração do Ultralytics VOC.yaml define as seguintes divisões:
| Divisão | Imagens | Origem |
|---|---|---|
| Treinar | 16,551 | VOC2007 trainval (5.011) + VOC2012 trainval (11.540) |
| Validação | 4,952 | Teste VOC2007, utilizado para evaluation durante o treino |
| Teste | 4,952 | As mesmas imagens de teste do VOC2007 — a configuração não define um split de teste separado |
As anotações de teste do VOC2007 foram lançadas publicamente após o desafio daquele ano, o que permite que este split sirva como um conjunto de validação rotulado. As anotações de teste do VOC2012 permanecem retidas — os resultados nelas só podem ser pontuados através do servidor oficial de avaliação PASCAL — portanto, não fazem parte desta configuração.
O conversor automático ignora objetos marcados como difficult nas anotações XML originais do VOC, pelo que as contagens de instâncias por classe diferem ligeiramente das estatísticas oficiais do VOC.
Explora VOC on Ultralytics Platform para navegar pelas imagens com as respetivas sobreposições de anotações, ver a distribuição de classes e os mapas de calor de caixas delimitadoras no separador Charts, e cloná-lo para treinar o teu próprio modelo na nuvem.
Aplicações#
O PASCAL VOC foi a principal referência para a investigação em deteção de objetos nos anos anteriores ao COCO dataset, que é maior: detetores como Faster R-CNN e SSD relataram os seus resultados originais nele, e os modelos Ultralytics YOLO treinam nele de forma nativa. Atualmente, continua a ser popular para:
- Comparar novas arquiteturas de detecção com um longo histórico de baselines publicados
- Experimentos rápidos e trabalhos acadêmicos — com 16.551 imagens de treinamento, ele treina muito mais rápido que o COCO
- Estudos de Transfer learning num conjunto compacto e bem compreendido de classes do dia a dia
YAML do Dataset#
O ficheiro VOC.yaml define a configuração do conjunto de dados — os caminhos do conjunto de dados, os 20 nomes das classes e o script automático de transferência e conversão. É mantido no repositório do Ultralytics em https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# PASCAL VOC dataset https://www.robots.ox.ac.uk/~vgg/projects/pascal/VOC by University of Oxford
# Documentation: https://docs.ultralytics.com/datasets/detect/voc
# Example usage: yolo train data=VOC.yaml
# parent
# ├── ultralytics
# └── datasets
# └── VOC ← downloads here (2.8 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: VOC
train: # train images (relative to 'path') 16551 images
- images/train2012
- images/train2007
- images/val2012
- images/val2007
val: # val images (relative to 'path') 4952 images
- images/test2007
test: # test images (optional)
- images/test2007
# Classes
names:
0: aeroplane
1: bicycle
2: bird
3: boat
4: bottle
5: bus
6: car
7: cat
8: chair
9: cow
10: diningtable
11: dog
12: horse
13: motorbike
14: person
15: pottedplant
16: sheep
17: sofa
18: train
19: tvmonitor
# Download script/URL (optional) ---------------------------------------------------------------------------------------
download: |
import xml.etree.ElementTree as ET
from pathlib import Path
from ultralytics.utils.downloads import download
from ultralytics.utils import ASSETS_URL, TQDM
def convert_label(path, lb_path, year, image_id):
"""Converts XML annotations from VOC format to YOLO format by extracting bounding boxes and class IDs."""
def convert_box(size, box):
dw, dh = 1.0 / size[0], 1.0 / size[1]
x, y, w, h = (box[0] + box[1]) / 2.0 - 1, (box[2] + box[3]) / 2.0 - 1, box[1] - box[0], box[3] - box[2]
return x * dw, y * dh, w * dw, h * dh
with open(path / f"VOC{year}/Annotations/{image_id}.xml") as in_file, open(lb_path, "w", encoding="utf-8") as out_file:
tree = ET.parse(in_file)
root = tree.getroot()
size = root.find("size")
w = int(size.find("width").text)
h = int(size.find("height").text)
names = list(yaml["names"].values()) # names list
for obj in root.iter("object"):
cls = obj.find("name").text
if cls in names and int(obj.find("difficult").text) != 1:
xmlbox = obj.find("bndbox")
bb = convert_box((w, h), [float(xmlbox.find(x).text) for x in ("xmin", "xmax", "ymin", "ymax")])
cls_id = names.index(cls) # class id
out_file.write(" ".join(str(a) for a in (cls_id, *bb)) + "\n")
# Download
dir = Path(yaml["path"]) # dataset root dir
urls = [
f"{ASSETS_URL}/VOCtrainval_06-Nov-2007.zip", # 446MB, 5011 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4952 images
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17125 images
]
download(urls, dir=dir / "images", threads=3, exist_ok=True) # download and unzip over existing (required)
# Convert
path = dir / "images/VOCdevkit"
for year, image_set in ("2012", "train"), ("2012", "val"), ("2007", "train"), ("2007", "val"), ("2007", "test"):
imgs_path = dir / "images" / f"{image_set}{year}"
lbs_path = dir / "labels" / f"{image_set}{year}"
imgs_path.mkdir(exist_ok=True, parents=True)
lbs_path.mkdir(exist_ok=True, parents=True)
with open(path / f"VOC{year}/ImageSets/Main/{image_set}.txt") as f:
image_ids = f.read().strip().split()
for id in TQDM(image_ids, desc=f"{image_set}{year}"):
f = path / f"VOC{year}/JPEGImages/{id}.jpg" # old img path
lb_path = (lbs_path / f.name).with_suffix(".txt") # new label path
f.rename(imgs_path / f.name) # move image
convert_label(path, lb_path, year, id) # convert labels to YOLO formatUso#
O VOC baixa automaticamente na primeira vez que você treina — três arquivos totalizando 2,8 GB — e precisa de aproximadamente 6 GB de espaço livre em disco durante a extração e conversão.
Para treinar um modelo YOLO26n no conjunto de dados VOC durante 100 epochs com um tamanho de imagem de 640, podes utilizar os seguintes snippets de código. Para obteres uma lista abrangente de argumentos disponíveis, consulta a página de Training 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="VOC.yaml", epochs=100, imgsz=640)Exemplos de Imagens e Anotações#
A imagem abaixo mostra um lote de treino em mosaico do conjunto de dados VOC. O mosaico combina várias imagens num único exemplo de treino, aumentando a variedade de objetos, escalas e contextos de cena que o modelo vê em cada lote — consulta o YOLO data augmentation guide para obteres detalhes.

Citações e Agradecimentos#
Se usares o conjunto de dados VOC no teu trabalho de pesquisa ou desenvolvimento, por favor cita o seguinte artigo:
@article{everingham2010pascal,
author={Everingham, Mark and Van Gool, Luc and Williams, Christopher K. I. and Winn, John and Zisserman, Andrew},
journal={International Journal of Computer Vision},
title={The Pascal Visual Object Classes (VOC) Challenge},
year={2010},
volume={88},
number={2},
pages={303-338},
doi={10.1007/s11263-009-0275-4}}Gostaríamos de agradecer ao PASCAL VOC Consortium por criar e manter este recurso valioso para a comunidade de computer vision. Para mais informações sobre o conjunto de dados VOC e os seus criadores, visita o PASCAL VOC dataset website.
FAQ#
O PASCAL VOC é utilizado para treinar e avaliar modelos de deteção de objetos em 20 classes de objetos do dia a dia, tais como pessoa, carro, cão e cadeira. Por ser compacto, totalmente rotulado e apoiado por anos de linhas de base publicadas, é uma escolha comum para validar novas arquiteturas, realizar experiências de trabalhos escolares e estudos rápidos de transfer learning.
A configuração VOC do Ultralytics contém 21.503 imagens: 16.551 para treino (VOC2007 trainval + VOC2012 trainval) e 4.952 para validação (o conjunto de teste VOC2007). Todas as divisões partilham as mesmas 20 classes. Consulta Dataset Structure para ver a distribuição completa.
O VOC é transferido automaticamente na primeira vez que treinas com
data="VOC.yaml"— não são necessários passos manuais. O script obtém três arquivos (2,8 GB) dos ativos de lançamento do GitHub do Ultralytics e converte as anotações XML para o formato YOLO.Treine um modelo YOLO26n no VOC por 100 épocas com tamanho de imagem 640:
Exemplo de Treinamentofrom ultralytics import YOLO # Load a model model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training) # Train the model results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Para configurações detalhadas, consulta a página de Training e model training tips.
Ambos os desafios partilham as mesmas 20 classes, mas contribuem com imagens diferentes. O VOC2007 fornece 5.011 imagens de trainval mais um conjunto de teste de 4.952 imagens cujas anotações são públicas; o VOC2012 fornece 11.540 imagens de trainval, enquanto as suas anotações de teste são retidas e pontuadas apenas pelo servidor de avaliação oficial. O
VOC.yamldo Ultralytics une ambos os conjuntos de trainval para treino e valida no teste VOC2007.O VOC é mais pequeno e simples: 20 classes e 21.503 imagens contra as 80 classes e 330 mil imagens do COCO. Os resultados do VOC são tradicionalmente relatados como mAP a 0,5 IoU, enquanto o COCO calcula a média do mAP em limiares de IoU de 0,5 a 0,95. O VOC treina muito mais depressa e adequa-se a experiências rápidas; o COCO dataset é a referência para benchmarking à escala de produção.
Não —
VOC.yamlé uma configuração estritamente de deteção: o seu conversor extrai caixas delimitadoras das anotações XML do VOC, e as máscaras de segmentação incluídas na referência original não são convertidas. Para treinar um modelo de instance segmentation, utiliza um conjunto de dados com rótulos de polígonos como o COCO-Seg com um modeloyolo26n-seg.pt.



