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

चित्र एनोटेशन पर डिटेक्शन और सेगमेंटेशन मॉडल प्रशिक्षित करें

अध्ययन के बॉक्स पर डिटेक्टर फ़ाइन-ट्यून करें, अनुमानित बॉक्स एनोटेटरों को प्री-लेबल के रूप में दिखाएँ, सुधारों पर दोबारा प्रशिक्षित करें, और रन को स्लाइड और कोशिकाओं के लिए ढालें।

v2.14.0 में नया

यह ट्यूटोरियल एक ऑब्जेक्ट डिटेक्टर को अध्ययन के अपने बाउंडिंग बॉक्स पर प्रशिक्षित करता है और डिटेक्टर के बॉक्स अगले एनोटेटरों को सुधारने के लिए प्री-लेबल के रूप में दिखाता है। ट्यूटोरियल उन अध्ययन स्वामियों के लिए है जिनके पास image_annotation स्कीम है और जिन्होंने अपना पहला मॉडल प्रशिक्षित करें पढ़ा है या जो एडमिन Training पेज से सहज हैं। पहला आधा भाग torchvision-detect के साथ एक पूरा चक्र चलाता है (चित्रों पर बॉक्स, एक प्रशिक्षण रन, राइट-बैक, सुधार और दूसरा रन), और वहाँ का हर चरण लैपटॉप के CPU पर चला। दूसरा आधा भाग चक्र को YOLO, आउटलाइन, SAM रिफ़ाइनमेंट, पूरे चित्र की श्रेणियों, पूरी स्लाइड, माइक्रोस्कोपी, नक्शों, कोशिकाओं, दस्तावेज़ पृष्ठों और विज़न-लैंग्वेज मॉडल के लिए ढालता है, हर एक का एक अनुभाग।

विज़न ट्रेनर इंस्टॉल करना

torchvision-detect एक torchvision Faster R-CNN डिटेक्टर को फ़ाइन-ट्यून करता है। ट्रेनर को torch और torchvision चाहिए। Potato दोनों को डिफ़ॉल्ट इंस्टॉल से बाहर रखता है क्योंकि torch कई गीगाबाइट का डाउनलोड है। प्रशिक्षण करने वाली मशीन पर विज़न एक्स्ट्रा इंस्टॉल करें:

bash
pip install "potato-annotation[train-vision]"

वही एक्स्ट्रा torchvision-segment, hf-image-classification, sam-finetune, layoutlmv3 और vlm-sft को कवर करता है। जिस ट्रेनर के पैकेज गायब हैं वह Training पेज पर "not installed" के रूप में दिखता है, साथ में पैकेज इंस्टॉल करने की कमांड।

नीचे के छोटे प्रोजेक्ट के लिए GPU वैकल्पिक है। Apple silicon वाले Mac पर torchvision-detect और torchvision-segment Metal (mps) के बजाय CPU पर प्रशिक्षित होते हैं, और रन का लॉग इस बदलाव को चेतावनी "torchvision-detect does not run on Apple's Metal (mps) with this torch; using the CPU" के साथ दर्ज करता है। Potato टीम के मापों में डिफ़ॉल्ट चित्र आकार पर Metal का एक प्रशिक्षण स्टेप पूरे CPU epoch से अधिक समय लेता था। बड़े चित्रों या बड़े अध्ययन के लिए, जैसा रिमोट प्रशिक्षण बताता है, GPU सर्वर पर प्रशिक्षित करें।

चित्र प्रोजेक्ट सेट करना

प्रोजेक्ट को तीन चीज़ें चाहिए: चित्र, चित्रों को सूचीबद्ध करने वाली डेटा फ़ाइल, और एक config। चित्रों को प्रोजेक्ट फ़ोल्डर के अंदर media नाम के फ़ोल्डर में रखें, क्योंकि Potato डिफ़ॉल्ट रूप से <task_dir>/media/ को URL पथ /media/ पर परोसता है। config में media_directory से फ़ोल्डर का नाम देने पर कोई और फ़ोल्डर भी चलता है।

text
shapes/
  config.yaml
  data/images.jsonl
  media/img_001.png
  media/img_002.png
  ...

data/images.jsonl की हर पंक्ति एक आइटम है जिसमें एक id और चित्र का URL पथ है:

json
{"id": "img_001", "image_url": "/media/img_001.png"}

config bbox टूल और दो लेबल वाली एक image_annotation स्कीम परिभाषित करता है, और राइट-बैक के साथ मॉडल प्रशिक्षण चालू करता है। config python -m potato.validate_cli --strict पास करता है:

yaml
annotation_task_name: "Shape detection (model training)"
task_dir: "."
data_files:
  - "data/images.jsonl"
item_properties:
  id_key: "id"
  text_key: "image_url"
output_annotation_dir: "annotation_output"
 
require_password: false
admin_api_key: "demo-admin-key"
num_annotators_per_item: 1
 
annotation_schemes:
  - annotation_type: "image_annotation"
    name: "objects"
    description: "Draw a box around every circle and every square."
    source_field: "image_url"
    tools: ["bbox"]
    labels:
      - name: "circle"
        color: "#e6194b"
      - name: "square"
        color: "#4363d8"
 
model_training:
  enabled: true
  writeback:
    schemas: ["objects"]
    include_unlabeled: true
    min_confidence: 0.5

