Skip to content
Tutorials5 min read

Segmentation कार्यों के लिए polygon एनोटेशन

Potato में इमेज segmentation के लिए polygon बनाने के टूल कॉन्फ़िगर कीजिए, साथ में जटिल आकृतियों, एक-दूसरे पर चढ़े हिस्सों, कई श्रेणियों वाले polygon और COCO प्रारूप में निर्यात के सुझाव।

Potato Team

Polygon से आप ऑब्जेक्ट की सीमा एक-एक पिक्सल तक खींच सकते हैं, और semantic तथा instance segmentation को यही चाहिए। यह गाइड कॉन्फ़िग, बनाने की तरकीबें, और आकृतियाँ उलझ जाएँ तब क्या करें, तीनों पर चलती है।

Polygon बनाम bounding box

Polygon कबBounding box कब
सीमाएँ सटीक चाहिएमोटा-मोटी जगह बता देना काफ़ी है
ऑब्जेक्ट की आकृति बेतरतीब हैऑब्जेक्ट लगभग आयताकार हैं
Segmentation मॉडल की ट्रेनिंगDetection मॉडल की ट्रेनिंग
एक-दूसरे पर चढ़े ऑब्जेक्टअलग-अलग पड़े ऑब्जेक्ट
ज़्यादा सटीकता चाहिएरफ़्तार पहले है

बुनियादी polygon सेटअप

yaml
annotation_task_name: "Image Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: segments
    description: "Draw polygons around each object"
    labels:
      - name: road
        color: "#808080"
      - name: sidewalk
        color: "#F5F5DC"
      - name: building
        color: "#8B4513"
      - name: vegetation
        color: "#228B22"
      - name: sky
        color: "#87CEEB"
      - name: vehicle
        color: "#FF6B6B"
      - name: person
        color: "#4ECDC4"

Polygon बनाना

बुनियादी तरीक़ा

  1. टूलबार से एक लेबल चुनिए
  2. ऑब्जेक्ट के चारों ओर क्लिक करके बिंदु रखिए
  3. Polygon बंद करने के लिए डबल-क्लिक कीजिए या Enter दबाइए
  4. बिंदुओं को खिसकाकर ठीक कीजिए
  5. किसी किनारे पर क्लिक करके नया बिंदु जोड़िए

कीबोर्ड शॉर्टकट

Polygon संपादन के लिए Potato में शॉर्टकट पहले से मौजूद हैं:

  • Enter: मौजूदा polygon बंद करना
  • Escape: बनाना रद्द करना या चयन हटाना
  • Delete: चुना हुआ बिंदु या polygon हटाना
  • +/-: ज़ूम बढ़ाना और घटाना
  • Space + खींचना: इमेज को इधर-उधर सरकाना

जब मामला उलझ जाए

एक-दूसरे पर चढ़े ऑब्जेक्ट

जहाँ ऑब्जेक्ट एक-दूसरे पर चढ़े हों, वहाँ एनोटेटर कई polygon बना देते हैं जो आपस में ओवरलैप करते हैं। Potato हर एक को अलग से रखता है, इसलिए जहाँ ऑब्जेक्ट एक-दूसरे को ढक रहे हों वहाँ भी instance-स्तर का एनोटेशन मिल जाता है।

टेढ़ी सीमाएँ

जिन ऑब्जेक्ट की सीमाएँ बेढब और घुमावदार हों, उनके लिए:

  1. घुमावदार किनारों पर ज़्यादा बिंदु लगाइए ताकि आकृति सही बने
  2. बारीक हिस्से खींचने से पहले ज़ूम कीजिए
  3. इधर-उधर कूदने के बजाय परिधि पर क्रम से चलिए
  4. बाद में edit mode में जाकर बिंदुओं को उनकी जगह पर सरकाइए

Semantic segmentation का सेटअप

पूरी इमेज के segmentation के लिए:

yaml
annotation_task_name: "Semantic Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: semantic_segments
    description: "Segment the entire image"
    labels:
      - name: background
        color: "#000000"
      - name: road
        color: "#808080"
      - name: sidewalk
        color: "#F5F5DC"
      - name: building
        color: "#8B4513"
      - name: vegetation
        color: "#228B22"
      - name: sky
        color: "#87CEEB"
      - name: person
        color: "#4ECDC4"
      - name: vehicle
        color: "#FF6B6B"

Instance segmentation का सेटअप

अलग-अलग ऑब्जेक्ट instance के लिए:

yaml
annotation_task_name: "Instance Segmentation"
 
data_files:
  - "data/images.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: instances
    description: "Draw polygons around each object instance"
    labels:
      - name: person
        color: "#4ECDC4"
      - name: car
        color: "#FF6B6B"
      - name: dog
        color: "#FFEAA7"

हर polygon अपने आप में एक एनोटेशन के तौर पर रखा जाता है, इसलिए आप एक ही श्रेणी के भीतर अलग-अलग instance पर नज़र रख सकते हैं।

पूरा कॉन्फ़िगरेशन उदाहरण

yaml
annotation_task_name: "Cityscapes-style Segmentation"
 
data_files:
  - "data/urban_scenes.json"
 
annotation_schemes:
  - annotation_type: image_annotation
    tools: [polygon]
    name: segments
    description: "Segment all objects following Cityscapes protocol"
    labels:
      # Flat
      - name: road
        color: "#804080"
      - name: sidewalk
        color: "#F423E8"
      # Construction
      - name: building
        color: "#464646"
      - name: wall
        color: "#666666"
      - name: fence
        color: "#BE9999"
      # Nature
      - name: vegetation
        color: "#6B8E23"
      - name: terrain
        color: "#98FB98"
      # Sky
      - name: sky
        color: "#4682B4"
      # Human
      - name: person
        color: "#DC143C"
      - name: rider
        color: "#FF0000"
      # Vehicle
      - name: car
        color: "#00008B"
      - name: truck
        color: "#000046"
      - name: bus
        color: "#003C64"
      - name: motorcycle
        color: "#0000E6"
      - name: bicycle
        color: "#770B20"

आउटपुट प्रारूप

आउटपुट में हर polygon के साथ उसके हर बिंदु के निर्देशांक आते हैं:

json
{
  "id": "img001",
  "annotations": {
    "segments": [
      {
        "label": "road",
        "points": [[0, 600], [100, 580], [200, 590], [0, 600]]
      },
      {
        "label": "car",
        "points": [[450, 400], [520, 400], [520, 480], [450, 480]]
      }
    ]
  }
}

साफ़-सुथरे polygon के लिए सुझाव

  1. बारीक सीमाएँ खींचते समय 2x या उससे ज़्यादा ज़ूम कीजिए।
  2. कीबोर्ड शॉर्टकट सीख लीजिए। बार-बार टूलबार तक जाने से ये कहीं तेज़ पड़ते हैं।
  3. पहले मोटा-मोटी रूपरेखा बनाइए, फिर लौटकर उसे सुधारिए।
  4. उतने ही बिंदु लगाइए जितने में आकृति बन जाए। ज़्यादा बिंदु का मतलब बेहतर नहीं है।
  5. बीच-बीच में रुकिए। बारीक polygon का काम जल्दी थका देता है।

अगले क़दम

इमेज एनोटेशन टाइप जो कुछ कर सकता है (polygon, bbox, और बाक़ी ड्रॉइंग टूल), वह सब स्रोत दस्तावेज़ में है।


Polygon के पूरे दस्तावेज़ छवि एनोटेशन पर हैं।