Bộ dữ liệu PASCAL VOC#
Bộ dữ liệu PASCAL VOC (Visual Object Classes) là một chuẩn object detection cổ điển với 20 lớp đối tượng thường ngày. Cấu hình Ultralytics VOC.yaml kết hợp các tập trainval VOC2007 và VOC2012 thành tập huấn luyện gồm 16.551 ảnh, kiểm định trên 4.952 ảnh kiểm thử VOC2007 được chú thích công khai, và tự động tải xuống mọi thứ (2,8 GB) trong lần sử dụng đầu tiên.
Watch: How to Train Ultralytics YOLO on the Pascal VOC Dataset | Object Detection | Computer Vision 🚀
Các cuộc thi PASCAL VOC diễn ra từ năm 2005 đến 2012 và định hình cách các mô hình object detection được đánh giá: chuẩn benchmark bao gồm các tác vụ phân loại ảnh, phát hiện, và phân đoạn, đồng thời phổ biến mean Average Precision (mAP) làm thước đo phát hiện tiêu chuẩn. Cấu hình Ultralytics VOC.yaml sử dụng các chú thích phát hiện, chuyển đổi các hộp giới hạn XML gốc sang định dạng YOLO trong quá trình tải xuống.
Tính năng chính#
- 20 lớp đối tượng thường gặp: người; sáu loài động vật (chim, mèo, bò, chó, ngựa, cừu); bảy phương tiện (máy bay, xe đạp, thuyền, xe buýt, xe hơi, xe máy, tàu hỏa); và sáu đồ vật trong nhà (chai, ghế, bàn ăn, chậu cây, ghế sofa, màn hình tivi).
- Kết hợp hai thế hệ thử thách: quá trình huấn luyện hợp nhất tập trainval VOC2007 (5.011 hình ảnh) với tập trainval VOC2012 (11.540 hình ảnh).
- Đánh giá chuẩn hóa: hàng thập kỷ các đường cơ sở VOC được công bố khiến nó trở thành một điểm tham chiếu thuận tiện để so sánh các mô hình phát hiện.
- Sẵn sàng cho YOLO: tập lệnh tải xuống sẽ lấy các tệp lưu trữ và tự động chuyển đổi các chú thích — không cần chuẩn bị thủ công.
Cấu trúc tập dữ liệu#
Cấu hình Ultralytics VOC.yaml xác định các tập dữ liệu phân chia sau:
| Split | Hình ảnh | Nguồn |
|---|---|---|
| Huấn luyện (Train) | 16,551 | VOC2007 trainval (5.011) + VOC2012 trainval (11.540) |
| Validation | 4,952 | Tập kiểm thử VOC2007, được sử dụng để đánh giá trong quá trình huấn luyện |
| Kiểm thử | 4,952 | Cùng các hình ảnh kiểm tra VOC2007 — cấu hình không xác định phân đoạn tách biệt nào khác |
Các chú thích kiểm tra VOC2007 đã được công khai sau thử thách của năm đó, điều này cho phép phân đoạn này đóng vai trò là tập xác thực có nhãn. Các chú thích kiểm tra VOC2012 vẫn được giữ kín — kết quả trên chúng chỉ có thể được chấm điểm thông qua máy chủ đánh giá PASCAL chính thức — vì vậy chúng không phải là một phần của cấu hình này.
Trình chuyển đổi tự động bỏ qua các đối tượng được gắn cờ difficult trong các chú thích XML VOC gốc, do đó số lượng thể hiện trên mỗi lớp có thể chênh lệch nhỏ so với thống kê chính thức của VOC.
Khám phá VOC trên Ultralytics Platform để duyệt qua các hình ảnh với lớp phủ chú thích của chúng, xem phân phối lớp và bản đồ nhiệt hộp giới hạn trong tab Charts, và sao chép để huấn luyện mô hình của riêng bạn trên đám mây.
Ứng dụng#
PASCAL VOC là bộ chuẩn chính cho nghiên cứu object detection trong những năm trước COCO dataset lớn hơn: các bộ phát hiện như Faster R-CNN và SSD đã báo cáo kết quả ban đầu trên đó, và các mô hình Ultralytics YOLO huấn luyện trực tiếp trên đó một cách dễ dàng. Ngày nay, nó vẫn phổ biến cho:
- Đánh giá các kiến trúc phát hiện mới dựa trên lịch sử lâu dài của các đường cơ sở đã được công bố
- Các thử nghiệm nhanh và khóa học — với 16.551 hình ảnh huấn luyện, nó huấn luyện nhanh hơn nhiều so với COCO
- Các nghiên cứu Transfer learning trên một tập hợp các lớp thông thường nhỏ gọn, đã được hiểu rõ
YAML tập dữ liệu#
Tệp VOC.yaml xác định cấu hình dataset — các đường dẫn dataset, 20 tên lớp, và tập lệnh tự động tải xuống và chuyển đổi. Nó được duy trì trong kho lưu trữ Ultralytics 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 https://www.robots.ox.ac.uk/~vgg/projects/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, 5011 images
f"{ASSETS_URL}/VOCtest_06-Nov-2007.zip", # 438MB, 4952 images
f"{ASSETS_URL}/VOCtrainval_11-May-2012.zip", # 1.95GB, 17125 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 formatCách sử dụng#
VOC tự động tải xuống lần đầu tiên bạn huấn luyện — ba tệp lưu trữ tổng cộng 2,8 GB — và cần khoảng 6 GB dung lượng đĩa trống trong quá trình giải nén và chuyển đổi.
Để huấn luyện mô hình YOLO26n trên dataset 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 toàn diện các đối số có sẵn, hãy tham khảo trang Training của mô hình.
from ultralytics import YOLO
# Load a model
model = YOLO("yolo26n.pt") # load a pretrained model (recommended for training)
# Train the model - dataset will auto-download on first run
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Hình ảnh mẫu và chú thích#
Hình ảnh bên dưới hiển thị một batch huấn luyện được ghép (mosaiced) từ dataset VOC. Phương pháp ghép ảnh kết hợp nhiều hình ảnh thành một mẫu huấn luyện duy nhất, làm tăng sự đa dạng của các đối tượng, tỷ lệ và bối cảnh cảnh quan mà mô hình nhìn thấy trong mỗi batch — hãy xem hướng dẫn tăng cường dữ liệu YOLO để biết chi tiết.