चार सेटिंग चक्र को आकार देती हैं:

  • source_field: "image_url" चित्र विजेट और ट्रेनर को बताता है कि चित्र किस आइटम फ़ील्ड में है।
  • num_annotators_per_item: 1 हर चित्र को एक एनोटेटर देता है, ताकि शुरुआती लेबल जितने संभव हों उतने अलग चित्रों को कवर करें।
  • writeback.include_unlabeled: true हर रन से उन चित्रों पर भी भविष्यवाणी करवाता है जिन पर अभी किसी ने लेबल नहीं लगाया। इस सेटिंग के बिना रन केवल होल्ड-आउट val और test चित्रों पर भविष्यवाणी करता है, और उन चित्रों पर पहले से मानव बॉक्स हैं।
  • writeback.min_confidence: 0.5 किसी चित्र की भविष्यवाणी तब रोक लेता है जब उस चित्र के बॉक्स का औसत स्कोर 0.5 से कम हो। यह सीमा पूरे चित्र पर लागू होती है, इसलिए एनोटेटर किसी चित्र के आधे बॉक्स कभी नहीं देखते।

प्रोजेक्ट फ़ोल्डर के अंदर से सर्वर शुरू करें:

bash
potato start config.yaml -p 8000

शुरुआती सेट पर लेबल लगाना

torchvision-detect train स्प्लिट में 20 से कम एनोटेट किए गए चित्र होने पर फ़िट करने से मना कर देता है, और डिफ़ॉल्ट स्प्लिट लेबल किए गए चित्रों का 70% train में रखता है। कम से कम 30 चित्रों पर लेबल लगाएँ, और ऑब्जेक्ट में विविधता हो तो और अधिक पर। http://localhost:8000 पर हाथ से बॉक्स बनाएँ। बिना बॉक्स वाला चित्र प्रशिक्षण से बाहर रखा जाता है, क्योंकि डिटेक्टर बिना ऑब्जेक्ट वाले चित्र और ऐसे चित्र में फ़र्क नहीं कर सकता जिसे किसी ने पूरा नहीं किया। जो चित्र आप सबमिट करें उसके हर ऑब्जेक्ट पर बॉक्स बनाएँ।

किसी व्यक्ति के लेबल लगाने से पहले चक्र आज़माने के लिए, यूज़र सिम्युलेटर gold फ़ाइल से बॉक्स बना सकता है। हर gold प्रविष्टि चित्र का id और स्कीम के आकार सामान्यीकृत निर्देशांकों में देती है:

json
[
  {"id": "img_001", "objects": [
    {"type": "bbox", "label": "circle",
     "coordinates": {"x": 0.158, "y": 0.849, "width": 0.106, "height": 0.146}}
  ]}
]
bash
python -m potato.simulator --server http://localhost:8000 --users 3 \
  --strategy gold_standard --competence good=1.0 --max-annotations 20 \
  --gold-file data/gold.json --sequential --fast-mode --no-export

सिम्युलेटर हर gold बॉक्स को कुछ पिक्सेल के जिटर के साथ दोबारा बनाता है, और good स्तर पर सिम्युलेटर कुछ ऑब्जेक्ट छोड़ भी देता है या गलत लेबल भी लगाता है, जैसा सावधान एनोटेटर कभी-कभी करता है। 80 कृत्रिम चित्रों पर हमारे परीक्षण में तीन सिम्युलेटेड एनोटेटरों ने लगभग एक सेकंड में 60 चित्रों पर लेबल लगाए।

torchvision-detect प्रशिक्षित करना

http://localhost:8000/admin खोलें, एडमिन कुंजी demo-admin-key डालें, और http://localhost:8000/admin/training खोलें। स्कीम के रूप में objects और ट्रेनर के रूप में torchvision-detect चुनें, Parameters खाली छोड़ें, और Train now पर क्लिक करें। वही रन स्क्रिप्ट से इस तरह शुरू होता है:

bash
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
  http://localhost:8000/admin/training/api/runs \
  -d '{"trainer": "torchvision-detect", "schemas": ["objects"]}'

रन torchvision के COCO वज़न से शुरू होता है और स्कीम के दो लेबल के लिए डिटेक्टर पर नया बॉक्स हेड लगाता है। torch पहले रन पर COCO वज़न torch के कैश में डाउनलोड करता है। डिफ़ॉल्ट छोटा fasterrcnn_mobilenet_v3_large_fpn आर्किटेक्चर, 15 epoch, प्रति स्टेप 4 चित्र, और बेहतर val mAP के बिना 4 epoch बाद early stopping हैं। हर आकार अपने बाउंडिंग बॉक्स के रूप में प्रशिक्षित होता है, इसलिए जिस अध्ययन के एनोटेटरों ने पॉलीगॉन बनाए, वह भी बॉक्स डिटेक्टर ही प्रशिक्षित करता है। प्रति चित्र कई एनोटेटर होने पर रन उस एक पूरे उत्तर पर प्रशिक्षित होता है जिसे model_training.aggregation उस चित्र के लिए चुनता है, क्योंकि दो लोगों के बॉक्स शायद ही कभी ठीक मेल खाते हैं।

