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:
- Entrenar: Este subconjunto contiene imágenes para entrenar los modelos de detección, segmentación y clasificación de objetos.
- Validación: Este subconjunto tiene imágenes utilizadas con fines de validación durante el entrenamiento del modelo.
- 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/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
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
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 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:
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.
PREGUNTAS FRECUENTES
¿Qué es el conjunto de datos PASCAL VOC y por qué es importante para las tareas de visión por ordenador?
El conjunto de datos PASCAL VOC (Clases de Objetos Visuales) es una reconocida referencia para la detección, segmentación y clasificación de objetos en visión por ordenador. Incluye anotaciones exhaustivas como cuadros delimitadores, etiquetas de clase y máscaras de segmentación en 20 categorías de objetos diferentes. Los investigadores lo utilizan ampliamente para evaluar el rendimiento de modelos como Faster R-CNN, YOLO, y Mask R-CNN debido a sus métricas de evaluación estandarizadas, como la Precisión Media Media (mAP).
¿Cómo entreno un modelo YOLOv8 utilizando el conjunto de datos VOC?
Para entrenar un modelo YOLOv8 con el conjunto de datos VOC, necesitas la configuración del conjunto de datos en un archivo YAML. Aquí tienes un ejemplo para empezar a entrenar un modelo YOLOv8n para 100 épocas con un tamaño de imagen de 640:
Ejemplo de tren
¿Cuáles son los principales retos incluidos en el conjunto de datos VOC?
El conjunto de datos VOC incluye dos retos principales: VOC2007 y VOC2012. Estos retos ponen a prueba la detección, segmentación y clasificación de objetos en 20 categorías de objetos diferentes. Cada imagen está meticulosamente anotada con cuadros delimitadores, etiquetas de clase y máscaras de segmentación. Los retos proporcionan métricas estandarizadas, como el mAP, que facilitan la comparación y la evaluación comparativa de distintos modelos de visión por ordenador.
¿Cómo mejora el conjunto de datos PASCAL VOC la evaluación comparativa y la evaluación de modelos?
El conjunto de datos PASCAL VOC mejora la evaluación comparativa y la evaluación de modelos gracias a sus anotaciones detalladas y a métricas estandarizadas como la Precisión Media Media (mAP). Estas métricas son cruciales para evaluar el rendimiento de los modelos de detección y clasificación de objetos. Las imágenes diversas y complejas del conjunto de datos garantizan una evaluación exhaustiva del modelo en varios escenarios del mundo real.
¿Cómo utilizo el conjunto de datos VOC para la segmentación semántica en los modelos YOLO ?
Para utilizar el conjunto de datos VOC en tareas de segmentación semántica con modelos YOLO , tienes que configurarlo adecuadamente en un archivo YAML. El archivo YAML define las rutas y las clases necesarias para entrenar los modelos de segmentación. Consulta el archivo de configuración YAML del conjunto de datos VOC en VOC.yaml para obtener una configuración detallada.