Saltar al contenido

Conjunto de datos COV

El conjunto de datos PASCAL VOC (Visual Object Classes) es un conocido conjunto de datos de detecci贸n, segmentaci贸n y clasificaci贸n de objetos. Est谩 dise帽ado para fomentar la investigaci贸n sobre una amplia variedad de categor铆as de objetos y se utiliza habitualmente para la evaluaci贸n comparativa de modelos de visi贸n por ordenador. Es un conjunto de datos esencial para los investigadores y desarrolladores que trabajan en tareas de detecci贸n, segmentaci贸n y clasificaci贸n de objetos.

Caracter铆sticas principales

  • El conjunto de datos VOC incluye dos retos principales: VOC2007 y VOC2012.
  • El conjunto de datos comprende 20 categor铆as de objetos, incluidos objetos comunes como coches, bicicletas y animales, as铆 como categor铆as m谩s espec铆ficas como barcos, sof谩s y mesas de comedor.
  • Las anotaciones incluyen cuadros delimitadores de objetos y etiquetas de clase para las tareas de detecci贸n y clasificaci贸n de objetos, y m谩scaras de segmentaci贸n para las tareas de segmentaci贸n.
  • VOC proporciona m茅tricas de evaluaci贸n estandarizadas, como la Precisi贸n Media (mAP), para la detecci贸n y clasificaci贸n de objetos, lo que la hace adecuada para comparar el rendimiento de los modelos.

Estructura del conjunto de datos

El conjunto de datos COV se divide en tres subconjuntos:

  1. Entrenar: Este subconjunto contiene im谩genes para entrenar los modelos de detecci贸n, segmentaci贸n y clasificaci贸n de objetos.
  2. Validaci贸n: Este subconjunto tiene im谩genes utilizadas con fines de validaci贸n durante el entrenamiento del modelo.
  3. Prueba: Este subconjunto est谩 formado por im谩genes utilizadas para probar y comparar los modelos entrenados. Las anotaciones de la verdad sobre el terreno para este subconjunto no est谩n disponibles p煤blicamente, y los resultados se env铆an al servidor de evaluaci贸n PASCAL VOC para evaluar el rendimiento.

Aplicaciones

El conjunto de datos VOC se utiliza ampliamente para entrenar y evaluar modelos de aprendizaje profundo en detecci贸n de objetos (como YOLO, Faster R-CNN y SSD), segmentaci贸n de instancias (como Mask R-CNN) y clasificaci贸n de im谩genes. La diversidad de categor铆as de objetos del conjunto de datos, el gran n煤mero de im谩genes anotadas y las m茅tricas de evaluaci贸n estandarizadas lo convierten en un recurso esencial para los investigadores y profesionales de la visi贸n por ordenador.

Conjunto de datos YAML

Se utiliza un archivo YAML (Yet Another Markup Language) para definir la configuraci贸n del conjunto de datos. Contiene informaci贸n sobre las rutas del conjunto de datos, las clases y otra informaci贸n relevante. En el caso del conjunto de datos COV, el archivo VOC.yaml se mantiene en 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/yolov5/releases/download/v1.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

Utilizaci贸n

Para entrenar un modelo YOLOv8n en el conjunto de datos VOC durante 100 茅pocas con un tama帽o de imagen de 640, puedes utilizar los siguientes fragmentos de c贸digo. Para obtener una lista completa de los argumentos disponibles, consulta la p谩gina Entrenamiento del modelo.

Ejemplo de tren

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

Ejemplos de im谩genes y anotaciones

El conjunto de datos VOC contiene un conjunto diverso de im谩genes con varias categor铆as de objetos y escenas complejas. Aqu铆 tienes algunos ejemplos de im谩genes del conjunto de datos, junto con sus correspondientes anotaciones:

Imagen de muestra del conjunto de datos

  • Imagen en mosaico: Esta imagen muestra un lote de entrenamiento compuesto por im谩genes del conjunto de datos en mosaico. El mosaico es una t茅cnica utilizada durante el entrenamiento que combina varias im谩genes en una sola para aumentar la variedad de objetos y escenas dentro de cada lote de entrenamiento. Esto ayuda a mejorar la capacidad del modelo para generalizarse a diferentes tama帽os de objetos, relaciones de aspecto y contextos.

El ejemplo muestra la variedad y complejidad de las im谩genes del conjunto de datos COV y las ventajas de utilizar mosaicos durante el proceso de entrenamiento.

Citas y agradecimientos

Si utilizas el conjunto de datos COV en tu trabajo de investigaci贸n o desarrollo, cita el siguiente 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}
}

Queremos agradecer al Consorcio PASCAL VOC la creaci贸n y el mantenimiento de este valioso recurso para la comunidad de visi贸n por ordenador. Para m谩s informaci贸n sobre el conjunto de datos VOC y sus creadores, visita el sitio web del conjunto de datos PASCAL VOC.



Creado 2023-11-12, Actualizado 2024-05-18
Autores: glenn-jocher (5), Laughing-q (1)

Comentarios