हमारे इस्तेमाल किए Apple M4 Pro CPU पर 320 गुणा 240 पिक्सेल के 37 प्रशिक्षण चित्र लगभग 106 सेकंड में प्रशिक्षित हुए, और रन 5 epoch के बाद रुक गया। रन की फ़ाइलें annotation_output/training/runs/<run_id>/ में आती हैं, और फ़िट किया गया डिटेक्टर artifacts/model/detector.pt पर होता है। रन की सेटिंग और रन ने जो डिवाइस इस्तेमाल किया वह artifacts/model_card.json में है।

होल्ड-आउट स्कोर पढ़ना

हर रन डिटेक्टर को उन चित्रों पर स्कोर करता है जिन पर उसने कभी प्रशिक्षण नहीं लिया। image_annotation स्कीम के लिए मुख्य स्कोर map_50 है, यानी COCO mean average precision, जिसमें अनुमानित बॉक्स तब मेल माना जाता है जब वह किसी एनोटेट किए ऑब्जेक्ट के बाउंडिंग बॉक्स से 0.5 या अधिक के IoU पर ओवरलैप करे। रन का पेज map_50_95 भी दर्ज करता है, जो 0.5 से 0.95 तक की IoU सीमाओं का औसत है। एक ऑब्जेक्ट के लिए दो एनोटेटरों के बॉक्स शायद ही कभी 0.9 के IoU पर ओवरलैप करते हैं, इसलिए कड़ी सीमाएँ कुछ हद तक यह मापती हैं कि लोग कितनी एकरूपता से बॉक्स बनाते हैं। इसीलिए Potato 0.5 की सीमा को आगे रखता है। बाउंडिंग बॉक्स पर सहमति मापना दिखाता है कि इस एकरूपता को सीधे कैसे जाँचें।

डिटेक्टर सबसे अच्छे val स्कोर वाले epoch का चेकपॉइंट रखता है, इसलिए test स्प्लिट में चित्र होने पर मुख्य स्कोर test स्प्लिट से आता है। Runs तालिका मुख्य स्कोर को Held-out score स्तंभ में दिखाती है। रन का पेज n_train, n_boxes, हर स्प्लिट का आकार और कवरेज, और val तथा test पर एनोटेट और अनुमानित ऑब्जेक्ट की संख्या सूचीबद्ध करता है। रंगीन वृत्तों और वर्गों के 80 कृत्रिम चित्रों पर हमारे परीक्षण रन में डिटेक्टर ने test map_50 पर 0.99 स्कोर किया। कृत्रिम आकार असली ऑब्जेक्ट से कहीं आसानी से मिल जाते हैं, इसलिए स्कोर को अपने चित्रों पर परखें।

प्री-लेबल जाँचना

सफल रन के बाद Potato डिटेक्टर के बॉक्स हर योग्य चित्र के predictions फ़ील्ड में लिखता है। GET /admin/training/api/status नतीजा उत्तर के writeback फ़ील्ड में बताता है, जिसमें प्री-लेबल पाने वाले चित्रों के लिए n_written है और हर उस कारण की गिनती है जिससे कोई चित्र रोका गया, जैसे min_confidence से नीचे के लिए n_skipped_low_confidence और जिन चित्रों पर रन ने प्रशिक्षण लिया उनके लिए n_skipped_train_split। train स्प्लिट के चित्रों को कभी प्री-लेबल नहीं मिलते, क्योंकि मॉडल के अपने प्रशिक्षण डेटा पर उसका विश्वास नए चित्रों के बारे में कुछ नहीं बताता।

http://localhost:8000 पर नए यूज़रनेम से लॉग इन करें। राइट-बैक की जाँचें पास करने वाला हर बिना लेबल का चित्र डिटेक्टर के पहले से बने बॉक्स के साथ खुलता है। हर बॉक्स source: ai और डिटेक्टर के स्कोर को confidence के रूप में लेकर सहेजा जाता है। एनोटेटर बॉक्स को हिलाता या उसका आकार बदलता है, लेबल बदलता है, गलत डिटेक्शन हटाता है, और जो ऑब्जेक्ट डिटेक्टर से छूट गया उसे बनाता है। बॉक्स तब एनोटेटर का उत्तर बनते हैं जब एनोटेटर उन्हें संपादित करे या अगले चित्र पर चला जाए। जब तक एनोटेटर केवल चित्र देखता है, प्री-लेबल कभी सहेजा नहीं जाता। मॉडल समीक्षा कतार प्री-लेबल वाले चित्र सबसे कम विश्वास वाले पहले परोसती है, और समीक्षक का correct निर्णय चित्र को हर बाद के रन के train स्प्लिट में डाल देता है।

सुधारे गए बॉक्स पर दोबारा प्रशिक्षित करना

हर सुधारा गया चित्र अगले रन के लिए मानव लेबल बन जाता है। जब एनोटेटर प्री-लेबल वाले चित्रों के एक बैच पर काम कर चुकें, तब Training पेज से एक और torchvision-detect रन शुरू करें। नया रन हर चित्र पर पिछले रन की भविष्यवाणी को बदल देता है, और जिस चित्र पर नया रन प्रशिक्षित होता है उस पर लगा प्री-लेबल हटा दिया जाता है।

बिना क्लिक किए दोबारा प्रशिक्षित करने के लिए auto_retrain ब्लॉक जोड़ें। यह अंश ऊपर के model_training ब्लॉक को बढ़ाता है और हर 25 नए एनोटेशन के बाद, अधिकतम हर 10 मिनट में एक बार, रन शुरू करता है:

