YOLO Vision 2026:

PASCAL 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 바운딩 박스를 YOLO 형식으로 변환합니다.

주요 특징#

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

데이터셋 구조#

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 Platform의 VOC를 탐색하여 주석 오버레이가 있는 이미지를 찾아보고, Charts 탭에서 클래스 분포 및 바운딩 박스 히트맵을 확인하고, 클라우드에서 자신만의 모델을 훈련하기 위해 복제할 수 있습니다.

응용 분야#

PASCAL VOC는 더 큰 COCO 데이터셋 이전 시대에 객체 감지 연구를 위한 주요 벤치마크였습니다. Faster R-CNNSSD와 같은 감지기가 여기에서 원본 결과를 보고했으며, Ultralytics YOLO 모델은 기본적으로 이 데이터셋으로 훈련합니다. 오늘날에도 이 데이터셋은 다음 용도로 인기가 높습니다:

  • 오랜 기간 축적된 베이스라인을 바탕으로 새로운 탐지 아키텍처 벤치마킹
  • 신속한 실험 및 수업용 — 16,551장의 훈련 이미지로 COCO보다 훨씬 빠르게 훈련 가능
  • 컴팩트하고 잘 알려진 일상 클래스 세트에 대한 전이 학습 연구

데이터셋 YAML#

VOC.yaml 파일은 데이터셋 구성(데이터셋 경로, 20개의 클래스 이름, 자동 다운로드 및 변환 스크립트)을 정의합니다. 이 파일은 https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml의 Ultralytics 저장소에서 유지 관리됩니다.

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 format

사용법#

2.8 GB 다운로드

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

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

샘플 이미지 및 주석#

아래 이미지는 VOC 데이터셋의 모자이크 처리된 훈련 배치를 보여줍니다. 모자이크 처리는 여러 이미지를 단일 훈련 샘플로 결합하여 각 배치에서 모델이 보는 객체, 스케일 및 장면 컨텍스트의 다양성을 증가시킵니다. 자세한 내용은 YOLO 데이터 augmentation 가이드를 참조하세요.

Pascal VOC dataset mosaic training batch

인용 및 감사의 글#

연구 또는 개발 작업에 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 dataset website를 방문하세요.

FAQ#

  • PASCAL VOC는 person, car, dog, chair 등 20개의 일상적인 객체 클래스에서 객체 감지 모델을 훈련하고 벤치마킹하는 데 사용됩니다. 컴팩트하고 완전히 레이블이 지정되어 있으며 수년간의 게시된 기준선이 뒷받침되기 때문에 새로운 아키텍처 검증, 과정 실험 실행 및 빠른 전이 학습 연구를 위한 일반적인 선택입니다.

  • Ultralytics VOC 구성에는 21,503개의 이미지가 포함되어 있습니다. 훈련용 16,551개(VOC2007 trainval + VOC2012 trainval) 및 검증용 4,952개(VOC2007 테스트 세트). 모든 분할은 동일한 20개의 클래스를 공유합니다. 전체 세부 정보는 Dataset Structure를 참조하세요.

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

  • 이미지 크기 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 페이지와 model training tips를 참조하세요.

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

  • VOC는 더 작고 단순합니다. COCO의 80개 클래스 및 330K 이미지에 비해 20개 클래스 및 21,503개 이미지입니다. VOC 결과는 전통적으로 0.5 IoU에서 mAP로 보고되는 반면, COCO는 0.5에서 0.95 사이의 IoU 임계값에서 mAP를 평균합니다. VOC는 훨씬 빠르게 훈련되며 빠른 실험에 적합하고, COCO 데이터셋은 프로덕션 규모 벤치마킹의 표준입니다.

  • 아니요 — VOC.yaml은 감지 전용 구성입니다. 변환기는 VOC XML 주석에서 바운딩 박스를 추출하며, 원래 벤치마크에 포함된 분할 마스크는 변환되지 않습니다. 인스턴스 세그멘테이션 모델을 훈련하려면 yolo26n-seg.pt 모델과 함께 COCO-Seg와 같은 폴리곤 레이블이 있는 데이터셋을 사용하세요.

댓글