सामग्री पर जाएं

वीओसी डेटासेट

पास्कल वीओसी (विजुअल ऑब्जेक्ट क्लासेस) डेटासेट एक प्रसिद्ध ऑब्जेक्ट डिटेक्शन, सेगमेंटेशन और वर्गीकरण डेटासेट है। यह विभिन्न प्रकार की वस्तु श्रेणियों पर अनुसंधान को प्रोत्साहित करने के लिए डिज़ाइन किया गया है और आमतौर पर कंप्यूटर दृष्टि मॉडल को बेंचमार्किंग के लिए उपयोग किया जाता है। यह ऑब्जेक्ट डिटेक्शन, सेगमेंटेशन और वर्गीकरण कार्यों पर काम करने वाले शोधकर्ताओं और डेवलपर्स के लिए एक आवश्यक डेटासेट है।

प्रमुख विशेषताऐं

  • वीओसी डेटासेट में दो मुख्य चुनौतियां शामिल हैं: VOC2007 और VOC2012।
  • डेटासेट में 20 ऑब्जेक्ट श्रेणियां शामिल हैं, जिनमें कार, साइकिल और जानवरों जैसी सामान्य वस्तुओं के साथ-साथ नाव, सोफा और डाइनिंग टेबल जैसी अधिक विशिष्ट श्रेणियां शामिल हैं।
  • एनोटेशन में ऑब्जेक्ट डिटेक्शन और वर्गीकरण कार्यों के लिए ऑब्जेक्ट बाउंडिंग बॉक्स और क्लास लेबल, और सेगमेंटेशन कार्यों के लिए सेगमेंटेशन मास्क शामिल हैं।
  • वीओसी ऑब्जेक्ट डिटेक्शन और वर्गीकरण के लिए औसत औसत प्रेसिजन (एमएपी) जैसे मानकीकृत मूल्यांकन मैट्रिक्स प्रदान करता है, जिससे यह मॉडल प्रदर्शन की तुलना करने के लिए उपयुक्त हो जाता है।

डेटासेट संरचना

वीओसी डेटासेट को तीन सबसेट में विभाजित किया गया है:

  1. ट्रेन: इस सबसेट में ऑब्जेक्ट डिटेक्शन, सेगमेंटेशन और वर्गीकरण मॉडल के प्रशिक्षण के लिए छवियां हैं।
  2. सत्यापन: इस सबसेट में मॉडल प्रशिक्षण के दौरान सत्यापन उद्देश्यों के लिए उपयोग की जाने वाली छवियां हैं।
  3. परीक्षण: इस सबसेट में प्रशिक्षित मॉडलों के परीक्षण और बेंचमार्किंग के लिए उपयोग की जाने वाली छवियां शामिल हैं। इस सबसेट के लिए ग्राउंड ट्रुथ एनोटेशन सार्वजनिक रूप से उपलब्ध नहीं हैं, और परिणाम प्रदर्शन मूल्यांकन के लिए पास्कल वीओसी मूल्यांकन सर्वर पर प्रस्तुत किए जाते हैं।

अनुप्रयोगों

वीओसी डेटासेट का व्यापक रूप से ऑब्जेक्ट डिटेक्शन में गहन शिक्षण मॉडल के प्रशिक्षण और मूल्यांकन के लिए उपयोग किया जाता है (जैसे कि YOLO, तेज़ आर-सीएनएन, और एसएसडी), उदाहरण विभाजन (जैसे मास्क आर-सीएनएन), और छवि वर्गीकरण। डेटासेट की ऑब्जेक्ट श्रेणियों का विविध सेट, बड़ी संख्या में एनोटेट की गई छवियां और मानकीकृत मूल्यांकन मेट्रिक्स इसे कंप्यूटर दृष्टि शोधकर्ताओं और चिकित्सकों के लिए एक आवश्यक संसाधन बनाते हैं।

डेटासेट YAML

डेटासेट कॉन्फ़िगरेशन को परिभाषित करने के लिए एक YAML (अभी तक एक और मार्कअप भाषा) फ़ाइल का उपयोग किया जाता है। इसमें डेटासेट के पथ, कक्षाओं और अन्य प्रासंगिक जानकारी के बारे में जानकारी होती है। वीओसी डेटासेट के मामले में, VOC.yaml फ़ाइल पर बनाए रखा जाता है https://github.com/ultralytics/ultralytics/blob/main/ultralytics/cfg/datasets/VOC.yaml.

ultralytics/cfg/datasets/VOC.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 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 tqdm import tqdm
  from ultralytics.utils.downloads import download
  from pathlib import Path

  def convert_label(path, lb_path, year, image_id):
      def convert_box(size, box):
          dw, dh = 1. / size[0], 1. / 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/yolov5/releases/download/v1.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 paths (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

उपयोग

एक प्रशिक्षित करने के लिए YOLOv8n 640 के छवि आकार के साथ 100 युगों के लिए वीओसी डेटासेट पर मॉडल, आप निम्न कोड स्निपेट का उपयोग कर सकते हैं। उपलब्ध तर्कों की व्यापक सूची के लिए, मॉडल प्रशिक्षण पृष्ठ देखें।

ट्रेन का उदाहरण

from ultralytics import YOLO

# Load a model
model = YOLO('yolov8n.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=yolov8n.pt epochs=100 imgsz=640

नमूना छवियाँ और एनोटेशन

वीओसी डेटासेट में विभिन्न ऑब्जेक्ट श्रेणियों और जटिल दृश्यों के साथ छवियों का एक विविध सेट होता है। यहां डेटासेट से छवियों के कुछ उदाहरण दिए गए हैं, साथ ही उनके संबंधित एनोटेशन के साथ:

डेटासेट नमूना छवि

  • मोज़ेड छवि: यह छवि मोज़ेक डेटासेट छवियों से बना एक प्रशिक्षण बैच प्रदर्शित करती है। मोज़ेसिंग प्रशिक्षण के दौरान उपयोग की जाने वाली एक तकनीक है जो प्रत्येक प्रशिक्षण बैच के भीतर वस्तुओं और दृश्यों की विविधता को बढ़ाने के लिए कई छवियों को एक ही छवि में जोड़ती है। यह विभिन्न ऑब्जेक्ट आकारों, पहलू अनुपात और संदर्भों को सामान्यीकृत करने की मॉडल की क्षमता को बेहतर बनाने में मदद करता है।

उदाहरण वीओसी डेटासेट में छवियों की विविधता और जटिलता और प्रशिक्षण प्रक्रिया के दौरान मोज़ेकिंग का उपयोग करने के लाभों को प्रदर्शित करता है।

प्रशंसा पत्र और पावती

यदि आप अपने शोध या विकास कार्य में वीओसी डेटासेट का उपयोग करते हैं, तो कृपया निम्नलिखित पेपर का हवाला दें:

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

हम कंप्यूटर दृष्टि समुदाय के लिए इस मूल्यवान संसाधन को बनाने और बनाए रखने के लिए पास्कल वीओसी कंसोर्टियम को स्वीकार करना चाहते हैं। वीओसी डेटासेट और इसके रचनाकारों के बारे में अधिक जानकारी के लिए, पास्कल वीओसी डेटासेट वेबसाइट पर जाएं।



2023-11-12 बनाया गया, अपडेट किया गया 2024-01-14
लेखक: ग्लेन-जोचर (4), लाफिंग-क्यू (1)

टिप्पणियाँ