Trí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:
@article{everingham2010pascal,
author={Everingham, Mark and Van Gool, Luc and Williams, Christopher K. I. and Winn, John and Zisserman, Andrew},
journal={International Journal of Computer Vision},
title={The Pascal Visual Object Classes (VOC) Challenge},
year={2010},
volume={88},
number={2},
pages={303-338},
doi={10.1007/s11263-009-0275-4}}Chúng tôi xin cảm ơn PASCAL VOC Consortium vì đã tạo và duy trì nguồn tài nguyên có giá trị này cho cộng đồng computer vision. Để biết thêm thông tin về dataset VOC và những người tạo ra nó, hãy truy cập trang web dataset PASCAL VOC.
Câu hỏi thường gặp#
PASCAL VOC được sử dụng để huấn luyện và đánh giá các mô hình object detection trên 20 lớp đối tượng thường ngày như con người, ô tô, chó và ghế. Vì nó nhỏ gọn, được gán nhãn đầy đủ và được hỗ trợ bởi nhiều năm cơ sở dữ liệu đã công bố, đây là một lựa chọn phổ biến để xác thực các kiến trúc mới, chạy các thí nghiệm bài tập và nghiên cứu transfer learning nhanh chóng.
Cấu hình Ultralytics VOC chứa 21.503 hình ảnh: 16.551 cho huấn luyện (VOC2007 trainval + VOC2012 trainval) và 4.952 để kiểm định (tập kiểm thử VOC2007). Tất cả các phần chia đều dùng chung 20 lớp. Xem Dataset Structure để có phân tích chi tiết đầy đủ.
VOC tự động tải xuống trong lần đầu tiên bạn huấn luyện với
data="VOC.yaml"— không cần các bước thủ công nào. Tập lệnh tìm nạp ba tệp lưu trữ (2,8 GB) từ các nội dung phát hành GitHub của Ultralytics và chuyển đổi các chú thích XML sang định dạng YOLO.Huấn luyện mô hình YOLO26n trên VOC trong 100 epoch với kích thước hình ảnh là 640:
Ví dụ về Trainingfrom 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)Để biết cấu hình chi tiết, hãy xem trang Training và model training tips.
Cả hai thử thách đều chia sẻ 20 lớp giống nhau nhưng đóng góp các hình ảnh khác nhau. VOC2007 cung cấp 5.011 ảnh trainval cộng với tập kiểm thử 4.952 ảnh có chú thích công khai; VOC2012 cung cấp 11.540 ảnh trainval, trong khi các chú thích kiểm thử của nó được giữ lại và chỉ được chấm điểm bởi máy chủ đánh giá chính thức.
VOC.yamlcủa Ultralytics hợp nhất cả hai tập trainval để huấn luyện và kiểm định trên tập kiểm thử VOC2007.VOC nhỏ hơn và đơn giản hơn: 20 lớp và 21.503 ảnh so với 80 lớp và 330 nghìn ảnh của COCO. Kết quả VOC truyền thống được báo cáo dưới dạng mAP ở ngưỡng IoU 0.5, trong khi COCO tính trung bình mAP trên các ngưỡng IoU từ 0.5 đến 0.95. VOC huấn luyện nhanh hơn nhiều và phù hợp với các thí nghiệm nhanh; COCO dataset là tiêu chuẩn cho việc đánh giá chuẩn ở quy mô sản xuất.
Không —
VOC.yamllà cấu hình chỉ dành cho phát hiện: trình chuyển đổi của nó trích xuất các hộp giới hạn từ các chú thích XML của VOC và các mặt nạ phân đoạn đi kèm trong tiêu chuẩn ban đầu không được chuyển đổi. Để huấn luyện một mô hình instance segmentation, hãy sử dụng một dataset có nhãn đa giác như COCO-Seg với mô hìnhyolo26n-seg.pt.



