Набор данных PASCAL VOC#
Набор данных PASCAL VOC (визуальные классы объектов) — классический бенчмарк для обнаружения объектов с 20 категориями повседневных объектов. Конфигурация Ultralytics VOC.yaml объединяет части trainval VOC2007 и VOC2012 в обучающую выборку из 16 551 изображения, использует 4 952 общедоступных тестовых изображения VOC2007 для валидации и автоматически загружает все необходимые данные (2,8 ГБ) при первом использовании.
Смотри: Как обучить Ultralytics YOLO на датасете Pascal VOC | Обнаружение объектов | Компьютерное зрение 🚀
Соревнования PASCAL VOC проходили с 2005 по 2012 год и повлияли на методы оценки моделей обнаружения объектов: бенчмарк охватывает классификацию изображений, обнаружение и сегментацию и сделал среднюю точность по всем классам (mAP) стандартной метрикой обнаружения. Конфигурация Ultralytics VOC.yaml использует разметку для обнаружения и при загрузке преобразует исходные ограничивающие рамки из XML в формат YOLO.
Основные особенности#
- 20 категорий повседневных объектов: человек; шесть животных (птица, кошка, корова, собака, лошадь, овца); семь транспортных средств (самолёт, велосипед, лодка, автобус, автомобиль, мотоцикл, поезд); и шесть предметов интерьера (бутылка, стул, обеденный стол, растение в горшке, диван, телевизор).
- Объединены две версии соревнования: обучающая выборка объединяет trainval VOC2007 (5 011 изображений) и trainval VOC2012 (11 540 изображений).
- Стандартизированная оценка: опубликованные за десятилетия базовые результаты VOC дают удобную точку отсчёта для сравнения моделей обнаружения.
- Готовность к YOLO: скрипт загрузки скачивает архивы и автоматически преобразует разметку — вручную подготавливать данные не нужно.
Структура набора данных#
Конфигурация Ultralytics VOC.yaml задаёт следующие части набора данных:
| Подвыборка | Изображения | Источник |
|---|---|---|
| Обучение | 16,551 | trainval VOC2007 (5 011) + trainval VOC2012 (11 540) |
| Валидация | 4,952 | Тестовая выборка VOC2007, используемая для оценки во время обучения |
| Тестовая | 4,952 | Те же тестовые изображения VOC2007 — в конфигурации не задана отдельная отложенная выборка |
Разметка тестовой выборки VOC2007 была опубликована после соревнования того года, поэтому эту часть можно использовать как размеченную выборку для валидации. Разметка тестовой выборки VOC2012 остаётся закрытой: оценить результаты на ней можно только через официальный сервер оценки PASCAL, поэтому эта часть не входит в конфигурацию.
Автоматический конвертер пропускает объекты, помеченные difficult в исходной XML-разметке VOC, поэтому количество экземпляров каждого класса немного отличается от официальной статистики VOC.
Открой VOC на Ultralytics Platform, чтобы просматривать изображения с наложенной разметкой, изучать распределение классов и тепловые карты ограничивающих рамок на вкладке Charts, а также клонировать набор данных и обучать собственную модель в облаке.
Применение#
В годы до появления более крупного набора данных COCO PASCAL VOC был основным бенчмарком исследований в области обнаружения объектов: такие детекторы, как Faster R-CNN и SSD, впервые представили результаты на нём, а модели Ultralytics YOLO можно обучать на нём без дополнительной настройки. Сегодня этот набор по-прежнему популярен для:
- Сравнения новых архитектур обнаружения с множеством опубликованных ранее базовых результатов
- Быстрых экспериментов и учебных проектов: на 16 551 обучающем изображении обучение проходит гораздо быстрее, чем на COCO
- Исследований переноса обучения на компактном и хорошо изученном наборе повседневных классов
Файл YAML набора данных#
Файл VOC.yaml задаёт конфигурацию набора данных: пути к данным, названия 20 классов и скрипт автоматической загрузки и преобразования. Файл поддерживается в репозитории Ultralytics по адресу 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 formatИспользование#
VOC загружается автоматически при первом запуске обучения — три архива общим размером 2,8 ГБ; для распаковки и преобразования потребуется около 6 ГБ свободного места на диске.
Чтобы обучить модель YOLO26n на наборе данных VOC в течение 100 эпох с размером изображения 640, используй следующие фрагменты кода. Полный список доступных аргументов см. на странице обучения модели.
from ultralytics import YOLO
# Загрузить модель
model = YOLO("yolo26n.pt") # загрузить предварительно обученную модель (рекомендуется для обучения)
# Обучи модель — при первом запуске датасет скачается автоматически
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Примеры изображений и аннотаций#
На изображении ниже показан обучающий батч с мозаичной аугментацией из набора данных VOC. Мозаичная аугментация объединяет несколько изображений в один обучающий пример, увеличивая разнообразие объектов, масштабов и контекстов сцен, которые модель видит в каждом батче. Подробнее см. в руководстве по аугментации данных YOLO.