yaml
model_training:
  enabled: true
  auto_retrain:
    enabled: true
    trainer: torchvision-detect
    schemas: [objects]
    update_frequency: 25
    min_interval_s: 600
  writeback:
    schemas: [objects]
    include_unlabeled: true
    min_confidence: 0.5

प्री-लेबल एनोटेटरों को मॉडल के बॉक्स से बाँध देते हैं। एनोटेटरों के लिए राइट-बैक तभी चालू करें जब होल्ड-आउट स्कोर प्री-लेबल का समर्थन करे, और यह जाँचने के तरीके के लिए कि एनोटेटर बिना देखे बॉक्स स्वीकार करते हैं या नहीं, बिना जाँचे स्वीकार किए गए प्री-लेबल पकड़ना देखें।

Ultralytics YOLO से तेज़ डिटेक्शन

ultralytics-detect उन्हीं बॉक्स पर COCO-प्रीट्रेन्ड चेकपॉइंट (डिफ़ॉल्ट रूप से yolo11n.pt) से एक Ultralytics YOLO डिटेक्टर प्रशिक्षित करता है। YOLO torchvision-detect से तेज़ प्रशिक्षित होता और भविष्यवाणी करता है, और प्री-लेबल वही संपादन योग्य बॉक्स हैं। Ultralytics AGPL-3.0 के अंतर्गत लाइसेंस प्राप्त है, और Ultralytics से प्रशिक्षित और वितरित मॉडल AGPL की शर्तें साथ रखता है। बंद उपयोग के लिए Ultralytics अलग एंटरप्राइज़ लाइसेंस बेचता है। Potato के एक्स्ट्रा Ultralytics को बाहर रखते हैं, इसलिए पैकेज स्वयं इंस्टॉल करें:

bash
pip install ultralytics

Potato हर रन से पहले आपसे लाइसेंस की पुष्टि करवाता है। Training पेज एक पुष्टि दिखाता है, API रन को अनुरोध की बॉडी में "accept_licence": true चाहिए, और स्वचालित दोबारा प्रशिक्षण को auto_retrain.accept_licence: true चाहिए। पुष्टि के बिना API रन को HTTP 400, needs_licence_ack: true और संदेश "ultralytics-detect is licensed AGPL-3.0" के साथ अस्वीकार कर देता है। नीचे का अनुरोध लाइसेंस की पुष्टि करता है और रन शुरू करता है:

bash
curl -X POST -H "X-API-Key: demo-admin-key" -H "Content-Type: application/json" \
  http://localhost:8000/admin/training/api/runs \
  -d '{"trainer": "ultralytics-detect", "schemas": ["objects"], "accept_licence": true}'

रन के दौरान ट्रेनर Ultralytics के उपयोग विश्लेषण, Ultralytics HUB, प्रयोग-ट्रैकर इंटीग्रेशन और स्वचालित पैकेज इंस्टॉल बंद कर देता है। ये बदलाव रन की प्रोसेस के लिए केवल मेमोरी में लागू होते हैं, और आपकी Ultralytics सेटिंग फ़ाइल अपरिवर्तित रहती है। चेकपॉइंट ~/.cache/potato/ultralytics में डाउनलोड होते हैं। डिफ़ॉल्ट 640 पिक्सेल पर 50 epoch और 10 epoch बाद early stopping हैं।

बॉक्स की जगह आउटलाइन

torchvision-segment पॉलीगॉन, दीर्घवृत्त, फ़्रीफ़ॉर्म और ब्रश-मास्क आउटलाइन पर एक torchvision Mask R-CNN प्रशिक्षित करता है। सेगमेंटेशन प्रशिक्षण से बॉक्स बाहर रखे जाते हैं, क्योंकि बॉक्स यह नहीं बताता कि कौन-से पिक्सेल ऑब्जेक्ट के हैं। एनोटेटरों को polygon या brush जैसा आउटलाइन टूल दें। चित्र सेगमेंटेशन मास्क कैसे एनोटेट करें बताता है कि कौन-सा टूल कब ठीक बैठता है।

हर अनुमानित मास्क अधिकतम 64 शीर्षों वाले पॉलीगॉन में ट्रेस किया जाता है, इसलिए एनोटेटर प्री-लेबल को बिंदु-दर-बिंदु सुधारता है। जहाँ मास्क टुकड़ों में निकलता है, वहाँ सबसे बड़ा टुकड़ा रखा जाता है। डिफ़ॉल्ट score_threshold डिटेक्टर के 0.25 के बजाय 0.5 है। एक ऑब्जेक्ट के लिए Mask R-CNN के दूसरे अनुमान 0.25 और 0.6 के बीच स्कोर करते हैं, और हर अनुमान एनोटेटर के हटाने के लिए एक और आकार होगा। होल्ड-आउट स्कोर अनुमानित पॉलीगॉन की तुलना एनोटेट की गई आउटलाइन से करते हैं। Mac पर torchvision-segment CPU पर प्रशिक्षित होता है। torch 2.8 के साथ Potato टीम ने 256-पिक्सेल चित्र पर एक प्रशिक्षण स्टेप Metal पर 57 सेकंड और CPU पर 2.3 सेकंड मापा। असली अध्ययनों के लिए GPU सर्वर इस्तेमाल करें। ultralytics-segment इसका YOLO समकक्ष है (yolo11n-seg.pt), उन्हीं 64-शीर्ष वाले पॉलीगॉन और उसी AGPL-3.0 लाइसेंस पुष्टि के साथ।

