Ir para o conteúdo

Conjunto de Dados VOC

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

Principais Características

  • 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 precisão média média (mAP) para detecção e classificação de objetos, tornando-o adequado para comparar o desempenho do modelo.

Estrutura do Conjunto de Dados

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

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

Aplicaçõ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 o tornam um recurso essencial para pesquisadores e profissionais de visão computacional.

YAML do Conjunto de Dados

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, classes e outras informações relevantes do conjunto de dados. No caso do conjunto de dados VOC, o VOC.yaml arquivo é 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: # 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 tqdm import tqdm

  from ultralytics.utils.downloads import download


  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

      in_file = open(path / f"VOC{year}/Annotations/{image_id}.xml")
      out_file = open(lb_path, "w")
      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
  url = "https://github.com/ultralytics/assets/releases/download/v0.0.0/"
  urls = [
      f"{url}VOCtrainval_06-Nov-2007.zip",  # 446MB, 5012 images
      f"{url}VOCtest_06-Nov-2007.zip",  # 438MB, 4953 images
      f"{url}VOCtrainval_11-May-2012.zip",  # 1.95GB, 17126 images
  ]
  download(urls, dir=dir / "images", curl=True, 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

Utilização

Para treinar um modelo YOLO11n no conjunto de dados VOC por 100 epochs com um tamanho de imagem de 640, você pode usar os seguintes trechos de código. Para uma lista completa de argumentos disponíveis, consulte a página de Treinamento do modelo.

Exemplo de Treinamento

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

Amostras 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 anotações correspondentes:

Imagem de amostra do conjunto de dados

  • Imagem em Mosaico: Esta imagem demonstra um lote de treinamento composto por imagens de conjunto de dados em mosaico. O mosaico é uma técnica usada durante o treinamento que combina várias imagens em uma única imagem para aumentar a variedade de objetos e cenas dentro de cada lote de treinamento. Isso ajuda a melhorar a capacidade do modelo de generalizar para diferentes tamanhos de objetos, 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 mosaicos durante o processo de treinamento.

Citações e Agradecimentos

Se você usar o conjunto de dados VOC em seu trabalho de pesquisa ou desenvolvimento, cite o seguinte artigo:

@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 valioso recurso para a comunidade de visão computacional. Para obter mais informações sobre o conjunto de dados VOC e seus criadores, visite o site do conjunto de dados PASCAL VOC.

FAQ

O 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 o usam 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 precisão média (mAP).

Como faço para treinar um modelo YOLO11 usando o dataset VOC?

Para treinar um modelo YOLO11 com o conjunto de dados VOC, você precisa da configuração do conjunto de dados em um arquivo YAML. Aqui está um exemplo para começar a treinar um modelo YOLO11n por 100 epochs com um tamanho de imagem de 640:

Exemplo de Treinamento

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

Quais 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 de objetos, segmentação e classificação em 20 diversas categorias de objetos. Cada imagem é meticulosamente anotada com bounding boxes, rótulos de classe e máscaras de segmentação. Os desafios fornecem métricas padronizadas como mAP, facilitando a comparação e o benchmarking de diferentes modelos de visão computacional.

Como o conjunto de dados PASCAL VOC aprimora o benchmarking e a avaliação de modelos?

O conjunto de dados PASCAL VOC aprimora o benchmarking e a avaliação de modelos por meio de suas anotações detalhadas e métricas padronizadas, como a precisão média 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.

Como usar o dataset 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, você precisa configurar o conjunto de dados corretamente em um arquivo YAML. O arquivo YAML define os caminhos e as classes necessárias para treinar modelos de segmentação. Verifique o arquivo de configuração YAML do conjunto de dados VOC em VOC.yaml para configurações detalhadas. Para tarefas de segmentação, você usaria um modelo específico de segmentação como yolo11n-seg.pt em vez do modelo de detecção.



📅 Criado há 1 ano ✏️ Atualizado há 4 meses

Comentários