Bỏ qua nội dung

Bộ dữ liệu VOC

Bộ dữ liệu PASCAL VOC (Visual Object Classes) là bộ dữ liệu phát hiện, phân đoạn và phân loại đối tượng nổi tiếng. Bộ dữ liệu này đượ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 để đánh giá chuẩn các mô hình thị giác máy tính. Đây là bộ dữ liệu thiết yếu cho các nhà nghiên cứu và nhà phát triển làm việc trên 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 các 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, cũng như mặt nạ phân đoạn cho các tác vụ phân đoạn.
  • VOC cung cấp các số liệu đánh giá chuẩn hóa như Độ chính xác trung bình (mAP) để phát hiện và phân loại đối tượng, giúp phù hợp để so sánh hiệu suất của mô hình.

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

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

  1. Đào tạo : Tập hợp con này chứa các hình ảnh để đào tạo các mô hình phát hiện, phân đoạn và phân loại đối tượng.
  2. Xác thực : Tập hợp con này có cá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à đánh giá chuẩn các mô hình đã được đào tạo. Các chú thích thực tế cho tập hợp con này không được công khai và kết quả được gửi đến máy chủ đánh giá PASCAL VOC để đánh giá hiệu suất.

Ứng dụng

Bộ dữ liệu VOC được sử dụng rộng rãi để đào tạo và đánh giá các mô hình học sâu trong phát hiện đối tượng (chẳng hạn như YOLO , Faster R-CNN và SSD), phân đoạn thể hiện (như Mask R-CNN) và phân loại hình ảnh . Bộ dữ liệu có nhiều danh mục đối tượng, số lượng lớn hình ảnh có chú thích và số liệu đánh giá chuẩn hóa khiến đây trở thành nguồn tài nguyên thiết yếu cho các nhà nghiên cứu và học viên về thị giác máy tính.

Bộ 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. Tệp này chứa thông tin về đường dẫn, lớp và các thông tin liên quan khác của tập dữ liệu. Trong trường hợp của tập dữ liệu VOC, VOC.yaml tập tin đượ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

Cách sử dụng

Để đào tạo mô hình YOLO11n trên tập dữ liệu VOC trong 100 kỷ nguyên với kích thước hình ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để biết danh sách đầy đủ các đối số khả dụng, hãy tham khảo trang Đào tạo mô hình.

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 tập hợp hình ảnh đa dạng với nhiều loại đối tượng và cảnh phức tạp. Sau đây là một số ví dụ về hình ảnh từ bộ dữ liệu, cùng với chú thích tương ứng của chúng:

Hình ảnh mẫu của bộ dữ liệu

  • Mosaiced Image : Hình ảnh này minh họa một lô đào tạo bao gồm các hình ảnh tập dữ liệu mosaic. Mosaicing 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 tính đa dạng của các đối tượng và cảnh trong mỗi lô đào tạo. Điều này giúp cải thiện khả năng khái quát hóa của mô hình đối với các kích thước đối tượng, tỷ lệ khung hình và bối 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 cũng như lợi ích của việc sử dụng khảm trong quá trình đào tạo.

Trích dẫn và Lời cảm ơn

Nếu bạn sử dụng bộ dữ liệu VOC trong công tá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}
}

Chúng tôi muốn cảm ơn PASCAL VOC Consortium đã tạo ra và duy trì nguồn tài nguyên có giá trị này cho cộng đồng thị giác máy tính . Để biết thêm thông tin về tập dữ liệu VOC và những người tạo ra nó, hãy truy cập trang web tập dữ liệu PASCAL VOC .

CÂU HỎI THƯỜNG GẶP

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?

Bộ dữ liệu PASCAL VOC (Visual Object Classes) là chuẩn mực nổi tiếng về phát hiện, phân đoạn và phân loại đối tượng trong thị giác máy tính. Nó bao gồm các chú thích toàn diện như hộp giới hạn, nhãn lớp và mặt nạ phân đoạn trên 20 danh mục đối tượng khác nhau. Các nhà nghiên cứu sử dụng rộng rãi để đánh giá hiệu suất của các mô hình như Faster R-CNN, YOLO và Mask R-CNN nhờ các số liệu đánh giá chuẩn hóa như Độ chính xác trung bình (mAP).

Làm thế nào để tôi đào tạo một YOLO11 mô hình sử dụng tập dữ liệu VOC?

Để đào tạo một YOLO11 mô hình với tập dữ liệu VOC, bạn cần cấu hình tập dữ liệu trong tệp YAML. Sau đây là ví dụ để bắt đầu đào tạo mô hình YOLO11n cho 100 kỷ nguyên với kích thước hình ảnh là 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 trong bộ dữ liệu VOC là gì?

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

Bộ dữ liệu PASCAL VOC nâng cao khả năng đánh giá và chuẩn hóa mô hình như thế nào?

Bộ dữ liệu PASCAL VOC tăng cường đánh giá và chuẩn hóa mô hình thông qua các chú thích chi tiết và các số liệu chuẩn hóa như Độ chính xác trung bình (mAP). Các số liệu này rất quan trọng để đánh giá hiệu suất của các mô hình phát hiện và phân loại đối tượng. Các hình ảnh đa dạng và phức tạp của bộ dữ liệu đảm bảo đánh giá mô hình toàn diện trong nhiều tình huống thực tế khác nhau.

Làm thế nào để tôi sử dụng tập dữ liệu VOC để phân đoạn ngữ nghĩa trong YOLO mô hình?

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

📅 Được tạo ra cách đây 1 năm ✏️ Đã cập nhật cách đây 2 tháng

Bình luận