Безопасность корпоративного уровня: Соответствует ISO 27001 + SOC 2 Type I.
No license

Link to this sectionНабор данных PASCAL VOC#

Набор данных PASCAL VOC (Visual Object Classes) — это классический эталон для обнаружения объектов, включающий 20 повседневных классов объектов. Конфигурация Ultralytics VOC.yaml объединяет обучающие и проверочные выборки VOC2007 и VOC2012 в тренировочный набор из 16 551 изображения, проводит валидацию на 4 952 публично аннотированных тестовых изображениях VOC2007 и автоматически загружает всё необходимое (2,8 ГБ) при первом использовании.



Watch: How to Train Ultralytics YOLO on the Pascal VOC Dataset | Object Detection | Computer Vision 🚀

Соревнования PASCAL VOC проводились с 2005 по 2012 год и сформировали способ оценки моделей обнаружения объектов: эталон охватывает задачи классификации изображений, обнаружения и сегментации, а также сделал среднюю точность (mAP) стандартной метрикой обнаружения. Конфигурация Ultralytics VOC.yaml использует аннотации для обнаружения, преобразуя исходные XML-граничные рамки в формат YOLO во время загрузки.

Link to this sectionКлючевые особенности#

  • 20 повседневных классов объектов: человек; шесть животных (птица, кошка, корова, собака, лошадь, овца); семь транспортных средств (самолет, велосипед, лодка, автобус, автомобиль, мотоцикл, поезд); и шесть предметов интерьера (бутылка, стул, обеденный стол, горшечное растение, диван, монитор).
  • Объединение двух поколений соревнований: обучение объединяет trainval-выборку VOC2007 (5 011 изображений) с trainval-выборкой VOC2012 (11 540 изображений).
  • Стандартизированная оценка: десятилетия опубликованных базовых показателей VOC делают его удобной отправной точкой для сравнения моделей обнаружения.
  • Готовность к YOLO: скрипт загрузки скачивает архивы и автоматически преобразует аннотации — никакой ручной подготовки.

Link to this sectionСтруктура набора данных#

Конфигурация Ultralytics VOC.yaml определяет следующие выборки:

SplitИзображенияИсточник
Обучение16 551VOC2007 trainval (5 011) + VOC2012 trainval (11 540)
Validation4 952VOC2007 test, используется для оценки во время обучения
Тестовый4 952Те же тестовые изображения VOC2007 — конфигурация не определяет отдельную отложенную выборку

Аннотации VOC2007 test были выпущены публично после соревнований того года, что позволяет этой выборке служить размеченным валидационным набором. Аннотации VOC2012 test остаются закрытыми — результаты по ним можно оценить только через официальный сервер оценки PASCAL, поэтому они не являются частью этой конфигурации.

Сложные объекты исключены

Автоматический конвертер пропускает объекты, помеченные как difficult в исходных XML-аннотациях VOC, поэтому количество экземпляров по классам немного отличается от официальной статистики VOC.

Исследуй VOC на платформе Ultralytics, чтобы просмотреть изображения с наложенными аннотациями, увидеть распределение классов и тепловые карты граничных рамок на вкладке Charts, а также клонировать его для обучения собственной модели в облаке.

Link to this sectionПрименение#

PASCAL VOC был основным эталоном для исследований в области обнаружения объектов за годы до появления более крупного набора данных COCO: детекторы, такие как Faster R-CNN и SSD, сообщали свои исходные результаты на нем, а модели Ultralytics YOLO обучаются на нем «из коробки». Сегодня он остается популярным для:

  • Бенчмаркинга новых архитектур обнаружения по отношению к долгой истории опубликованных базовых показателей
  • Быстрых экспериментов и учебных работ — с 16 551 тренировочным изображением он обучается гораздо быстрее, чем COCO
  • Исследований трансферного обучения на компактном, хорошо изученном наборе повседневных классов

Link to this sectionYAML набора данных#

Файл VOC.yaml определяет конфигурацию набора данных — пути к данным, названия 20 классов и скрипт автоматической загрузки и преобразования. Он поддерживается в репозитории Ultralytics по адресу https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.

