엔터프라이즈급 보안: ISO 27001 및 SOC 2 Type I 규정을 준수합니다.
No license

Link to this sectionPASCAL VOC 데이터셋#

PASCAL VOC (Visual Object Classes) 데이터셋은 20개의 일상적인 객체 클래스를 포함하는 고전적인 객체 탐지 벤치마크입니다. Ultralytics의 VOC.yaml 구성은 VOC2007과 VOC2012의 trainval 분할을 결합하여 16,551장의 이미지로 구성된 훈련 세트를 생성하며, 공개적으로 주석이 달린 4,952장의 VOC2007 테스트 이미지로 검증을 수행합니다. 최초 사용 시 모든 데이터(2.8 GB)가 자동으로 다운로드됩니다.



Watch: How to Train Ultralytics YOLO on the Pascal VOC Dataset | Object Detection | Computer Vision 🚀

PASCAL VOC 챌린지는 2005년부터 2012년까지 진행되었으며 객체 탐지 모델 평가 방식의 기틀을 마련했습니다. 이 벤치마크는 이미지 분류, 탐지 및 분할 작업을 아우르며, 표준 탐지 지표로 평균 정밀도 (mAP)를 대중화했습니다. Ultralytics의 VOC.yaml 구성은 탐지 주석을 사용하며, 다운로드 과정에서 원래의 XML BBox를 YOLO 형식으로 변환합니다.

Link to this section주요 특징#

  • 20개의 일상적인 객체 클래스: 사람(person), 동물 6종(새, 고양이, 소, 개, 말, 양), 차량 7종(비행기, 자전거, 보트, 버스, 자동차, 오토바이, 기차), 실내 객체 6종(병, 의자, 식탁, 화분, 소파, TV 모니터).
  • 두 챌린지 세대의 결합: 훈련 데이터는 VOC2007 trainval(5,011장)과 VOC2012 trainval(11,540장)을 병합합니다.
  • 표준화된 평가: 수십 년간 발표된 VOC 베이스라인은 탐지 모델을 비교하기 위한 편리한 기준점을 제공합니다.
  • YOLO 지원: 다운로드 스크립트가 아카이브를 가져와 주석을 자동으로 변환하므로 수동 작업이 필요 없습니다.

Link to this section데이터셋 구조#

Ultralytics VOC.yaml 구성은 다음 분할을 정의합니다:

Split이미지소스
학습(Train)16,551VOC2007 trainval(5,011) + VOC2012 trainval(11,540)
검증4,952VOC2007 테스트, 훈련 중 평가용으로 사용
테스트4,952VOC2007 테스트 이미지와 동일하며, 구성상 별도의 분리된 평가 분할은 없습니다.

VOC2007 테스트 주석은 해당 연도의 챌린지 이후 공개되어 레이블이 지정된 검증 세트로 활용할 수 있습니다. VOC2012 테스트 주석은 비공개 상태로, 결과는 공식 PASCAL 평가 서버를 통해서만 확인할 수 있으므로 본 구성에는 포함되지 않습니다.

어려운 객체 제외

자동 변환기는 원래 VOC XML 주석에서 difficult로 표시된 객체를 건너뛰므로, 클래스별 인스턴스 수는 공식 VOC 통계와 약간 다를 수 있습니다.

Ultralytics 플랫폼의 VOC에서 이미지와 주석 오버레이를 탐색하고, Charts 탭에서 클래스 분포와 BBox 히트맵을 확인하며, 클라우드에서 직접 모델을 훈련하기 위해 복제할 수 있습니다.

Link to this section응용 분야#

PASCAL VOC는 더 큰 COCO 데이터셋이 등장하기 전까지 객체 탐지 연구의 주요 벤치마크였습니다. Faster R-CNNSSD와 같은 탐지기들이 이 데이터셋으로 초기 결과를 보고했으며, Ultralytics YOLO 모델들도 즉시 훈련 가능합니다. 오늘날에도 다음과 같은 이유로 널리 사용됩니다:

  • 오랜 기간 축적된 베이스라인을 바탕으로 새로운 탐지 아키텍처 벤치마킹
  • 신속한 실험 및 수업용 — 16,551장의 훈련 이미지로 COCO보다 훨씬 빠르게 훈련 가능
  • 일상적인 객체들로 구성된 소규모의 잘 알려진 데이터셋에서의 전이 학습 연구

Link to this section데이터셋 YAML#

VOC.yaml 파일은 데이터셋 경로, 20개의 클래스 이름, 자동 다운로드 및 변환 스크립트 등 데이터셋 구성을 정의합니다. 이 파일은 Ultralytics 리포지토리(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: 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 format

Link to this section사용법#

2.8 GB 다운로드

VOC는 최초 훈련 시 자동으로 다운로드되며(총 3개의 아카이브, 2.8 GB), 압축 해제 및 변환을 위해 약 6 GB의 여유 디스크 공간이 필요합니다.

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 - dataset will auto-download on first run
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)