sam-finetune से बॉक्स को आउटलाइन में बदलना

बॉक्स बनाना तेज़ है और आउटलाइन बनाना धीमा। sam-finetune Segment Anything (SAM) के मास्क डिकोडर को फ़ाइन-ट्यून करता है, ताकि वह बॉक्स को वह आउटलाइन बना दे जो आपके एनोटेटर बनाते। इमेज एनकोडर फ़्रीज़ रहता है और हर चित्र का एम्बेडिंग एक बार निकाला जाता है, इसलिए एक epoch की लागत कम है। प्रशिक्षण हर एनोटेट की गई आउटलाइन को उसके बाउंडिंग बॉक्स से प्रॉम्प्ट करता है। रन हर प्रॉम्प्ट बॉक्स को box_jitter (डिफ़ॉल्ट रूप से 5%) तक हिलाता और उसका आकार बदलता है, ताकि डिकोडर डिटेक्टर जितने ढीले बॉक्स से सीखे।

sam-finetune बॉक्स को परिष्कृत करता है और उसे शुरू करने के लिए बॉक्स चाहिए। एक स्कीम पर सामान्य क्रम में दो रन होते हैं:

  1. writeback.include_unlabeled: true के साथ torchvision-detect या ultralytics-detect चलाएँ, ताकि बिना लेबल वाले चित्रों पर बॉक्स प्री-लेबल हों।
  2. उसी स्कीम पर sam-finetune चलाएँ। हर बॉक्स प्री-लेबल पॉलीगॉन प्री-लेबल बन जाता है, और पॉलीगॉन बॉक्स की जगह ले लेते हैं।

SAM के सीखने के लिए स्कीम को आउटलाइन चाहिए, इसलिए एनोटेटरों को bbox के साथ एक आउटलाइन टूल दें। होल्ड-आउट चित्रों पर एनोटेटरों के अपने बॉक्स प्रॉम्प्ट हैं, इसलिए val_mask_iou बॉक्स सही होने पर आउटलाइन का औसत IoU बताता है। वे होल्ड-आउट भविष्यवाणियाँ स्कोर होती हैं पर कभी सहेजी या प्रकाशित नहीं की जातीं, क्योंकि वे दूसरे एनोटेटर के उत्तर से बनाई गई हैं। राइट-बैक रिपोर्ट होल्ड-आउट भविष्यवाणियों को n_skipped_heldout_only में गिनती है। डिफ़ॉल्ट चेकपॉइंट facebook/sam-vit-base (Apache-2.0) है। फ़ाइन-ट्यून किया डिकोडर केवल प्री-लेबल परोसता है। चित्र टूल का क्लिक-से-सेगमेंट ब्राउज़र में अलग ONNX वज़न चलाता है, और sam-finetune रन उन वज़न की जगह नहीं लेता।

पूरे चित्र को वर्गीकृत करना

पूरे चित्र के बारे में प्रश्न के लिए, जैसे radio स्कीम जो पूछती है कि फ़ोटो में कौन-सा जानवर है, डिटेक्टर के बजाय क्लासिफ़ायर इस्तेमाल करें। hf-image-classification Hugging Face के AutoModelForImageClassification से लोड होने वाले किसी भी मॉडल को फ़ाइन-ट्यून करता है, जैसे ViT, DeiT, BEiT, ConvNeXt, Swin या DINOv2। डिफ़ॉल्ट मॉडल google/vit-base-patch16-224-in21k है। ट्रेनर डिफ़ॉल्ट रूप से प्रशिक्षण चित्रों को यादृच्छिक रूप से पलटता है। जब पलटने से लेबल बदल जाए, जैसे चित्र में टेक्स्ट हो या बाएँ और दाएँ का मामला हो, तब Parameters में flip को false करें। lora: true हर वज़न के बजाय एक LoRA एडेप्टर और क्लासिफ़िकेशन हेड को प्रशिक्षित करता है।

कोई choice स्कीम तब चित्र कॉर्पस मानी जाती है जब स्कीम के लेबल किए गए कम से कम 80% आइटम में .jpg, .jpeg, .png, .bmp, .webp, .tif, .tiff या .gif पर समाप्त होने वाला चित्र पथ हो। ऐसे कॉर्पस पर बिना नाम दिए वेक्टराइज़र वाला sklearn-text CLIP चित्र एम्बेडिंग पर रैखिक क्लासिफ़ायर फ़िट करता है। CLIP बेसलाइन को GPU नहीं चाहिए, केवल pip install "potato-annotation[embeddings]" pillow चाहिए।

चित्र पथ और रिमोट चित्र