Цитирование и благодарности#
Если ты используешь набор данных VOC в исследовательской или разработческой работе, укажи в цитировании следующую статью:
@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}}Мы хотели бы поблагодарить консорциум PASCAL VOC за создание и поддержку этого ценного ресурса для сообщества компьютерного зрения. Дополнительную информацию о наборе данных VOC и его создателях см. на сайте набора данных PASCAL VOC.
Часто задаваемые вопросы#
PASCAL VOC используют для обучения и тестирования моделей обнаружения объектов на 20 классах повседневных объектов, таких как человек, автомобиль, собака и стул. Благодаря компактности, полным аннотациям и многолетней истории опубликованных базовых результатов этот набор часто выбирают для проверки новых архитектур, учебных экспериментов и быстрых исследований трансферного обучения.
Конфигурация Ultralytics для VOC содержит 21 503 изображения: 16 551 для обучения (VOC2007 trainval + VOC2012 trainval) и 4 952 для валидации (тестовый набор VOC2007). Во всех разделах представлены одни и те же 20 классов. Полную разбивку см. в разделе Структура набора данных.
VOC загружается автоматически при первом запуске обучения с
data="VOC.yaml"— вручную ничего делать не нужно. Скрипт скачивает три архива (2,8 ГБ) из ресурсов релиза Ultralytics на GitHub и преобразует XML-аннотации в формат YOLO.Обучи модель YOLO26n на VOC в течение 100 эпох с размером изображения 640:
Пример обученияfrom ultralytics import YOLO # Загрузить модель model = YOLO("yolo26n.pt") # загрузить предварительно обученную модель (рекомендуется для обучения) # Обучить модель results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Подробную информацию о конфигурации смотри на странице Обучение и в советах по обучению моделей.
В обоих испытаниях используются одни и те же 20 классов, но изображения в них разные. VOC2007 содержит 5 011 изображений trainval и тестовый набор из 4 952 изображений с открытыми аннотациями; VOC2012 содержит 11 540 изображений trainval, а его тестовые аннотации закрыты и оцениваются только официальным сервером. Конфигурация Ultralytics
VOC.yamlобъединяет оба набора trainval для обучения и проводит валидацию на тестовом наборе VOC2007.VOC меньше и проще: 20 классов и 21 503 изображения против 80 классов и 330 тыс. изображений в COCO. Результаты VOC традиционно представляют как mAP при IoU 0,5, а в COCO усредняют mAP по порогам IoU от 0,5 до 0,95. На VOC обучение проходит намного быстрее, поэтому он подходит для быстрых экспериментов; набор данных COCO служит стандартом для бенчмаркинга в производственном масштабе.
Нет —
VOC.yaml— это конфигурация только для обнаружения объектов: конвертер извлекает ограничивающие рамки из XML-аннотаций VOC, а маски сегментации из исходного бенчмарка не преобразуются. Чтобы обучить модель сегментации экземпляров, используй набор данных с полигональными метками, например COCO-Seg, и модельyolo26n-seg.pt.



