Link to this sectionVOC 데이터셋#
PASCAL VOC(Visual Object Classes) 데이터셋은 객체 탐지, 세그멘테이션 및 분류를 위한 유명한 데이터셋입니다. 이 데이터셋은 다양한 객체 카테고리에 대한 연구를 장려하기 위해 설계되었으며, 컴퓨터 비전 모델의 벤치마킹에 널리 사용됩니다. 객체 탐지, 세그멘테이션 및 분류 작업을 수행하는 연구자와 개발자에게 필수적인 데이터셋입니다.
Watch: How to Train Ultralytics YOLO26 on the Pascal VOC Dataset | Object Detection 🚀
Link to this section주요 특징#
- VOC 데이터셋에는 VOC2007과 VOC2012라는 두 가지 주요 챌린지가 포함되어 있습니다.
- 이 데이터셋은 자동차, 자전거, 동물과 같은 일반적인 객체를 포함하여 보트, 소파, 식탁과 같은 더 구체적인 카테고리까지 총 20개의 객체 카테고리로 구성됩니다.
- 주석에는 객체 탐지 및 분류 작업을 위한 객체 BBox와 클래스 레이블, 세그멘테이션 작업을 위한 세그멘테이션 마스크가 포함되어 있습니다.
- VOC는 객체 탐지 및 분류를 위한 mean Average Precision(mAP)과 같은 표준화된 평가 지표를 제공하여 모델 성능 비교에 적합합니다.
Link to this section데이터셋 구조#
VOC 데이터셋은 세 개의 하위 집합으로 나뉩니다:
- Train: 이 하위 집합에는 객체 탐지, 세그멘테이션 및 분류 모델을 학습하기 위한 이미지가 포함되어 있습니다.
- Validation: 이 하위 집합에는 모델 학습 중에 검증 목적으로 사용되는 이미지가 포함되어 있습니다.
- Test: 이 하위 집합은 학습된 모델을 테스트하고 벤치마킹하는 데 사용되는 이미지로 구성됩니다. 이 하위 집합에 대한 정답(Ground truth) 주석은 공개적으로 제공되지 않으며, 결과는 역사적으로 PASCAL VOC 평가 서버에 제출되어 성능을 평가받았습니다.
Link to this section응용 분야#
The VOC dataset is widely used for training and evaluating deep learning models in object detection (such as Ultralytics YOLO, Faster R-CNN, and SSD), instance segmentation (such as Mask R-CNN), and image classification. The dataset's diverse set of object categories, large number of annotated images, and standardized evaluation metrics make it an essential resource for computer vision researchers and practitioners.
Link to this section데이터셋 YAML#
YAML(Yet Another Markup Language) 파일은 데이터셋 구성을 정의하는 데 사용됩니다. 여기에는 데이터셋의 경로, 클래스 및 기타 관련 정보가 포함되어 있습니다. VOC 데이터셋의 경우 VOC.yaml 파일이 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 section사용법#
VOC 데이터셋에서 이미지 크기 640으로 100 에포크(epochs) 동안 YOLO26n 모델을 학습하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수에 대한 자세한 목록은 모델 학습(Training) 페이지를 참조하십시오.
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 section샘플 이미지 및 주석#
VOC 데이터셋에는 다양한 객체 카테고리와 복잡한 장면이 포함된 다채로운 이미지 세트가 있습니다. 다음은 데이터셋 이미지와 그에 해당하는 주석의 몇 가지 예시입니다:

- 모자이크 처리된 이미지: 이 이미지는 모자이크 처리된 데이터셋 이미지로 구성된 학습 배치를 보여줍니다. 모자이킹은 학습 중에 여러 이미지를 하나의 이미지로 결합하여 각 학습 배치 내의 객체와 장면의 다양성을 높이는 데 사용되는 기술입니다. 이는 모델이 다양한 객체 크기, 종횡비 및 맥락에 일반화할 수 있는 능력을 향상시키는 데 도움이 됩니다.
이 예시는 VOC 데이터셋 이미지의 다양성과 복잡성, 그리고 학습 과정에서 모자이크 처리를 사용할 때의 이점을 보여줍니다.
Link to this section인용 및 감사의 글#
연구 또는 개발 작업에 VOC 데이터셋을 사용하는 경우 다음 논문을 인용해 주십시오:
@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}
}컴퓨터 비전 커뮤니티를 위해 이 귀중한 리소스를 만들고 유지 관리해 준 PASCAL VOC 컨소시엄에 감사드립니다. VOC 데이터셋과 제작자에 대한 자세한 내용은 PASCAL VOC 데이터셋 웹사이트를 방문하십시오.
Link to this sectionFAQ#
Link to this sectionPASCAL VOC 데이터셋이란 무엇이며 컴퓨터 비전 작업에서 왜 중요한가요?#
PASCAL VOC(Visual Object Classes) 데이터셋은 컴퓨터 비전 분야의 객체 탐지, 세그멘테이션 및 분류를 위한 유명한 벤치마크입니다. 여기에는 20개의 서로 다른 객체 카테고리에 걸쳐 BBox, 클래스 레이블 및 세그멘테이션 마스크와 같은 포괄적인 주석이 포함되어 있습니다. 연구자들은 mean Average Precision(mAP)과 같은 표준화된 평가 지표 때문에 Faster R-CNN, YOLO, Mask R-CNN과 같은 모델의 성능을 평가하는 데 이 데이터셋을 널리 사용합니다.
Link to this sectionVOC 데이터셋을 사용하여 YOLO26 모델을 어떻게 학습합니까?#
VOC 데이터셋으로 YOLO26 모델을 학습하려면 YAML 파일 형태의 데이터셋 구성이 필요합니다. 다음은 이미지 크기 640으로 100 에포크 동안 YOLO26n 모델 학습을 시작하는 예시입니다:
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 sectionVOC 데이터셋에 포함된 주요 챌린지는 무엇입니까?#
VOC 데이터셋에는 VOC2007과 VOC2012라는 두 가지 주요 챌린지가 포함되어 있습니다. 이러한 챌린지는 20개의 다양한 객체 카테고리에 걸쳐 객체 탐지, 세그멘테이션 및 분류 성능을 테스트합니다. 각 이미지는 BBox, 클래스 레이블 및 세그멘테이션 마스크로 세심하게 주석 처리되어 있습니다. 이 챌린지는 mAP와 같은 표준화된 지표를 제공하여 서로 다른 컴퓨터 비전 모델 간의 비교 및 벤치마킹을 용이하게 합니다.
Link to this sectionPASCAL VOC 데이터셋은 어떻게 모델 벤치마킹과 평가를 향상합니까?#
PASCAL VOC 데이터셋은 상세한 주석과 mean Average Precision(mAP)과 같은 표준화된 지표를 통해 모델 벤치마킹과 평가를 향상합니다. 이러한 지표는 객체 탐지 및 분류 모델의 성능을 평가하는 데 중요합니다. 데이터셋의 다양하고 복잡한 이미지들은 다양한 실제 시나리오에서 포괄적인 모델 평가를 보장합니다.
Link to this sectionYOLO 모델에서 세그멘테이션(semantic segmentation)을 위해 VOC 데이터셋을 어떻게 사용합니까?#
YOLO 모델에서 세그멘테이션 작업을 위해 VOC 데이터셋을 사용하려면 YAML 파일에서 데이터셋을 올바르게 구성해야 합니다. YAML 파일은 세그멘테이션 모델 학습에 필요한 경로와 클래스를 정의합니다. 자세한 설정은 VOC.yaml 파일을 확인하십시오. 세그멘테이션 작업의 경우 탐지 모델 대신 yolo26n-seg.pt와 같은 세그멘테이션 전용 모델을 사용해야 합니다.