ultralytics/cfg/datasets/VOC.yaml
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license

# PASCAL VOC dataset http://host.robots.ox.ac.uk/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

Link to this sectionИспользование#

Скачивание 2,8 ГБ

VOC скачивается автоматически при первом запуске обучения — три архива общим объемом 2,8 ГБ — и требует около 6 ГБ свободного места на диске во время распаковки и конвертации.

Чтобы обучить модель YOLO26n на наборе данных VOC в течение 100 эпох с размером изображения 640, используй следующие фрагменты кода. Полный список доступных аргументов смотри на странице обучения модели.

Пример обучения
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)

Link to this sectionПримеры изображений и аннотации#

На изображении ниже показан мозаичный тренировочный пакет из набора данных VOC. Мозаика объединяет несколько изображений в один тренировочный образец, увеличивая разнообразие объектов, масштабов и контекстов сцен, которые модель видит в каждом пакете — подробности см. в руководстве по аугментации данных YOLO.

Мозаичный обучающий пакет данных Pascal VOC

Link to this sectionЦитирование и благодарности#

Если ты используешь набор данных 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.

Link to this sectionFAQ#

Link to this sectionДля чего используется набор данных PASCAL VOC?#

PASCAL VOC используется для обучения и бенчмаркинга моделей обнаружения объектов на 20 повседневных классах, таких как человек, автомобиль, собака и стул. Поскольку он компактен, полностью размечен и поддерживается годами опубликованных базовых показателей, это распространенный выбор для валидации новых архитектур, проведения учебных экспериментов и быстрых исследований трансферного обучения.

Link to this sectionСколько изображений в наборе данных PASCAL VOC?#

Конфигурация Ultralytics VOC содержит 21 503 изображения: 16 551 для обучения (VOC2007 trainval + VOC2012 trainval) и 4 952 для валидации (тестовый набор VOC2007). Все выборки разделяют одни и те же 20 классов. Полную разбивку см. в разделе Структура набора данных.

Link to this sectionКак загрузить набор данных PASCAL VOC?#

VOC скачивается автоматически при первом запуске обучения с помощью data="VOC.yaml" — никаких ручных действий не требуется. Скрипт получает три архива (2,8 ГБ) из релизов Ultralytics GitHub и преобразует XML-аннотации в формат YOLO.

Link to this sectionКак обучить модель YOLO26 на наборе данных VOC?#

Обучи модель YOLO26n на VOC в течение 100 эпох с размером изображения 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="VOC.yaml", epochs=100, imgsz=640)

Для получения подробных конфигураций смотри страницу Обучение и советы по обучению моделей.

Link to this sectionВ чем разница между VOC2007 и VOC2012?#

Оба соревнования имеют одинаковые 20 классов, но содержат разные изображения. VOC2007 предоставляет 5 011 изображений trainval плюс тестовый набор из 4 952 изображений, аннотации которых общедоступны; VOC2012 предоставляет 11 540 изображений trainval, в то время как его тестовые аннотации скрыты и оцениваются только официальным сервером оценки. Ultralytics VOC.yaml объединяет оба набора trainval для обучения и проводит валидацию на VOC2007 test.

Link to this sectionКак PASCAL VOC соотносится с набором данных COCO?#

VOC меньше и проще: 20 классов и 21 503 изображения против 80 классов и 330 тысяч изображений в COCO. Результаты VOC традиционно представляются как mAP при IoU 0,5, в то время как COCO усредняет mAP по порогам IoU от 0,5 до 0,95. VOC обучается гораздо быстрее и подходит для быстрых экспериментов; набор данных COCO является стандартом для бенчмаркинга производственного масштаба.

Link to this sectionМогу ли я обучать модели сегментации с помощью VOC.yaml?#

Нет — VOC.yaml является конфигурацией только для обнаружения: её конвертер извлекает граничные рамки из XML-аннотаций VOC, а маски сегментации, включенные в исходный эталон, не преобразуются. Чтобы обучить модель сегментации экземпляров, используй набор данных с полигональными метками, такой как COCO-Seg с моделью yolo26n-seg.pt.

Комментарии