콘텐츠로 건너뛰기

VOC 데이터 세트

PASCAL VOC (시각적 객체 클래스) 데이터 세트는 잘 알려진 객체 감지, 분할, 분류 데이터 세트입니다. 다양한 객체 범주에 대한 연구를 장려하기 위해 설계되었으며 일반적으로 컴퓨터 비전 모델을 벤치마킹하는 데 사용됩니다. 객체 감지, 세분화, 분류 작업을 하는 연구자와 개발자에게 필수적인 데이터 세트입니다.

주요 기능

  • VOC 데이터 세트에는 두 가지 주요 과제가 있습니다: VOC2007 및 VOC2012.
  • 데이터 세트는 자동차, 자전거, 동물과 같은 일반적인 객체와 보트, 소파, 식탁과 같은 보다 구체적인 카테고리를 포함한 20개의 객체 카테고리로 구성되어 있습니다.
  • 주석에는 객체 감지 및 분류 작업을 위한 객체 경계 상자 및 클래스 레이블, 세분화 작업을 위한 세분화 마스크가 포함됩니다.
  • VOC는 객체 감지 및 분류를 위한 평균 평균 정밀도 (mAP)와 같은 표준화된 평가 지표를 제공하므로 모델 성능을 비교하는 데 적합합니다.

데이터 세트 구조

VOC 데이터 세트는 세 개의 하위 집합으로 나뉩니다:

  1. 훈련: 이 하위 집합에는 객체 감지, 세분화 및 분류 모델을 훈련하기 위한 이미지가 포함되어 있습니다.
  2. 유효성 검사: 이 하위 집합에는 모델 학습 중 유효성 검사 목적으로 사용되는 이미지가 있습니다.
  3. 테스트: 이 하위 집합은 학습된 모델을 테스트하고 벤치마킹하는 데 사용되는 이미지로 구성됩니다. 이 하위 집합에 대한 실측 자료 주석은 공개되지 않으며, 결과는 성능 평가를 위해 PASCAL VOC 평가 서버에 제출됩니다.

애플리케이션

VOC 데이터 세트는 객체 감지에서 딥 러닝 모델을 학습하고 평가하는 데 널리 사용됩니다(예 Ultralytics YOLO, Faster R-CNN, SSD 등), 인스턴스 세분화 ( Mask R-CNN 등) 및 이미지 분류에 사용됩니다. 데이터 세트의 다양한 객체 카테고리, 수많은 주석이 달린 이미지, 표준화된 평가 메트릭은 컴퓨터 비전 연구자와 실무자에게 필수적인 리소스입니다.

데이터 세트 YAML

