Conjunto de dados PASCAL VOC#
O conjunto de dados PASCAL VOC (Classes de objetos visuais) é um benchmark clássico de detecção de objetos, com 20 classes de objetos do cotidiano. A configuração VOC.yaml da Ultralytics combina as divisões trainval de VOC2007 e VOC2012 em um conjunto de treinamento com 16,551 imagens, faz a validação nas 4,952 imagens de teste do VOC2007 anotadas publicamente e baixa tudo automaticamente (2.8 GB) na primeira utilização.
Assista: Como treinar Ultralytics YOLO no conjunto de dados Pascal VOC | Detecção de objetos | Visão computacional 🚀
Os desafios PASCAL VOC ocorreram de 2005 a 2012 e moldaram a forma como os modelos de detecção de objetos são avaliados: o benchmark abrange tarefas de classificação de imagens, detecção e segmentação, além de popularizar a precisão média (mAP) como métrica padrão de detecção. A configuração VOC.yaml da Ultralytics usa as anotações de detecção e converte as caixas delimitadoras XML originais para o formato YOLO durante o download.
Principais funcionalidades#
- 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, motocicleta, trem); e seis objetos de interior (garrafa, cadeira, mesa de jantar, planta em vaso, sofá, monitor de TV).
- Duas gerações de desafios combinadas: o treinamento combina VOC2007 trainval (5,011 imagens) com VOC2012 trainval (11,540 imagens).
- Avaliação padronizada: décadas de resultados de referência publicados para o VOC fazem dele um ponto de referência conveniente para comparar modelos de detecção.
- Pronto para YOLO: o script de download busca os arquivos compactados e converte as anotações automaticamente — sem preparação manual.
Estrutura do conjunto de dados#
A configuração VOC.yaml da Ultralytics define as seguintes divisões:
| Divisão | Imagens | Fonte |
|---|---|---|
| Treinar | 16,551 | VOC2007 trainval (5,011) + VOC2012 trainval (11,540) |
| Validação | 4,952 | VOC2007 test, usado para avaliação durante o treinamento |
| Teste | 4,952 | As mesmas imagens de teste do VOC2007 — a configuração não define uma divisão separada reservada para teste |
As anotações de teste do VOC2007 foram disponibilizadas publicamente após o desafio daquele ano, o que permite que essa divisão sirva como conjunto de validação rotulado. As anotações de teste do VOC2012 continuam reservadas — os resultados só podem ser avaliados por meio do servidor oficial de avaliação PASCAL — e, por isso, não fazem parte desta configuração.
O conversor automático ignora os objetos marcados com difficult nas anotações XML originais do VOC, portanto, as contagens de instâncias por classe diferem ligeiramente das estatísticas oficiais do VOC.
Explore o VOC na Ultralytics Platform para navegar pelas imagens com suas sobreposições de anotações, ver a distribuição das classes e os mapas de calor das caixas delimitadoras na aba Gráficos e clonar o conjunto para treinar seu próprio modelo na nuvem.
Aplicações#
O PASCAL VOC foi o principal benchmark para pesquisas sobre detecção de objetos nos anos anteriores ao maior conjunto de dados COCO: detectores como Faster R-CNN e SSD publicaram seus resultados originais nele, e os modelos Ultralytics YOLO podem ser treinados nele diretamente. Atualmente, ele continua popular para:
- Avaliar novas arquiteturas de detecção em relação a um longo histórico de resultados de referência publicados
- Experimentos rápidos e trabalhos acadêmicos — com 16,551 imagens de treinamento, o treinamento é muito mais rápido do que no COCO
- Estudos de aprendizado por transferência com um conjunto compacto e bem conhecido de classes do cotidiano
YAML do conjunto de dados#
O arquivo VOC.yaml define a configuração do conjunto de dados — os caminhos do conjunto de dados, os 20 nomes de classes e o script de download e conversão automáticos. Ele é mantido no repositório da 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 é baixado automaticamente na primeira vez que você treina — três arquivos compactados que totalizam 2,8 GB — e requer cerca de 6 GB de espaço livre em disco durante a extração e a conversão.
Para treinar um modelo YOLO26n no conjunto de dados VOC por 100 épocas com um tamanho de imagem de 640, você pode usar os trechos de código a seguir. Para ver uma lista completa dos argumentos disponíveis, consulte a página de Treinamento do modelo.
from ultralytics import YOLO
# Carregar um modelo
model = YOLO("yolo26n.pt") # carregue um modelo pré-treinado (recomendado para treinamento)
# Treinar o modelo - o conjunto de dados será transferido automaticamente na primeira execução
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Imagens de exemplo e anotações#
A imagem abaixo mostra um lote de treinamento em mosaico do conjunto de dados VOC. A criação de mosaicos combina várias imagens em uma única amostra de treinamento, aumentando a variedade de objetos, escalas e contextos de cena que o modelo vê em cada lote — consulte o guia de aumento de dados do YOLO para saber mais.

