Link to this sectionBộ dữ liệu PASCAL VOC#
Bộ dữ liệu PASCAL VOC (Visual Object Classes) là một chuẩn phát hiện đối tượng kinh điển với 20 lớp đối tượng thường gặp. Cấu hình VOC.yaml của Ultralytics kết hợp các tập trainval VOC2007 và VOC2012 thành một tập huấn luyện gồm 16.551 hình ảnh, kiểm thử trên 4.952 hình ảnh kiểm tra VOC2007 được 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 thử thách PASCAL VOC diễn ra từ năm 2005 đến 2012 và định hình cách các mô hình phát hiện đối tượng được đánh giá: bộ chuẩn bao gồm các tác vụ phân loại hình ảnh, phát hiện và phân đoạn, đồng thời phổ biến mean Average Precision (mAP) như một thước đo phát hiện tiêu chuẩn. Cấu hình VOC.yaml của Ultralytics sử dụng các chú thích phát hiện, chuyển đổi các hộp bao XML gốc sang định dạng YOLO trong quá trình tải xuống.
Link to this sectionTí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.
Link to this sectionCấu trúc tập dữ liệu#
Cấu hình VOC.yaml của Ultralytics xác định các phân đoạn 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 | Kiểm tra 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.
Bộ chuyển đổi tự động bỏ qua các đối tượng được gắn nhãn difficult trong các chú thích XML VOC gốc, do đó số lượng thực thể trên mỗi lớp khác nhau một chút so với số liệu thống kê VOC chính thức.
Khám phá VOC trên Nền tảng Ultralytics để duyệt các hình ảnh cùng các lớp phủ chú thích của chúng, xem phân phối lớp và bản đồ nhiệt hộp bao trong tab Biểu đồ, và nhân bản nó để huấn luyện mô hình của riêng bạn trên đám mây.
Link to this sectionỨng dụng#
PASCAL VOC là tiêu chuẩn chính cho nghiên cứu phát hiện đối tượng trong những năm trước khi có bộ dữ liệu COCO lớn hơn: các bộ phát hiện như Faster R-CNN và SSD đã báo cáo các kết quả gốc của chúng trên đó, và các mô hình Ultralytics YOLO huấn luyện trên đó ngay khi cài đặt. 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 về học chuyển tiếp trên một tập hợp nhỏ gọn, dễ hiểu gồm các lớp đối tượng thường gặp
Link to this sectionYAML tập dữ liệu#
Tệp VOC.yaml xác định cấu hình bộ dữ liệu — đường dẫn bộ dữ liệu, 20 tên lớp và tập lệnh tải xuống và chuyển đổi tự động. 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 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, 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 formatLink to this sectionCá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 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 - dataset will auto-download on first run
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)Link to this sectionHình ảnh mẫu và chú thích#
Hình ảnh dưới đây cho thấy một lô huấn luyện được ghép (mosaic) từ bộ dữ liệu VOC. Kỹ thuật ghép 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 thấy trong mỗi lô — xem hướng dẫn tăng cường dữ liệu YOLO để biết chi tiết.

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:
@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 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 sectionBộ dữ liệu PASCAL VOC được sử dụng để làm gì?#
PASCAL VOC được sử dụng để huấn luyện và đánh giá các mô hình phát hiện đối tượng trên 20 lớp đối tượng thường gặp như người, xe hơi, chó và ghế. Vì nó nhỏ gọn, được gắn nhãn đầy đủ và được hỗ trợ bởi nhiều năm đường cơ sở đã công bố, đây là lựa chọn phổ biến để xác thực các kiến trúc mới, thực hiện các thử nghiệm khóa học và các nghiên cứu học chuyển tiếp nhanh chóng.
Link to this sectionCó bao nhiêu hình ảnh trong bộ dữ liệu PASCAL VOC?#
Cấu hình VOC của Ultralytics chứa 21.503 hình ảnh: 16.551 cho huấn luyện (VOC2007 trainval + VOC2012 trainval) và 4.952 cho xác thực (tập kiểm tra VOC2007). Tất cả các phân đoạn đều chia sẻ chung 20 lớp. Xem Cấu trúc bộ dữ liệu để biết thông tin chi tiết đầy đủ.
Link to this sectionLàm thế nào để tải xuống bộ dữ liệu PASCAL VOC?#
VOC tự động tải xuống lần đầu tiên bạn huấn luyện với data="VOC.yaml" — không cần thực hiện thủ công. Tập lệnh sẽ lấy ba tệp lưu trữ (2,8 GB) từ các tài nguyên phát hành trên GitHub của Ultralytics và chuyển đổi các chú thích XML sang định dạng YOLO.
Link to this sectionLàm thế nào để huấn luyện mô hình YOLO26 trên bộ dữ liệu VOC?#
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:
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)Để biết cấu hình chi tiết, hãy xem trang Training và mẹo huấn luyện model.
Link to this sectionSự khác biệt giữa VOC2007 và VOC2012 là gì?#
Cả hai thử thách đều chia sẻ chung 20 lớp nhưng đóng góp các hình ảnh khác nhau. VOC2007 cung cấp 5.011 hình ảnh trainval cộng với tập kiểm tra 4.952 hình ảnh có chú thích công khai; VOC2012 cung cấp 11.540 hình ảnh trainval, trong khi các chú thích kiểm tra của nó bị giữ kín và chỉ được chấm điểm bởi máy chủ đánh giá chính thức. VOC.yaml của Ultralytics hợp nhất cả hai tập trainval để huấn luyện và xác thực trên tập kiểm tra VOC2007.
Link to this sectionPASCAL VOC so với bộ dữ liệu COCO như thế nào?#
VOC nhỏ hơn và đơn giản hơn: 20 lớp và 21.503 hình ảnh so với 80 lớp và 330K hình ảnh của COCO. Kết quả VOC theo truyền thống được báo cáo là mAP tại 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 cho các thử nghiệm nhanh; bộ dữ liệu COCO là tiêu chuẩn cho đánh giá quy mô sản xuất.
Link to this sectionTôi có thể huấn luyện các mô hình phân đoạn với VOC.yaml không?#
Không — VOC.yaml là cấu hình chỉ dành cho phát hiện: bộ chuyển đổi của nó trích xuất các hộp bao từ các chú thích XML VOC, và các mặt nạ phân đoạn có trong bộ chuẩn gốc không được chuyển đổi. Để huấn luyện mô hình phân đoạn thực thể, hãy sử dụng bộ dữ liệu có nhãn đa giác như COCO-Seg với mô hình yolo26n-seg.pt.