Bộ dữ liệu VOC
Bộ dữ liệu PASCAL VOC (Visual Object Classes) là một bộ dữ liệu nổi tiếng về phát hiện, phân vùng và phân loại đối tượ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 để đánh giá các mô hình thị giác máy tính. Đây là một bộ dữ liệu thiết yếu cho các nhà nghiên cứu và phát triển làm việc về các tác vụ phát hiện, phân vùng 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ử thách chính: VOC2007 và VOC2012.
- Bộ dữ liệu bao gồm 20 loại đố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 loại cụ thể hơn như thuyền, ghế sofa và bàn ăn.
- Các 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 vùng cho các tác vụ phân vùng.
- VOC cung cấp các chỉ số đánh giá tiêu chuẩn như độ chính xác trung bình (mAP) cho phát hiện và phân loại đối tượng, làm cho nó phù hợp để so sánh hiệu suất mô hình.
Cấu trúc bộ dữ liệu
Bộ dữ liệu VOC được chia thành ba tập con:
- Train: Tập con này chứa hình ảnh để huấn luyện các mô hình phát hiện, phân vùng và phân loại đối tượng.
- Validation: Tậ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 huấn luyện mô hình.
- Test: Tập con này bao gồm các hình ảnh được sử dụng để kiểm tra và đánh giá các mô hình đã huấn luyện. Các chú thích ground truth cho tậ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.
Các ứng dụng
Bộ dữ liệu VOC được sử dụng rộng rãi để huấn luyện 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ư Ultralytics YOLO, Faster R-CNN và SSD), phân đoạn thể hiện (chẳng hạn như Mask R-CNN) và phân loại hình ảnh. Tập hợp đa dạng các danh mục đối tượng, số lượng lớn hình ảnh được chú thích và các số liệu đánh giá tiêu chuẩn của bộ dữ liệu làm cho nó trở thành một nguồn tài nguyên thiết yếu cho các nhà nghiên cứu và người thực hành thị giác máy tính.
YAML bộ dữ liệu
Tệp YAML (Yet Another Markup Language) được sử dụng để xác định cấu hình bộ dữ liệu. Nó chứa thông tin về đường dẫn, lớp và các thông tin liên quan khác của bộ dữ liệu. Trong trường hợp bộ 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 🚀 AGPL-3.0 License - https://ultralytics.com/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: 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 pathlib import Path
from ultralytics.utils.downloads import download
from ultralytics.utils import TQDM
def convert_label(path, lb_path, year, image_id):
"""Converts XML annotations from VOC format to YOLO format by extracting bounding boxes and class IDs."""
def convert_box(size, box):
dw, dh = 1.0 / size[0], 1.0 / 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", threads=3, exist_ok=True) # download and unzip over existing (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
Để huấn luyện mô hình YOLO11n trên bộ dữ liệu VOC trong 100 epochs với kích thước hình ảnh là 640, bạn có thể sử dụng các đoạn mã sau. Để có danh sách đầy đủ các đối số có sẵn, hãy tham khảo trang Huấn luyện mô hình.
Ví dụ huấn luyện
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 và Chú thích mẫu
Bộ dữ liệu VOC chứa một tập hợp đa dạng các hình ảnh với nhiều loại đối tượng và cảnh phức tạp. Dưới đây là một số ví dụ về hình ảnh từ bộ dữ liệu, cùng với các chú thích tương ứng của chúng:
- Hình ảnh Mosaiced: Hình ảnh này minh họa một lô huấn luyện bao gồm các hình ảnh bộ dữ liệu được mosaiced. Mosaicing là một kỹ thuật được sử dụng trong quá trình huấn luyện, 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 lô huấn luyện. Điều này giúp cải thiện khả năng tổng quát hóa của mô hình đối với các kích thước, tỷ lệ khung hình và ngữ cảnh khác nhau của đối tượng.
Ví dụ này thể hiện sự đa dạng và phức tạp của hình ảnh trong bộ dữ liệu VOC, cũng như lợi ích của việc sử dụng kỹ thuật mosaicing trong quá trình huấn luyện.
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 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}
}
Chúng tôi xin ghi nhận công lao của PASCAL VOC Consortium trong việc tạo ra và duy trì nguồn tài nguyên giá trị này cho cộng đồng thị giác máy tính. Để biết thêm thông tin về bộ dữ liệu VOC và những người tạo ra nó, hãy truy cập trang web bộ 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à một chuẩn mực nổi tiếng cho phát hiện đối tượng, phân vùng và phân loại trong lĩnh vực 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 vùng 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 bộ dữ liệu này để đá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á tiêu chuẩn như độ chính xác trung bình (mAP).
Làm cách nào để huấn luyện mô hình YOLO11 bằng bộ dữ liệu VOC?
Để huấn luyện mô hình YOLO11 với bộ dữ liệu VOC, bạn cần cấu hình bộ dữ liệu trong tệp YAML. Dưới đây là một ví dụ để bắt đầu huấn luyện mô hình YOLO11n trong 100 epochs với kích thước ảnh là 640:
Ví dụ huấn luyện
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 nào có trong bộ dữ liệu VOC?
Bộ dữ liệu VOC bao gồm hai thử thách chính: VOC2007 và VOC2012. Các 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 tiêu chuẩn như mAP, tạo điều kiện so sánh và đánh giá 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 khả năng đánh giá và đo lường hiệu suất mô hình như thế nào?
Bộ dữ liệu PASCAL VOC tăng cường khả năng đánh giá và định chuẩn mô hình thông qua các chú thích chi tiết và các số liệu tiêu chuẩn như độ chính xác trung bình (Precision) (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. 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 trên nhiều tình huống thực tế khác nhau.
Làm cách nào để sử dụng bộ dữ liệu VOC cho phân vùng ngữ nghĩa trong các mô hình YOLO?
Để sử dụng bộ dữ liệu VOC cho các tác vụ phân đoạn ngữ nghĩa với các mô hình YOLO, bạn cần định cấu hình bộ 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 để huấn luyện các mô hình phân đoạn. Kiểm tra tệp cấu hình YAML của bộ dữ liệu VOC tại VOC.yaml để biết các thiết lập chi tiết. Đối với các tác vụ phân đoạn, bạn sẽ sử dụng một mô hình dành riêng cho phân đoạn như yolo11n-seg.pt
thay vì mô hình phát hiện.