콘텐츠로 건너뛰기

VOC 데이터세트

PASCAL VOC(Visual Object Classes) 데이터 세트는 잘 알려진 객체 감지, 분할 및 분류 데이터 세트입니다. 광범위한 객체 범주에 대한 연구를 장려하기 위해 설계되었으며 컴퓨터 비전 모델의 벤치마킹에 일반적으로 사용됩니다. 객체 감지, 분할 및 분류 작업에 종사하는 연구원과 개발자에게 필수적인 데이터 세트입니다.

주요 기능

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

데이터 세트 구조

VOC 데이터 세트는 세 개의 하위 세트로 나뉩니다.

  1. Train: 이 하위 집합은 객체 감지, 분할 및 분류 모델 학습을 위한 이미지를 포함합니다.
  2. 검증: 이 하위 세트에는 모델 훈련 중 검증 목적으로 사용되는 이미지가 있습니다.
  3. 테스트: 이 하위 세트는 훈련된 모델을 테스트하고 벤치마킹하는 데 사용되는 이미지로 구성됩니다. 이 하위 세트에 대한 Ground Truth(정답) 어노테이션은 공개적으로 제공되지 않으며, 성능 평가는 PASCAL VOC 평가 서버에 결과를 제출합니다.

응용 분야

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

데이터세트 YAML

YAML(Yet Another Markup Language) 파일은 데이터 세트 구성을 정의하는 데 사용됩니다. 여기에는 데이터 세트의 경로, 클래스 및 기타 관련 정보가 포함되어 있습니다. 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: 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 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

      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", 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인 VOC 데이터 세트에서 YOLO11n 모델을 100 epochs 동안 훈련하려면 다음 코드 스니펫을 사용할 수 있습니다. 사용 가능한 인수의 전체 목록은 모델 훈련 페이지를 참조하세요.

훈련 예제

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 데이터 세트 웹사이트를 방문하십시오.

FAQ

PASCAL VOC 데이터 세트는 무엇이며, 컴퓨터 비전 작업에 왜 중요합니까?

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

VOC 데이터 세트를 사용하여 YOLO11 모델을 어떻게 학습시키나요?

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

훈련 예제

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년 전에 생성됨 ✏️ 5개월 전에 업데이트됨

댓글