데이터 세트 구성을 정의하는 데는 YAML(또 다른 마크업 언어) 파일이 사용됩니다. 여기에는 데이터 세트의 경로, 클래스 및 기타 관련 정보에 대한 정보가 포함되어 있습니다. VOC 데이터 세트의 경우, 데이터 세트의 VOC.yaml 파일은 다음 위치에서 유지됩니다. 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: # 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: ../datasets/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 tqdm import tqdm

  from ultralytics.utils.downloads import download


  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

      in_file = open(path / f"VOC{year}/Annotations/{image_id}.xml")
      out_file = open(lb_path, "w")
      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
  url = "https://github.com/ultralytics/assets/releases/download/v0.0.0/"
  urls = [
      f"{url}VOCtrainval_06-Nov-2007.zip",  # 446MB, 5012 images
      f"{url}VOCtest_06-Nov-2007.zip",  # 438MB, 4953 images
      f"{url}VOCtrainval_11-May-2012.zip",  # 1.95GB, 17126 images
  ]
  download(urls, dir=dir / "images", curl=True, 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

사용법

이미지 크기가 640인 100개의 에포크에 대한 VOC 데이터 세트에서 YOLO11n 모델을 훈련하려면 다음 코드 조각을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 학습 페이지를 참조하세요.

열차 예시

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

샘플 이미지 및 주석

VOC 데이터 세트에는 다양한 객체 범주와 복잡한 장면이 포함된 다양한 이미지 세트가 포함되어 있습니다. 다음은 데이터 세트의 이미지와 해당 주석의 몇 가지 예입니다:

데이터 세트 샘플 이미지

  • 모자이크 이미지: 이 이미지는 모자이크된 데이터 세트 이미지로 구성된 훈련 배치의 예시입니다. 모자이크는 여러 이미지를 하나의 이미지로 결합하여 각 훈련 배치 내에서 다양한 개체와 장면을 늘리기 위해 훈련 중에 사용되는 기술입니다. 이를 통해 다양한 객체 크기, 종횡비 및 컨텍스트에 일반화하는 모델의 능력을 향상시킬 수 있습니다.

이 예는 VOC 데이터 세트에 포함된 이미지의 다양성과 복잡성, 그리고 학습 과정에서 모자이크 사용의 이점을 보여줍니다.

인용 및 감사

연구 또는 개발 작업에 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 데이터 세트 웹사이트를 방문하세요.

자주 묻는 질문

PASCAL VOC 데이터 세트는 무엇이며 컴퓨터 비전 작업에 중요한 이유는 무엇인가요?

PASCAL VOC (시각적 객체 클래스) 데이터 세트는 컴퓨터 비전에서 객체 감지, 분할, 분류를 위한 유명한 벤치마크입니다. 여기에는 20개의 서로 다른 객체 범주에 대한 경계 상자, 클래스 레이블, 분할 마스크와 같은 포괄적인 주석이 포함되어 있습니다. 연구원들은 평균 평균 정밀도(mAP)와 같은 표준화된 평가 메트릭으로 인해 Faster R-CNN, YOLO, Mask R-CNN과 같은 모델의 성능을 평가하는 데 널리 사용됩니다.

VOC 데이터 세트를 사용하여 YOLO11 모델을 훈련하려면 어떻게 하나요?

VOC 데이터 세트로 YOLO11 모델을 훈련하려면 YAML 파일에 데이터 세트 구성이 필요합니다. 다음은 이미지 크기가 640인 100개의 에포크에 대한 YOLO11n 모델 학습을 시작하는 예제입니다:

열차 예시

from ultralytics import YOLO

# Load a model
model = YOLO("yolo11n.pt")  # load a pretrained model (recommended for training)

# Train the model
results = model.train(data="VOC.yaml", epochs=100, imgsz=640)
# Start training from a pretrained *.pt model
yolo detect train data=VOC.yaml model=yolo11n.pt epochs=100 imgsz=640

VOC 데이터 세트에 포함된 주요 과제는 무엇인가요?

VOC 데이터 세트에는 두 가지 주요 과제가 포함되어 있습니다: VOC2007과 VOC2012. 이 과제들은 20개의 다양한 객체 범주에 걸쳐 객체 감지, 세분화 및 분류를 테스트합니다. 각 이미지에는 경계 상자, 클래스 레이블, 세분화 마스크가 꼼꼼하게 주석 처리되어 있습니다. 이 챌린지는 mAP와 같은 표준화된 지표를 제공하여 다양한 컴퓨터 비전 모델을 쉽게 비교하고 벤치마킹할 수 있습니다.

PASCAL VOC 데이터 세트는 모델 벤치마킹 및 평가를 어떻게 향상시키나요?

PASCAL VOC 데이터 세트는 상세한 주석과 평균 평균 정밀도 (mAP)와 같은 표준화된 메트릭을 통해 모델 벤치마킹과 평가를 향상시킵니다. 이러한 메트릭은 물체 감지 및 분류 모델의 성능을 평가하는 데 매우 중요합니다. 데이터 세트의 다양하고 복잡한 이미지는 다양한 실제 시나리오에서 포괄적인 모델 평가를 보장합니다.

YOLO 모델에서 의미론적 세분화를 위해 VOC 데이터 세트를 사용하려면 어떻게 해야 하나요?

YOLO 모델을 사용한 의미론적 세분화 작업에 VOC 데이터 세트를 사용하려면 YAML 파일에서 데이터 세트를 올바르게 구성해야 합니다. YAML 파일은 세분화 모델 학습에 필요한 경로와 클래스를 정의합니다. VOC 데이터 세트 YAML 구성 파일은 다음 링크에서 확인할 수 있습니다. VOC.yaml 를 참조하세요. 세분화 작업의 경우 다음과 같은 세분화별 모델을 사용합니다. yolo11n-seg.pt 탐지 모델 대신

📅1 년 전 생성됨 ✏️ 11 일 전 업데이트됨

댓글