Link to this section샘플 이미지 및 주석#

아래 이미지는 VOC 데이터셋의 모자이크 처리된 훈련 배치를 보여줍니다. 모자이킹은 여러 이미지를 하나의 훈련 샘플로 결합하여 각 배치에서 모델이 보는 객체의 종류, 규모 및 장면 맥락을 다양화합니다. 자세한 내용은 YOLO 데이터 증강 가이드를 참조하십시오.

Pascal VOC 데이터셋 모자이크 학습 배치

Link to this section인용 및 감사의 글#

연구 또는 개발 작업에 VOC 데이터셋을 사용하는 경우 다음 논문을 인용해 주십시오:

인용
@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}}

컴퓨터 비전 커뮤니티를 위해 이 귀중한 리소스를 만들고 유지 관리해 준 PASCAL VOC 컨소시엄에 감사드립니다. VOC 데이터셋과 제작자에 대한 자세한 내용은 PASCAL VOC 데이터셋 웹사이트를 방문하십시오.

Link to this sectionFAQ#

Link to this sectionPASCAL VOC 데이터셋은 어떤 용도로 사용되나요?#

PASCAL VOC는 사람, 자동차, 개, 의자와 같은 20개의 일상적인 객체 클래스에 대해 객체 탐지 모델을 훈련하고 벤치마킹하는 데 사용됩니다. 규모가 작고 주석이 완벽하며 수년간 발표된 베이스라인이 존재하므로 새로운 아키텍처 검증, 수업용 실험 및 빠른 전이 학습 연구에 흔히 선택됩니다.

Link to this sectionPASCAL VOC 데이터셋의 이미지 수는 얼마나 되나요?#

Ultralytics VOC 구성은 총 21,503장의 이미지를 포함합니다: 훈련용 16,551장(VOC2007 trainval + VOC2012 trainval) 및 검증용 4,952장(VOC2007 테스트 세트). 모든 분할은 동일한 20개의 클래스를 공유합니다. 전체 구성 내역은 데이터셋 구조를 참조하십시오.

Link to this sectionPASCAL VOC 데이터셋은 어떻게 다운로드하나요?#

data="VOC.yaml"로 처음 훈련을 시작할 때 VOC가 자동으로 다운로드됩니다. 별도의 수동 단계는 필요 없습니다. 스크립트가 Ultralytics GitHub 릴리스 자산에서 3개의 아카이브(2.8 GB)를 가져와 XML 주석을 YOLO 형식으로 변환합니다.

Link to this sectionVOC 데이터셋으로 어떻게 YOLO26 모델을 훈련하나요?#

이미지 크기 640으로 100 에포크 동안 VOC에서 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)

상세 구성은 학습(Training) 페이지와 모델 학습 팁을 참조하십시오.

Link to this sectionVOC2007과 VOC2012의 차이점은 무엇인가요?#

두 챌린지 모두 동일한 20개 클래스를 공유하지만 제공하는 이미지는 다릅니다. VOC2007은 5,011장의 trainval 이미지와 주석이 공개된 4,952장의 테스트 세트를 제공하며, VOC2012는 11,540장의 trainval 이미지를 제공합니다(테스트 주석은 비공개로 공식 평가 서버에서만 채점 가능). Ultralytics VOC.yaml은 훈련을 위해 두 trainval 세트를 모두 병합하고 VOC2007 테스트 세트로 검증합니다.

Link to this sectionPASCAL VOC와 COCO 데이터셋은 어떻게 비교되나요?#

VOC는 20개 클래스, 21,503장의 이미지로 COCO의 80개 클래스, 330K 이미지 대비 더 작고 단순합니다. VOC 결과는 전통적으로 0.5 IoU에서 mAP로 보고되는 반면, COCO는 0.5에서 0.95까지의 IoU 임계값에 걸쳐 평균 mAP를 계산합니다. VOC는 훈련 속도가 매우 빨라 빠른 실험에 적합하며, COCO 데이터셋은 프로덕션 규모의 벤치마킹 표준입니다.

Link to this sectionVOC.yaml로 분할 모델을 훈련할 수 있나요?#

아니요. VOC.yaml은 탐지 전용 구성입니다. 변환기는 VOC XML 주석에서 BBox만 추출하며, 원래 벤치마크에 포함된 분할 마스크는 변환되지 않습니다. 인스턴스 분할 모델을 훈련하려면 COCO-Seg와 같이 폴리곤 레이블이 있는 데이터셋을 yolo26n-seg.pt 모델과 함께 사용하십시오.

댓글