Salta para o conteúdo

Conjunto de dados de COV

O conjunto de dados PASCAL VOC (Visual Object Classes) é um conjunto de dados bem conhecido de deteção, segmentação e classificação de objectos. Foi concebido para encorajar a investigação sobre uma grande variedade de categorias de objectos e é normalmente utilizado para aferir modelos de visão por computador. É um conjunto de dados essencial para investigadores e programadores que trabalham em tarefas de deteção, segmentação e classificação de objectos.

Características principais

  • O conjunto de dados VOC inclui dois desafios principais: VOC2007 e VOC2012.
  • O conjunto de dados inclui 20 categorias de objectos, incluindo objectos 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 objectos e etiquetas de classe para as tarefas de deteção e classificação de objectos, e máscaras de segmentação para as tarefas de segmentação.
  • O VOC fornece métricas de avaliação padronizadas como a precisão média (mAP) para a deteção e classificação de objectos, tornando-o adequado para comparar o desempenho do modelo.

Estrutura do conjunto de dados

O conjunto de dados COV está dividido em três subconjuntos:

  1. Treina: Este subconjunto contém imagens para treinar modelos de deteção, segmentação e classificação de objectos.
  2. Validação: Este subconjunto tem imagens utilizadas para efeitos de validação durante a formação do modelo.
  3. Testa: Este subconjunto é constituído por imagens utilizadas para testar e aferir os modelos treinados. As anotações da verdade terrestre para este subconjunto não estão disponíveis publicamente e os resultados são submetidos ao servidor de avaliação PASCAL VOC para avaliação do desempenho.

Aplicações

O conjunto de dados VOC é amplamente utilizado para treinar e avaliar modelos de aprendizagem profunda na deteção de objetos (como 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 do conjunto de dados, o grande número de imagens anotadas e as métricas de avaliação padronizadas fazem dele um recurso essencial para pesquisadores e profissionais de visão computacional.

Conjunto de dados YAML

Um ficheiro YAML (Yet Another Markup Language) é utilizado para definir a configuração do conjunto de dados. 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 ficheiro VOC.yaml é mantido em https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.

ultralytics/cfg/datasets/VOC.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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: ../datasets/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 tqdm import tqdm
  from ultralytics.utils.downloads import download
  from pathlib import Path

  def convert_label(path, lb_path, year, image_id):
      def convert_box(size, box):
          dw, dh = 1. / size[0], 1. / 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 paths (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 YOLOv8n no conjunto de dados VOC para 100 épocas com um tamanho de imagem de 640, podes utilizar os seguintes snippets de código. Para obter uma lista abrangente dos argumentos disponíveis, consulta a página de treino do modelo.

Exemplo de comboio

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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=yolov8n.pt epochs=100 imgsz=640

Exemplos de imagens e anotações

O conjunto de dados VOC contém um conjunto diversificado de imagens com várias categorias de objectos e cenas complexas. Seguem-se alguns exemplos de imagens do conjunto de dados, juntamente com as anotações correspondentes:

Imagem de amostra do conjunto de dados

  • Imagem em mosaico: Esta imagem demonstra um lote de treino composto por imagens do conjunto de dados em mosaico. O mosaico é uma técnica utilizada durante o treino que combina várias imagens numa única imagem para aumentar a variedade de objectos e cenas em cada lote de treino. Isto ajuda a melhorar a capacidade do modelo de generalizar para diferentes tamanhos de objectos, proporções e contextos.

O exemplo mostra a variedade e complexidade das imagens no conjunto de dados VOC e os benefícios da utilização de mosaicos durante o processo de formação.

Citações e agradecimentos

Se utilizares o conjunto de dados VOC no teu trabalho de investigação ou desenvolvimento, cita o seguinte documento:

@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 Consórcio PASCAL VOC por criar e manter este valioso recurso para a comunidade de visão computacional. Para mais informações sobre o conjunto de dados VOC e os seus criadores, visita o site do conjunto de dados PASCAL VOC.

FAQ

O que é o conjunto de dados PASCAL VOC e porque é que é importante para as tarefas de visão computacional?

O conjunto de dados PASCAL VOC (Visual Object Classes) é uma referência de renome para a deteção, segmentação e classificação de objectos na visão computacional. Inclui anotações abrangentes como caixas delimitadoras, etiquetas de classe e máscaras de segmentação em 20 categorias de objectos diferentes. Os investigadores utilizam-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 a precisão média (mAP).

Como posso treinar um modelo YOLOv8 utilizando o conjunto de dados VOC?

Para treinar um modelo YOLOv8 com o conjunto de dados VOC, precisas da configuração do conjunto de dados num ficheiro YAML. Aqui está um exemplo para começar a treinar um modelo YOLOv8n para 100 épocas com um tamanho de imagem de 640:

Exemplo de comboio

from ultralytics import YOLO

# Load a model
model = YOLO("yolov8n.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=yolov8n.pt epochs=100 imgsz=640

Quais são os principais desafios incluídos no conjunto de dados COV?

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

Como é que o conjunto de dados PASCAL VOC melhora o benchmarking e a avaliação dos modelos?

O conjunto de dados PASCAL VOC melhora o benchmarking e a avaliação de modelos através das suas anotações detalhadas e métricas padronizadas como a precisão média (mAP). Estas métricas são cruciais para avaliar o desempenho dos modelos de deteção e classificação de objectos. 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 é que utilizo o conjunto de dados VOC para segmentação semântica nos modelos YOLO ?

Para usar o conjunto de dados VOC para tarefas de segmentação semântica com YOLO modelos, é necessário configurar o conjunto de dados corretamente em um arquivo YAML. O arquivo YAML define caminhos e classes necessários para treinar modelos de segmentação. Verifica o ficheiro de configuração YAML do conjunto de dados VOC em VOC.yaml para obteres configurações detalhadas.



Criado em 2023-11-12, Atualizado em 2024-07-04
Autores: glenn-jocher (7), Laughing-q (1)

Comentários