Meet YOLO26: next-gen vision AI.

Link to this sectionConjunto de dados VOC#

O conjunto de dados PASCAL VOC (Visual Object Classes) é um conjunto de dados bem conhecido para detecção, segmentação e classificação de objetos. Foi projetado para incentivar a pesquisa em uma ampla variedade de categorias de objetos e é comumente usado para avaliar modelos de visão computacional. É um conjunto de dados essencial para pesquisadores e desenvolvedores que trabalham com tarefas de detecção, segmentação e classificação de objetos.



Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀

Link to this sectionPrincipais recursos#

  • O conjunto de dados VOC inclui dois desafios principais: VOC2007 e VOC2012.
  • O conjunto de dados compreende 20 categorias de objetos, incluindo objetos comuns como carros, bicicletas e animais, bem como categorias mais específicas como barcos, sofás e mesas de jantar.
  • As anotações incluem caixas delimitadoras de objetos e rótulos de classe para tarefas de detecção e classificação de objetos, e máscaras de segmentação para as tarefas de segmentação.
  • O VOC fornece métricas de avaliação padronizadas, como mean Average Precision (mAP) para detecção e classificação de objetos, tornando-o adequado para comparar o desempenho dos modelos.

Link to this sectionEstrutura do Dataset#

O conjunto de dados VOC é dividido em três subconjuntos:

  1. Treino: Este subconjunto contém imagens para treinar modelos de detecção, segmentação e classificação de objetos.
  2. Validação: Este subconjunto possui imagens usadas para fins de validação durante o treinamento do modelo.
  3. Teste: Este subconjunto consiste em imagens usadas para testar e avaliar os modelos treinados. As anotações de verdade fundamental para este subconjunto não estão disponíveis publicamente, e os resultados eram historicamente enviados ao servidor de avaliação PASCAL VOC para avaliação de desempenho.

Link to this sectionAplicações#

O conjunto de dados VOC é amplamente utilizado para treinar e avaliar modelos de deep learning em detecção de objetos (como Ultralytics YOLO, Faster R-CNN e SSD), segmentação de instâncias (como Mask R-CNN) e classificação de imagens. O conjunto diversificado de categorias de objetos, o grande número de imagens anotadas e as métricas de avaliação padronizadas do conjunto de dados tornam-no um recurso essencial para pesquisadores e profissionais de visão computacional.

Link to this sectionYAML do Dataset#

Um arquivo YAML (Yet Another Markup Language) é usado para definir a configuração do conjunto de dados. Ele contém informações sobre os caminhos do conjunto de dados, classes e outras informações relevantes. No caso do conjunto de dados VOC, o arquivo VOC.yaml é mantido em 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, 5012 images
      f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip",  # 438MB, 4953 images
      f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip",  # 1.95GB, 17126 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 sectionUso#

Para treinar um modelo YOLO26n no conjunto de dados VOC por 100 épocas com um tamanho de imagem de 640, podes usar os seguintes trechos de código. Para obter uma lista abrangente de argumentos disponíveis, consulta a página de Treinamento do modelo.

Exemplo de Treinamento
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 sectionExemplos de Imagens e Anotações#

O conjunto de dados VOC contém um conjunto diversificado de imagens com várias categorias de objetos e cenas complexas. Aqui estão alguns exemplos de imagens do conjunto de dados, juntamente com suas respectivas anotações:

Lote de treinamento de mosaico do conjunto de dados Pascal VOC

  • Imagem em Mosaico: Esta imagem demonstra um lote de treino composto por imagens do conjunto de dados em mosaico. A mosaicação é uma técnica usada durante o treino que combina múltiplas imagens numa única imagem para aumentar a variedade de objetos e cenas dentro de cada lote de treino. Isto ajuda a melhorar a capacidade do modelo de generalizar para diferentes tamanhos de objeto, proporções e contextos.

O exemplo mostra a variedade e a complexidade das imagens no conjunto de dados VOC e os benefícios de usar mosaico durante o processo de treinamento.

Link to this sectionCitações e Agradecimentos#

Se usares o conjunto de dados VOC no teu trabalho de pesquisa ou desenvolvimento, por favor cita o seguinte artigo:

Citação
@misc{everingham2010pascal,
      title={The PASCAL Visual Object Classes (VOC) Challenge},
      author={Mark Everingham and Luc Van Gool and Christopher K. I. Williams and John Winn and Andrew Zisserman},
      year={2010},
      eprint={0909.5206},
      archivePrefix={arXiv},
      primaryClass={cs.CV}
}

Gostaríamos de agradecer ao PASCAL VOC Consortium por criar e manter este recurso valioso para a comunidade de visão computacional. Para mais informações sobre o conjunto de dados VOC e seus criadores, visita o site do conjunto de dados PASCAL VOC.

Link to this sectionFAQ#

Link to this sectionO que é o conjunto de dados PASCAL VOC e por que ele é importante para tarefas de visão computacional?#

O conjunto de dados PASCAL VOC (Visual Object Classes) é uma referência renomada para detecção de objetos, segmentação e classificação em visão computacional. Inclui anotações abrangentes como caixas delimitadoras, rótulos de classe e máscaras de segmentação em 20 categorias de objetos diferentes. Os pesquisadores usam-no amplamente para avaliar o desempenho de modelos como Faster R-CNN, YOLO e Mask R-CNN devido às suas métricas de avaliação padronizadas, como mean Average Precision (mAP).

Link to this sectionComo treino um modelo YOLO26 usando o conjunto de dados VOC?#

Para treinar um modelo YOLO26 com o conjunto de dados VOC, precisas da configuração do conjunto de dados em um arquivo YAML. Aqui está um exemplo para começar a treinar um modelo YOLO26n por 100 épocas com um tamanho de imagem de 640:

Exemplo de Treinamento
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 sectionQuais são os principais desafios incluídos no conjunto de dados VOC?#

O conjunto de dados VOC inclui dois desafios principais: VOC2007 e VOC2012. Esses desafios testam a detecção, segmentação e classificação de objetos em 20 categorias de objetos diversas. Cada imagem é meticulosamente anotada com caixas delimitadoras, rótulos de classe e máscaras de segmentação. Os desafios fornecem métricas padronizadas como mAP, facilitando a comparação e a avaliação de diferentes modelos de visão computacional.

Link to this sectionComo o conjunto de dados PASCAL VOC aprimora a avaliação e comparação de modelos?#

O conjunto de dados PASCAL VOC aprimora a avaliação e comparação de modelos por meio de suas anotações detalhadas e métricas padronizadas como mean Average Precision (mAP). Essas métricas são cruciais para avaliar o desempenho de modelos de detecção e classificação de objetos. As imagens diversas e complexas do conjunto de dados garantem uma avaliação abrangente do modelo em vários cenários do mundo real.

Link to this sectionComo uso o conjunto de dados VOC para segmentação semântica em modelos YOLO?#

Para usar o conjunto de dados VOC para tarefas de segmentação semântica com modelos YOLO, precisas configurar o conjunto de dados corretamente em um arquivo YAML. O arquivo YAML define os caminhos e classes necessários para treinar modelos de segmentação. Verifica o arquivo de configuração YAML do conjunto de dados VOC em VOC.yaml para configurações detalhadas. Para tarefas de segmentação, usarias um modelo específico de segmentação como yolo26n-seg.pt em vez do modelo de detecção.

Comentários