Bỏ để qua phần nội dung

Tập dữ liệu VOC

Bộ dữ liệu PASCAL VOC (Visual Object Classes) là một tập dữ liệu phát hiện, phân đoạn và phân loại đối tượng nổi tiếng. Nó được thiết kế để khuyến khích nghiên cứu về nhiều loại đối tượng khác nhau và thường được sử dụng để đo điểm chuẩn cho các mô hình thị giác máy tính. Đây là một bộ dữ liệu cần thiết cho các nhà nghiên cứu và nhà phát triển làm việc về các nhiệm vụ phát hiện, phân đoạn và phân loại đối tượng.

Các tính năng chính

  • Bộ dữ liệu VOC bao gồm hai thách thức chính: VOC2007 và VOC2012.
  • Bộ dữ liệu bao gồm 20 danh mục đối tượng, bao gồm các đối tượng phổ biến như ô tô, xe đạp và động vật, cũng như các danh mục cụ thể hơn như thuyền, ghế sofa và bàn ăn.
  • Chú thích bao gồm hộp giới hạn đối tượng và nhãn lớp cho các tác vụ phát hiện và phân loại đối tượng và mặt nạ phân đoạn cho các tác vụ phân đoạn.
  • VOC provides standardized evaluation metrics like mean Average Precision (mAP) for object detection and classification, making it suitable for comparing model performance.

Cấu trúc tập dữ liệu

Tập dữ liệu VOC được chia thành ba tập hợp con:

  1. Train: Tập hợp con này chứa hình ảnh để đào tạo các mô hình phát hiện, phân đoạn và phân loại.
  2. Xác thực: Tập hợp con này có hình ảnh được sử dụng cho mục đích xác thực trong quá trình đào tạo mô hình.
  3. Kiểm tra: Tập hợp con này bao gồm các hình ảnh được sử dụng để kiểm tra và đo điểm chuẩn cho các mô hình được đào tạo. Chú thích sự thật cơ bản cho tập hợp con này không có sẵn công khai và kết quả được gửi đến máy chủ đánh giá VOC PASCAL để đánh giá hiệu suất.

Ứng dụng

The VOC dataset is widely used for training and evaluating deep learning models in object detection (such as YOLO, Faster R-CNN, and SSD), instance segmentation (such as Mask R-CNN), and image classification. The dataset's diverse set of object categories, large number of annotated images, and standardized evaluation metrics make it an essential resource for computer vision researchers and practitioners.

Tập dữ liệu YAML

Tệp YAML (Yet Another Markup Language) được sử dụng để xác định cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn, lớp và thông tin liên quan khác của tập dữ liệu. Trong trường hợp tập dữ liệu VOC, VOC.yaml Tệp được duy trì tại 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

Sử dụng

To train a YOLO11n model on the VOC dataset for 100 epochs with an image size of 640, you can use the following code snippets. For a comprehensive list of available arguments, refer to the model Training page.

Ví dụ về tàu hỏa

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

Hình ảnh mẫu và chú thích

Bộ dữ liệu VOC chứa một bộ hình ảnh đa dạng với nhiều loại đối tượng khác nhau và các cảnh phức tạp. Dưới đây là một số ví dụ về hình ảnh từ tập dữ liệu, cùng với các chú thích tương ứng của chúng:

Hình ảnh mẫu tập dữ liệu

  • Hình ảnh khảm: Hình ảnh này thể hiện một lô đào tạo bao gồm các hình ảnh tập dữ liệu được khảm. Khảm là một kỹ thuật được sử dụng trong quá trình đào tạo kết hợp nhiều hình ảnh thành một hình ảnh duy nhất để tăng sự đa dạng của các đối tượng và cảnh trong mỗi đợt đào tạo. Điều này giúp cải thiện khả năng khái quát hóa mô hình cho các kích thước đối tượng, tỷ lệ khung hình và ngữ cảnh khác nhau.

Ví dụ này cho thấy sự đa dạng và phức tạp của hình ảnh trong tập dữ liệu VOC và lợi ích của việc sử dụng khảm trong quá trình đào tạo.

Trích dẫn và xác nhận

Nếu bạn sử dụng bộ dữ liệu VOC trong công việc nghiên cứu hoặc phát triển của mình, vui lòng trích dẫn bài báo sau:

@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}
}

We would like to acknowledge the PASCAL VOC Consortium for creating and maintaining this valuable resource for the computer vision community. For more information about the VOC dataset and its creators, visit the PASCAL VOC dataset website.

FAQ

Bộ dữ liệu PASCAL VOC là gì và tại sao nó lại quan trọng đối với các tác vụ thị giác máy tính?

The PASCAL VOC (Visual Object Classes) dataset is a renowned benchmark for object detection, segmentation, and classification in computer vision. It includes comprehensive annotations like bounding boxes, class labels, and segmentation masks across 20 different object categories. Researchers use it widely to evaluate the performance of models like Faster R-CNN, YOLO, and Mask R-CNN due to its standardized evaluation metrics such as mean Average Precision (mAP).

How do I train a YOLO11 model using the VOC dataset?

To train a YOLO11 model with the VOC dataset, you need the dataset configuration in a YAML file. Here's an example to start training a YOLO11n model for 100 epochs with an image size of 640:

Ví dụ về tàu hỏa

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

Những thách thức chính bao gồm trong tập dữ liệu VOC là gì?

Bộ dữ liệu VOC bao gồm hai thách thức chính: VOC2007 và VOC2012. Những thách thức này kiểm tra việc phát hiện, phân đoạn và phân loại đối tượng trên 20 loại đối tượng đa dạng. Mỗi hình ảnh được chú thích tỉ mỉ với các hộp giới hạn, nhãn lớp và mặt nạ phân đoạn. Các thách thức cung cấp các số liệu được tiêu chuẩn hóa như mAP, tạo điều kiện thuận lợi cho việc so sánh và đo điểm chuẩn của các mô hình thị giác máy tính khác nhau.

Bộ dữ liệu PASCAL VOC tăng cường điểm chuẩn và đánh giá mô hình như thế nào?

The PASCAL VOC dataset enhances model benchmarking and evaluation through its detailed annotations and standardized metrics like mean Average Precision (mAP). These metrics are crucial for assessing the performance of object detection and classification models. The dataset's diverse and complex images ensure comprehensive model evaluation across various real-world scenarios.

How do I use the VOC dataset for semantic segmentation in YOLO models?

Để sử dụng tập dữ liệu VOC cho các tác vụ phân đoạn ngữ nghĩa với YOLO mô hình, bạn cần định cấu hình tập dữ liệu đúng cách trong tệp YAML. Tệp YAML xác định các đường dẫn và lớp cần thiết cho các mô hình phân đoạn đào tạo. Kiểm tra tệp cấu hình YAML tập dữ liệu VOC tại VOC.yaml để biết thiết lập chi tiết.


📅 Created 11 months ago ✏️ Updated 12 days ago

Ý kiến