चित्र ट्रेनर वह फ़ील्ड पढ़ते हैं जिसका नाम स्कीम का source_field देता है। source_field के बिना ट्रेनर image_url, image, image_path, file_name, url, path, और ऑडियो तथा वीडियो के समकक्षों में से पहला खाली-नहीं आइटम फ़ील्ड लेता है। चित्र प्रोजेक्ट के अंदर की स्थानीय फ़ाइलें होने चाहिए:

  • सापेक्ष पथ task_dir के सापेक्ष हल होता है, या फ़ाइल task_dir में न मिलने पर media_directory के सापेक्ष।
  • /media/img_001.jpg जैसा URL पथ media_directory के सापेक्ष हल होता है। एनोटेशन पेज चित्र उसी जगह से लोड करता है।
  • जो फ़ाइल निरपेक्ष पथ, ../ या सिम्बॉलिक लिंक के कारण टास्क डायरेक्टरी और media_directory के बाहर पड़ती है, वह चेतावनी के साथ छोड़ दी जाती है।
  • रिमोट http(s) चित्र कभी डाउनलोड नहीं होते। रन हर उस आइटम को छोड़ देता है जिसका चित्र रिमोट है या गायब है, रन का लॉग बताता है कि कितने, और उन आइटम को कोई भविष्यवाणी नहीं मिलती।

चित्रों पर प्रशिक्षित करने के लिए रिमोट चित्रों को media_directory में डाउनलोड करें। मौजूदा चित्र डेटासेट को प्रोजेक्ट में लाने के बारे में विज़न फ़ॉर्मेट पेज और potato import देखें।

पूरी स्लाइड और अन्य बड़े चित्र

डिटेक्शन और सेगमेंटेशन ट्रेनर हर चित्र का आकार कुछ सौ पिक्सेल तक घटाते हैं, और 100,000-पिक्सेल की पैथोलॉजी स्लाइड या सैटेलाइट दृश्य के ऑब्जेक्ट उस आकार पर गायब हो जाते हैं। इसलिए image_annotation, microscopy या geo_annotation स्कीम के लिए, रन का प्रशिक्षण डेटा बनते समय Potato बड़े चित्रों को टाइल में काटता है। टाइलिंग स्लाइड फ़ॉर्मेट (.svs, .ndpi, .mrxs, .scn और अन्य) और उन चित्रों के लिए स्वचालित है जिनकी लंबी भुजा 4,096 पिक्सेल या अधिक है। स्लाइड को openslide चाहिए:

bash
pip install "potato-annotation[wsi]"

प्रशिक्षण उन टाइल का इस्तेमाल करता है जिनमें एनोटेट किया ऑब्जेक्ट है, साथ में खाली टाइल का एक नमूना, और हर ऑब्जेक्ट अपनी टाइल पर क्लिप किया जाता है। भविष्यवाणी ऊतक पर पड़ने वाली हर टाइल को कवर करती है, प्रति चित्र max_predict_tiles तक। हर चित्र का स्प्लिट चित्र काटे जाने से पहले तय होता है, इसलिए एक स्लाइड की टाइल कभी दो स्प्लिट में नहीं जातीं। टाइल की भविष्यवाणियाँ पूरे चित्र पर वापस मिला दी जाती हैं, और जिस ऑब्जेक्ट को दो ओवरलैप करती टाइल ने खोजा वह एक बार रखा जाता है। प्री-लेबल पूरे चित्र के निर्देशांक इस्तेमाल करते हैं, वही निर्देशांक जो डीप-ज़ूम व्यूअर सहेजता है। होल्ड-आउट स्कोर पूरे चित्रों पर गिने जाते हैं। रिमोट बैकएंड स्लाइड के बजाय टाइल डाउनलोड करता है।

सेटिंग model_training.tiling के अंतर्गत रहती हैं। यह अंश 40x स्लाइड को 1,024-पिक्सेल टाइल पर 20x पर प्रशिक्षित करता है:

yaml
model_training:
  enabled: true
  tiling:
    tile_size: 1024
    overlap: 128
    downsample: 2

overlap को कम से कम ऑब्जेक्ट जितना बड़ा रखें, क्योंकि उससे बड़ा ऑब्जेक्ट टुकड़ों में मिलता है, हर टाइल में एक। जो स्लाइड अपना रिज़ॉल्यूशन दर्ज करती है, उसके लिए mpp प्रति टाइल पिक्सेल माइक्रोन तय करता है और downsample को ओवरराइड करता है। कुछ स्लाइड पर दो सेटिंग में सावधानी चाहिए। खाली प्रशिक्षण टाइल मानती हैं कि एनोटेट किए चित्र का हर ऑब्जेक्ट बनाया गया था, इसलिए जब एनोटेटरों ने स्लाइड के केवल कुछ क्षेत्र बनाए हों तब background: 0 करें। ऊतक की पहचान स्लाइड थंबनेल पर Otsu की सीमा से होती है, इसलिए जिस स्लाइड में खाली काँच नहीं है वह अपना हल्का आधा हिस्सा खो देती है, और tissue_threshold: 0 हर टाइल पर भविष्यवाणी करता है। tiling तालिका हर कुंजी और डिफ़ॉल्ट सूचीबद्ध करती है।

माइक्रोस्कोपी और नक्शे