Citações e agradecimentos#
Se você usar o conjunto de dados VOC em suas pesquisas ou no seu trabalho de desenvolvimento, cite o artigo a seguir:
@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 Consórcio PASCAL VOC por criar e manter este valioso recurso para a comunidade de visão computacional. Para saber mais sobre o conjunto de dados VOC e seus criadores, acesse o site do conjunto de dados PASCAL VOC.
Perguntas frequentes#
O PASCAL VOC é usado para treinar e avaliar modelos de detecção de objetos em 20 classes de objetos do cotidiano, como pessoa, carro, cachorro e cadeira. Por ser compacto, totalmente rotulado e contar com anos de resultados de referência publicados, é uma escolha comum para validar novas arquiteturas, realizar experimentos em disciplinas e fazer estudos rápidos de aprendizado por transferência.
A configuração VOC da Ultralytics contém 21.503 imagens: 16.551 para treinamento (VOC2007 trainval + VOC2012 trainval) e 4.952 para validação (o conjunto de teste VOC2007). Todas as divisões compartilham as mesmas 20 classes. Consulte a Estrutura do conjunto de dados para ver a discriminação completa.
O VOC é baixado automaticamente na primeira vez que você treina com
data="VOC.yaml"— não é necessário fazer nada manualmente. O script obtém três arquivos compactados (2,8 GB) dos recursos de lançamento do Ultralytics GitHub e converte as anotações XML para o formato YOLO.Treine um modelo YOLO26n no VOC por 100 épocas com um tamanho de imagem de 640:
Exemplo de treinofrom ultralytics import YOLO # Carregar um modelo model = YOLO("yolo26n.pt") # carregue um modelo pré-treinado (recomendado para treinamento) # Treinar o modelo results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Para ver configurações detalhadas, consulte a página de Treinamento e as dicas de treinamento de modelos.
Os dois desafios compartilham as mesmas 20 classes, mas incluem imagens diferentes. O VOC2007 oferece 5.011 imagens de trainval, além de um conjunto de teste com 4.952 imagens cujas anotações são públicas; o VOC2012 oferece 11.540 imagens de trainval, enquanto as anotações de teste são restritas e avaliadas apenas pelo servidor oficial de avaliação. A configuração
VOC.yamlda Ultralytics combina os dois conjuntos trainval para treinamento e valida com o conjunto de teste VOC2007.O VOC é menor e mais simples: 20 classes e 21.503 imagens, em comparação com as 80 classes e 330 mil imagens do COCO. Tradicionalmente, os resultados do VOC são apresentados como mAP em IoU de 0,5, enquanto o COCO calcula a média de mAP em limiares de IoU de 0,5 a 0,95. O treinamento com VOC é muito mais rápido e adequado para experimentos rápidos; o conjunto de dados COCO é o padrão para avaliações de desempenho em escala de produção.
Não —
VOC.yamlé uma configuração exclusiva para detecção: o conversor extrai caixas delimitadoras das anotações XML do VOC, e as máscaras de segmentação incluídas no benchmark original não são convertidas. Para treinar um modelo de segmentação de instâncias, use um conjunto de dados com rótulos poligonais, como COCO-Seg, com um modeloyolo26n-seg.pt.



