Link to this sectionTập dữ liệu VOC#
Tập dữ liệu PASCAL VOC (Visual Object Classes) là một tập dữ liệu nổi tiếng về phát hiện đối tượng, phân đoạn và phân loại. Nó được thiết kế để khuyến khích nghiên cứu trên nhiều danh mục đối tượng khác nhau và thường được sử dụng để đánh giá các model thị giác máy tính. Đây là một tập 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 với các tác vụ phát hiện đối tượng, phân đoạn và phân loại.
Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀
Link to this sectionTính năng chính#
- Tập dữ liệu VOC bao gồm hai thử thách chính: VOC2007 và VOC2012.
- Tập dữ liệu bao gồm 20 danh mục đối tượng, 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.
- Các chú thích bao gồm BBox đố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 với các mặt nạ phân đoạn cho các tác vụ phân đoạn.
- VOC cung cấp các chỉ số đánh giá tiêu chuẩn như mean Average Precision (mAP) cho phát hiện và phân loại đối tượng, giúp nó phù hợp để so sánh hiệu suất model.
Link to this sectionCấu trúc tập dữ liệu#
Tập dữ liệu VOC được chia thành ba tập con:
- Train: Tập con này chứa các hình ảnh để huấn luyện các model phát hiện đối tượng, phân đoạn và phân loại.
- 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 model.
- Test: Tập con này bao gồm các hình ảnh được sử dụng để kiểm thử và đánh giá các model đã được 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ả trước đây thường được gửi đến máy chủ đánh giá PASCAL VOC để đánh giá hiệu suất.
Link to this sectionỨng dụng#
Tập dữ liệu VOC được sử dụng rộng rãi để huấn luyện và đánh giá các model deep learning trong phát hiện đối tượng (như Ultralytics YOLO, Faster R-CNN và SSD), instance segmentation (như Mask R-CNN) và image classification. Tập hợp các danh mục đối tượng đa dạng, số lượng lớn hình ảnh được chú thích và các chỉ số đánh giá tiêu chuẩn của tập dữ liệu làm cho nó trở thành một tài nguyên thiết yếu cho các nhà nghiên cứu và người thực hành computer vision.
Link to this sectionYAML tập dữ liệu#
Một tệp YAML (Yet Another Markup Language) được sử dụng để định cấu hình tập dữ liệu. Nó chứa thông tin về đường dẫn, các lớp và các thông tin liên quan khác của tập dữ liệu. Đối với tập dữ liệu VOC, tệp VOC.yaml được duy trì tại https://github.com/ultralytics/ultralytics/blob/main/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: 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 ASSETS_URL, 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
with open(path / f"VOC{year}/Annotations/{image_id}.xml") as in_file, open(lb_path, "w", encoding="utf-8") as out_file:
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
urls = [
f"{ASSETS_URL}/VOCtrainval_06-Nov-2007.zip", # 446MB, 5012 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4953 images
f"{ASSETS_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 formatLink to this sectionCách sử dụng#
Để huấn luyện model YOLO26n trên tập dữ liệu VOC trong 100 epochs với kích thước ả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 Training của model.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Link to this sectionHình ảnh mẫu và chú thích#
Tập dữ liệu VOC chứa một tập hợp hình ảnh đa dạng với nhiều danh mục đối tượng 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:

- Hình ảnh Mosaiced: Hình ảnh này minh họa một batch huấn luyện bao gồm các hình ảnh từ tập dữ liệu đã được áp dụng kỹ thuật Mosaic. Mosaic là một kỹ thuật được sử dụng trong quá trình huấn luyện nhằm 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à bối cảnh trong mỗi batch 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 model đố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 minh họa sự đa dạng và phức tạp của các hình ảnh trong tập dữ liệu VOC cũng như lợi ích của việc sử dụng kỹ thuật mosaic trong quá trình huấn luyện.
Link to this sectionTrích dẫn và Ghi nhận#
Nếu bạn sử dụng tập 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 PASCAL VOC Consortium vì đã tạo và duy trì tài nguyên quý giá này cho cộng đồng computer vision. Để 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.
Link to this sectionCâu hỏi thường gặp#
Link to this sectionTập 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?#
Tập dữ liệu PASCAL VOC (Visual Object Classes) là một tiêu chuẩn nổi tiếng cho object detection, phân đoạn và phân loại trong thị giác máy tính. Nó bao gồm các chú thích toàn diện như BBox, 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 nó rộng rãi để đánh giá hiệu suất của các model như Faster R-CNN, YOLO và Mask R-CNN nhờ các chỉ số đánh giá tiêu chuẩn như mean Average Precision (mAP).
Link to this sectionLàm thế nào để tôi huấn luyện model YOLO26 bằng tập dữ liệu VOC?#
Để huấn luyện model YOLO26 với tập dữ liệu VOC, bạn cần cấu hình tập dữ liệu trong một tệp YAML. Đây là ví dụ để bắt đầu huấn luyện model YOLO26n trong 100 epochs với kích thước ảnh là 640:
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Link to this sectionNhững thử thách chính nào được bao gồm trong tập dữ liệu VOC?#
Tập 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 đối tượng, phân đoạn và phân loại trên 20 danh mục đối tượng đa dạng. Mỗi hình ảnh được chú thích tỉ mỉ với BBox, nhãn lớp và mặt nạ phân đoạn. Các thử thách cung cấp các chỉ số tiêu chuẩn như mAP, tạo điều kiện cho việc so sánh và đánh giá các model thị giác máy tính khác nhau.
Link to this sectionTập dữ liệu PASCAL VOC tăng cường việc đánh giá và benchmark model như thế nào?#
Tập dữ liệu PASCAL VOC tăng cường việc đánh giá và benchmark model thông qua các chú thích chi tiết và các chỉ số tiêu chuẩn như mean Average Precision (mAP). Những chỉ số này rất quan trọng để đánh giá hiệu suất của các model 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 tập dữ liệu đảm bảo việc đánh giá model toàn diện trên nhiều tình huống thực tế khác nhau.
Link to this sectionLàm thế nào để tôi sử dụng tập dữ liệu VOC cho semantic segmentation trong các model YOLO?#
Để sử dụng tập dữ liệu VOC cho các tác vụ phân đoạn ngữ nghĩa với các model YOLO, 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à các lớp cần thiết để huấn luyện các model 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 cách 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 model chuyên biệt về phân đoạn như yolo26n-seg.pt thay vì model phát hiện.