microscopy स्कीम के ROI torchvision-detect, ultralytics-detect, torchvision-segment, ultralytics-segment और cellpose को प्रशिक्षित करते हैं। ROI वाला हर z-स्लाइस और समय बिंदु स्कीम के डिफ़ॉल्ट चैनल और कॉन्ट्रास्ट के साथ रेंडर होता है और अलग प्रशिक्षण चित्र बन जाता है। रेंडरर वही कंपोज़िटर है जो व्यूअर इस्तेमाल करता है। जिस चित्र पर अभी कुछ नहीं बना, उस पर भविष्यवाणी बीच के z-स्लाइस और पहले समय बिंदु पर होती है, जहाँ व्यूअर खुलता है। भविष्यवाणियाँ हर ROI के z और t के साथ माइक्रोस्कोपी ROI के रूप में लौटती हैं। कोशिका वर्गीकरण आकार के बजाय लेबल चित्र का संदर्भ देते हैं, और ट्रेनर कोशिका वर्गीकरण छोड़ देते हैं।

geo_annotation स्कीम के फ़ीचर उन्हीं डिटेक्शन और सेगमेंटेशन ट्रेनरों को आइटम के रास्टर बेसमैप पर प्रशिक्षित करते हैं। GeoTIFF फ़ाइल के अपने टैग के ट्रांसफ़ॉर्म और EPSG कोड से रखा जाता है और प्रोजेक्टेड होने पर pyproj से रीप्रोजेक्ट किया जाता है। विस्तार (extent) वाला सादा चित्र देशांतर और अक्षांश में रखा जाता है। पॉलीगॉन, आयत, रेखाएँ और बिंदु रास्टर पर आकार बन जाते हैं, और पॉलीगॉन के छेद भरे जाते हैं। भविष्यवाणियाँ source: model के साथ EPSG:4326 में GeoJSON फ़ीचर के रूप में लौटती हैं। नक्शा फ़ीचर को सुझाव के रूप में पेश करता है, और सुझाव उत्तर तभी गिने जाते हैं जब एनोटेटर किसी को संपादित या स्वीकार करे। जिस नक्शे का बेसमैप टाइल सर्वर या GeoJSON आउटलाइन है, उस पर प्रशिक्षण के लिए कोई रास्टर नहीं होता, और रन उन आइटम को चेतावनी के साथ छोड़ देता है।

cellpose से कोशिकाएँ

cellpose किसी image_annotation या microscopy स्कीम में कोशिका या नाभिक की आउटलाइन पर Cellpose को फ़ाइन-ट्यून करता है। Cellpose 3 या 4 अलग से इंस्टॉल करें:

bash
pip install cellpose

डिफ़ॉल्ट बेस मॉडल cyto3 है। nuclei और cyto2 भी Cellpose 3 के साथ चलते हैं, और cpsam Cellpose 4 के साथ। जब Cellpose का अपना अनुमान गलत हो, तब diameter को पिक्सेल में सामान्य कोशिका व्यास पर सेट करें। Cellpose श्रेणियों के बिना सेगमेंट करता है, इसलिए हर अनुमानित कोशिका को label पैरामीटर मिलता है, या label सेट न होने पर स्कीम का सबसे आम लेबल। जब श्रेणियाँ अलग दिखती हों तब हर लेबल के लिए एक मॉडल प्रशिक्षित करें। हर अनुमानित मास्क पॉलीगॉन के रूप में लौटता है, कोशिका की औसत प्रायिकता प्री-लेबल के विश्वास के रूप में। cellpose को train स्प्लिट में केवल 5 एनोटेट किए चित्र चाहिए, जबकि डिटेक्टरों को 20। Cellpose का कोड BSD-3-Clause है, और वज़न Cellpose के लेखकों से लेखकों की शर्तों पर आते हैं।

स्पेक्ट्रोग्राम

spectrogram_annotation स्कीम के बॉक्स torchvision-detect और ultralytics-detect को हर रिकॉर्डिंग पर प्रशिक्षित करते हैं, जिसे स्पेक्ट्रोग्राम चित्र के रूप में रेंडर किया गया है। ऑडियो मॉडल ट्यूटोरियल स्पेक्ट्रोग्राम डिटेक्शन को शुरू से अंत तक कवर करता है, रेंडरिंग सेटिंग और उन रिकॉर्डिंग फ़ॉर्मेट के साथ जिन्हें ट्रेनर पढ़ते हैं।

layoutlmv3 से दस्तावेज़ लेआउट

layoutlmv3 पृष्ठ के शब्दों और शब्दों की स्थितियों से वे क्षेत्र खोजने के लिए LayoutLMv3 को फ़ाइन-ट्यून करता है जिन्हें एनोटेटर पृष्ठ चित्रों पर बनाते हैं। क्षेत्र कोई भी लेबल किया गया ब्लॉक है, जैसे शीर्षक, तालिका या कुल। Potato कोई OCR नहीं चलाता, इसलिए हर आइटम पृष्ठ के शब्द बॉक्स के साथ रखता है, पृष्ठ चित्र के पिक्सेल में या 0 से 1 में:

json
{"id": "page_001", "image": "pages/page_001.png",
 "words": [{"text": "INVOICE", "bbox": [40, 52, 180, 82]},
           {"text": "Total", "bbox": [300, 700, 380, 730]}]}

