YOLO Vision 2026:

PASCAL VOCデータセット#

PASCAL VOC (Visual Object Classes) データセットは、日常の20個のオブジェクトクラスを持つクラシックなobject detectionベンチマークです。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年にかけて開催され、object detectionモデルの評価方法を形作りました。このベンチマークは画像分類、検出、セグメンテーションのタスクにわたり、標準的な検出指標としてmean Average Precision(mAP)を普及させました。Ultralyticsの VOC.yaml 設定は検出注釈を使用し、ダウンロード時に元のXMLバウンディングボックスをYOLO形式に変換します。

主な特徴#

  • 20種類の日常的なオブジェクトクラス: person(人)、6種類の動物(bird、cat、cow、dog、horse、sheep)、7種類の車両(aeroplane、bicycle、boat、bus、car、motorbike、train)、および6種類の屋内オブジェクト(bottle、chair、diningtable、pottedplant、sofa、tvmonitor)。
  • 2つのチャレンジ世代の統合: トレーニングでは、VOC2007 trainval(5,011枚)とVOC2012 trainval(11,540枚)がマージされます。
  • 標準化された評価: 数十年にわたって公開されてきたVOCのベースラインは、検出モデルを比較する際の便利な参照ポイントとなります。
  • YOLO対応: ダウンロードスクリプトがアーカイブを取得し、アノテーションを自動的に変換するため、手動での準備は不要です。

データセットの構造#

Ultralyticsの VOC.yaml 設定では、次の分割が定義されています。

分割画像ソース
トレーニング16,551VOC2007 trainval (5,011) + VOC2012 trainval (11,540)
バリデーション4,952VOC2007テスト。トレーニング中のevaluationに使用されます。
テスト4,952同じVOC2007テスト用画像(設定では個別のホールドアウト分割は定義されていません)

VOC2007のテスト用アノテーションは、その年のチャレンジ終了後に公開されたため、この分割をラベル付きの検証セットとして使用できます。VOC2012のテスト用アノテーションは非公開のままであり、その結果は公式のPASCAL評価サーバーでのみスコア付けが可能であるため、本設定には含まれていません。

「難しい」オブジェクトは除外

自動コンバーターは、元のVOCのXML注釈で difficult とフラグが立てられたオブジェクトをスキップするため、クラスごとのインスタンス数は公式のVOC統計とわずかに異なります。

VOC on Ultralytics Platformを探索して、注釈オーバーレイ付きの画像を閲覧し、Chartsタブでクラス分布とバウンディングボックスのヒートマップを確認し、クラウドで独自のモデルをトレーニングするためにクローンしてください。

アプリケーション#

PASCAL VOCは、より大規模なCOCO datasetが登場する前の数年間におけるオブジェクト検出研究の主要なベンチマークでした。Faster R-CNNSSDなどの検出器がその初期の成果を報告し、Ultralytics YOLOモデルはそのままトレーニングに使用できます。今日でも、次のような用途で人気があります。

  • 長年にわたって公開されてきたベースラインに対する新しい検出アーキテクチャのベンチマーク
  • 迅速な実験やコースワーク — 16,551枚のトレーニング画像により、COCOよりもはるかに高速にトレーニング可能
  • コンパクトでよく理解された日常的なクラスのセットに対するTransfer learningの研究

データセット 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 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は初回トレーニング時に自動的にダウンロードされます(合計2.8 GBの3つのアーカイブ)。抽出および変換時には、約6 GBの空きディスク容量が必要です。

画像サイズ640でVOCデータセット上でYOLO26nモデルを100epochsトレーニングするには、次のコードスニペットを使用できます。利用可能な引数の包括的なリストについては、モデルの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)

サンプル画像とアノテーション#

下の画像は、VOCデータセットからのモザイク化されたトレーニングバッチを示しています。モザイク化は複数の画像を1つのトレーニングサンプルに結合し、モデルが各バッチで認識するオブジェクト、スケール、およびシーンコンテキストの多様性を高めます。詳細については、YOLO data augmentation guideをご参照ください。

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}}

computer visionコミュニティのためにこの貴重なリソースを作成および維持してくださっているPASCAL VOCコンソーシアムに感謝いたします。VOCデータセットとその作成者の詳細については、PASCAL VOC dataset websiteをご覧ください。

よくある質問 (FAQ)#

  • PASCAL VOCは、人、車、犬、椅子などの日常的な20個のオブジェクトクラスでオブジェクト検出モデルをトレーニングし、ベンチマークするために使用されます。コンパクトで、完全にラベル付けされており、長年の公開されたベースラインに裏付けられているため、新しいアーキテクチャの検証、コースワーク実験の実行、およびクイックなtransfer learning研究の一般的な選択肢となっています。

  • UltralyticsのVOC設定には21,503枚の画像が含まれています:トレーニング用に16,551枚(VOC2007 trainval + VOC2012 trainval)、検証用に4,952枚(VOC2007テストセット)です。すべての分割で同じ20個のクラスが共有されます。詳細な内訳については、Dataset Structureをご参照ください。

  • data="VOC.yaml" で最初にトレーニングを行うときに、VOCが自動的にダウンロードされます。手動の手順は必要ありません。このスクリプトは、UltralyticsのGitHubリリースの成果物から3つのアーカイブ(2.8 GB)を取得し、XML注釈をYOLO形式に変換します。

  • VOCでYOLO26nモデルを画像サイズ640、100エポックでトレーニングする例:

    学習例
    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)

    For detailed configurations, see the Training page and model training tips.

  • 両方のチャレンジで同じ20個のクラスが共有されますが、異なる画像が提供されます。VOC2007は5,011枚のtrainval画像と、注釈が公開されている4,952枚のテストセットを提供します。VOC2012は11,540枚のtrainval画像を提供しますが、そのテスト注釈は非公開であり、公式の評価サーバーでのみスコア付けが行われます。Ultralyticsの VOC.yaml は、両方のtrainvalセットをトレーニング用にマージし、VOC2007テストで検証を行います。

  • VOCはより小さくシンプルです。COCOの80クラスと330K枚の画像に対して、VOCは20クラスと21,503枚の画像です。VOCの結果は従来、0.5 IoUでのmAPとして報告されますが、COCOは0.5から0.95までのIoU閾値にわたるmAPを平均化します。VOCははるかに高速にトレーニングでき、クイックな実験に適しています。COCO datasetは、プロダクションスケールのベンチマークの標準です。

  • いいえ、 VOC.yaml は検出専用の設定です。そのコンバーターはVOCのXML注釈からバウンディングボックスを抽出しますが、元のベンチマークに含まれるセグメンテーションマスクは変換されません。instance segmentationモデルをトレーニングするには、yolo26n-seg.pt モデルとともにCOCO-Segなどのポリゴンラベル付きのデータセットを使用してください。

コメント