regions मोड में PAGE XML इम्पोर्ट फ़ाइल के Word तत्वों से words भरता है। PDF की टेक्स्ट परत या किसी अन्य OCR टूल के शब्द इसी तरह काम करते हैं। हर शब्द को वह क्षेत्र लेबल मिलता है जिसमें शब्द का केंद्र पड़ता है, अनुमानित शब्द वापस क्षेत्रों में मिला दिए जाते हैं, और हर क्षेत्र क्षेत्र के शब्दों के चारों ओर बॉक्स प्री-लेबल बन जाता है। होल्ड-आउट स्कोर बॉक्स mAP हैं। अनुमानित बॉक्स क्षेत्र के शब्दों पर समाप्त होता है, इसलिए शब्दों से बहुत बड़े बनाए गए क्षेत्र बॉक्स के हक़ से कम स्कोर करते हैं।

LayoutLMv3 के वज़न CC BY-NC-SA 4.0 के अंतर्गत लाइसेंस प्राप्त हैं और व्यावसायिक उपयोग के लिए नहीं हैं। YOLO ट्रेनरों की तरह, Training पेज रन से पहले पुष्टि माँगता है, API रन को accept_licence: true चाहिए, और स्वचालित दोबारा प्रशिक्षण को auto_retrain.accept_licence: true चाहिए।

vlm-sft से विज़न-लैंग्वेज मॉडल

vlm-sft चित्रों के बारे में एनोटेटरों के उत्तरों पर एक विज़न-लैंग्वेज मॉडल को फ़ाइन-ट्यून करता है, डिफ़ॉल्ट रूप से LoRA एडेप्टर और डिफ़ॉल्ट मॉडल Qwen/Qwen2.5-VL-3B-Instruct के साथ। ट्रेनर चार स्कीम से सीखता है:

स्कीमप्रति कौन-सी इकाई एक प्रशिक्षण उदाहरणमॉडल क्या बनाना सीखता है
चित्र आइटम पर textआइटमस्कीम के प्रश्न का एनोटेटर का उत्तर
region_captionकैप्शन वाला क्षेत्रलाल बॉक्स के रूप में बनाए क्षेत्र का कैप्शन
grounding_evalउत्तर दिया गया अभिव्यक्तिक्षेत्र JSON के रूप में, एक बिंदु, या {"absent": true}
gui_trajectoryक्लिक वाला correct आँका गया चरणक्लिक, {"point": [x, y]} के रूप में

निर्देशांक चित्र के 0 से 1,000 के ग्रिड पर हैं, इसलिए कोई भी चेकपॉइंट उदाहरणों से यह फ़ॉर्मेट सीख सकता है। text रन जनरेट किया गया उत्तर टेक्स्ट प्री-लेबल के रूप में प्रकाशित करता है। grounding रन हर अभिव्यक्ति के लिए क्षेत्र या अनुपस्थिति प्रकाशित करता है, और VLM ग्राउंडिंग grounding_eval स्कीम को कवर करता है। GUI trajectory रन हर चरण के लिए उस जगह से निर्णय सुझाता है जहाँ मॉडल क्लिक करता, और कंप्यूटर-यूज़ एजेंट का मूल्यांकन GUI ट्रेस को कवर करता है। कैप्शन रन token F1 और BLEU-4 से स्कोर होता है पर कभी प्रकाशित नहीं होता, क्योंकि कैप्शन वाले क्षेत्र एनोटेटर का उत्तर हैं।

असली चेकपॉइंट को GPU चाहिए। Potato टीम ने Mac के Metal GPU पर 26 चित्रों पर LoRA के साथ Qwen/Qwen3-VL-2B-Instruct के दो epoch 46 सेकंड में प्रशिक्षित किए। Parameters में {"lora": {"quantize": "4bit"}} 4-बिट बेस वज़न पर QLoRA एडेप्टर प्रशिक्षित करता है। जो मॉडल चुनें उसका लाइसेंस जाँचें। Qwen2.5-VL-3B पर Qwen शोध लाइसेंस है, और 7B मॉडल Apache-2.0 है। LLM फ़ाइन-ट्यूनिंग ट्यूटोरियल LoRA, QLoRA और Hugging Face Hub पर मॉडल प्रकाशित करने को कवर करता है।

आगे पढ़ें

संदर्भ

  • Ren, S., He, K., Girshick, R., and Sun, J. (2017). Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks. IEEE Transactions on Pattern Analysis and Machine Intelligence, 39, 1137–1149. doi:10.1109/TPAMI.2016.2577031
  • He, K., Gkioxari, G., Dollár, P., and Girshick, R. (2017). Mask R-CNN. 2017 IEEE International Conference on Computer Vision (ICCV), 2980–2988. doi:10.1109/ICCV.2017.322
  • Kirillov, A., Mintun, E., Ravi, N., Mao, H., Rolland, C., Gustafson, L., Xiao, T., Whitehead, S., Berg, A. C., Lo, W.-Y., Dollár, P., and Girshick, R. (2023). Segment Anything. 2023 IEEE/CVF International Conference on Computer Vision (ICCV), 3992–4003. doi:10.1109/ICCV51070.2023.00371
  • Stringer, C., Wang, T., Michaelos, M., and Pachitariu, M. (2021). Cellpose: a generalist algorithm for cellular segmentation. Nature Methods, 18, 100–106. doi:10.1038/s41592-020-01018-x
  • Huang, Y., Lv, T., Cui, L., Lu, Y., and Wei, F. (2022). LayoutLMv3: Pre-training for Document AI with Unified Text and Image Masking. Proceedings of the 30th ACM International Conference on Multimedia, 4083–4091. doi:10.1145/3503161.3548112