تخطّي إلى المحتوى

درّب نماذج الكشف والتجزئة على تعليقات الصور التوضيحية

اضبط كاشفاً ضبطاً دقيقاً على مربعات دراستك، واعرض المربعات المتنبَّأ بها على المعلّقين بوصفها تصنيفات مسبقة، وأعد التدريب على تصحيحاتهم، وكيّف التشغيلة مع الشرائح والخلايا.

جديد في v2.14.0

يدرّب هذا الدرس كاشف أجسام على المربعات الحدّية التي رسمتها دراستك، ويعرض مربعات الكاشف على المعلّقين التالين بوصفها تصنيفات مسبقة يصحّحونها. الدرس لأصحاب الدراسات الذين لديهم مخطط image_annotation وقرأوا درّب نموذجك الأول أو اعتادوا صفحة التدريب في لوحة الإدارة. يشغّل النصف الأول حلقة كاملة واحدة بـ torchvision-detect (مربعات على الصور، وتشغيلة تدريب، وكتابة راجعة، وتصحيحات، وتشغيلة ثانية)، وكل خطوة هناك عملت على وحدة CPU في حاسوب محمول. ويكيّف النصف الثاني الحلقة مع YOLO، والمخطّطات الخارجية، وتحسين SAM، وفئات الصورة الكاملة، والشرائح الكاملة، والمجهرية، والخرائط، والخلايا، وصفحات المستندات، والنماذج الرؤيوية اللغوية، في قسم لكل منها.

تثبيت مُدرِّبات الرؤية

يضبط torchvision-detect كاشف Faster R-CNN من torchvision ضبطاً دقيقاً. يحتاج المُدرِّب إلى torch وtorchvision. يستثني Potato كليهما من التثبيت الافتراضي لأن torch تنزيل بحجم عدة غيغابايتات. ثبّت إضافة الرؤية على الجهاز الذي يجري التدريب:

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

تغطي الإضافة نفسها torchvision-segment وhf-image-classification وsam-finetune وlayoutlmv3 وvlm-sft. يظهر المُدرِّب الذي تنقصه حِزمه في صفحة التدريب بعبارة "not installed" مع الأمر الذي يثبّت الحِزم.

الـ GPU اختياري للمشروع الصغير أدناه. على جهاز Mac بمعالج Apple silicon، يتدرّب torchvision-detect وtorchvision-segment على وحدة CPU لا على Metal (mps)، ويسجّل سجل التشغيلة هذا التحويل بالتحذير "torchvision-detect does not run on Apple's Metal (mps) with this torch; using the CPU". في قياسات فريق Potato، استغرقت خطوة تدريب واحدة على Metal بحجم الصورة الافتراضي وقتاً أطول من حقبة CPU كاملة. وللصور الأكبر أو الدراسة الأكبر، درّب على خادم GPU كما يصف التدريب عن بُعد.

تجهيز مشروع صور

يحتاج المشروع إلى ثلاثة أشياء: الصور، وملف بيانات يسرد الصور، وتهيئة. ضع الصور في مجلد اسمه media داخل مجلد المشروع، لأن Potato يخدم <task_dir>/media/ عند مسار URL هو /media/ افتراضياً. ويعمل مجلد آخر إذا سمّته التهيئة بـ media_directory.

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

كل سطر من data/images.jsonl عنصر واحد له معرّف ومسار URL للصورة:

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

تعرّف التهيئة مخطط image_annotation واحداً بأداة bbox وتصنيفين، وتفعّل تدريب النماذج مع الكتابة الراجعة. تجتاز التهيئة 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 أن يدرّب بأقل من 20 صورة معلّقة في قسم train، ويضع التقسيم الافتراضي 70% من الصور المصنّفة في train. صنّف 30 صورة على الأقل، وأكثر إذا تنوّعت الأجسام. ارسم المربعات يدوياً في http://localhost:8000. الصورة التي لا مربعات فيها تُستبعد من التدريب، لأن الكاشف لا يستطيع التمييز بين صورة بلا أجسام وصورة لم يُكملها أحد. ارسم كل جسم في أي صورة تسلّمها.

لتجربة الحلقة قبل أن يصنّف أي شخص، يستطيع محاكي المستخدم أن يرسم مربعات من ملف مرجعي. يعطي كل مدخل في الملف المرجعي معرّف الصورة وأشكال المخطط بإحداثيات معيارية:

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

يعيد المحاكي رسم كل مربع مرجعي مع اهتزاز بضعة بكسلات، وعند مستوى 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"]}'

تبدأ التشغيلة من أوزان COCO الخاصة بـ torchvision وتضع رأس مربعات جديداً على الكاشف لتصنيفَي المخطط. ينزّل torch أوزان COCO إلى ذاكرته المؤقتة في التشغيلة الأولى. الإعدادات الافتراضية هي معمارية fasterrcnn_mobilenet_v3_large_fpn الصغيرة، و15 حقبة، و4 صور في كل خطوة، وإيقاف مبكر بعد 4 حقب من دون تحسّن في mAP على val. يتدرّب كل شكل بوصفه المربع الحدّي للشكل، فالدراسة التي رسم معلّقوها مضلّعات تدرّب مع ذلك كاشف مربعات. ومع عدة معلّقين على الصورة، تتدرّب التشغيلة على الإجابة الكاملة الواحدة التي يختارها model_training.aggregation للصورة، لأن مربعات شخصين نادراً ما تتطابق تماماً.

على وحدة CPU في Apple M4 Pro التي استخدمناها، تدرّبت 37 صورة تدريب بحجم 320 في 240 بكسلاً في نحو 106 ثوانٍ، وتوقفت التشغيلة بعد 5 حقب. تقع ملفات التشغيلة في annotation_output/training/runs/<run_id>/، والكاشف المدرَّب في artifacts/model/detector.pt. وتوجد إعدادات التشغيلة والجهاز الذي استخدمته في artifacts/model_card.json.

قراءة درجة العناصر المحجوزة

تقيس كل تشغيلة أداء الكاشف على الصور التي لم يتدرّب عليها قط. الدرجة الرئيسية لمخطط image_annotation هي map_50، أي متوسط الدقة المتوسطة في COCO مع احتساب المربع المتنبَّأ به مطابقاً حين يتداخل مع المربع الحدّي لجسم معلّق عند IoU يساوي 0.5 أو أكثر. وتسجّل صفحة التشغيلة أيضاً map_50_95، وهو المتوسط على عتبات IoU من 0.5 إلى 0.95. نادراً ما يتداخل مربعا معلّقين لجسم واحد عند IoU بقيمة 0.9، فتقيس العتبات الأشد صرامة جزئياً مدى اتساق رسم الناس. لذلك يبدأ Potato بعتبة 0.5. ويبيّن قياس الاتفاق على المربعات الحدّية كيف تفحص هذا الاتساق مباشرة.

يحتفظ الكاشف بنقطة الحفظ من الحقبة ذات أفضل درجة على val، فتأتي الدرجة الرئيسية من قسم test عندما يضم قسم test صوراً. يعرض جدول التشغيلات الدرجة الرئيسية في عمود Held-out score. وتسرد صفحة التشغيلة n_train وn_boxes وحجم كل قسم وتغطيته وعدد الأجسام المعلّقة والمتنبَّأ بها على val وtest. في تشغيلتنا التجريبية على 80 صورة اصطناعية لدوائر ومربعات ملوّنة، سجّل الكاشف 0.99 في map_50 على test. الأشكال الاصطناعية أسهل في العثور عليها بكثير من الأجسام الحقيقية، فاحكم على الدرجة بصورك أنت.

فحص التصنيفات المسبقة

بعد تشغيلة ناجحة، يكتب Potato مربعات الكاشف في حقل predictions لكل صورة مؤهَّلة. يبلغ GET /admin/training/api/status بالنتيجة في حقل writeback من الاستجابة، مع n_written للصور التي حصلت على تصنيفات مسبقة وعدّاد لكل سبب حُجبت به صورة، مثل n_skipped_low_confidence للصور دون min_confidence وn_skipped_train_split للصور التي تدرّبت عليها التشغيلة. صور قسم train لا تحصل على تصنيفات مسبقة أبداً، لأن ثقة النموذج في بيانات تدريبه نفسها لا تدل على شيء بشأن الصور الجديدة.

سجّل الدخول في http://localhost:8000 باسم مستخدم جديد. تُفتح كل صورة غير مصنّفة اجتازت فحوص الكتابة الراجعة ومربعات الكاشف مرسومة عليها بالفعل. يُخزَّن كل مربع مع source: ai ودرجة الكاشف في confidence. يحرّك المعلّق المربع أو يغيّر حجمه، ويغيّر التصنيف، ويحذف الكشف الخاطئ، ويرسم أي جسم فاته الكاشف. وتصبح المربعات إجابة المعلّق عندما يحرّرها أو ينتقل إلى الصورة التالية. لا يُحفظ التصنيف المسبق أبداً بينما يكتفي المعلّق بالنظر إلى الصورة. ويقدّم طابور مراجعة النموذج الصور المصنّفة مسبقاً بادئاً بأقلها ثقة، ويُدخل حكم correct من المراجع الصورة في قسم train في كل تشغيلة لاحقة.

إعادة التدريب على المربعات المصحّحة

تصبح كل صورة مصحّحة تصنيفاً بشرياً للتشغيلة التالية. ابدأ تشغيلة 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 كاشف Ultralytics YOLO من نقطة حفظ مدرَّبة مسبقاً على COCO (yolo11n.pt افتراضياً) على المربعات نفسها. يتدرّب YOLO ويتنبأ أسرع من torchvision-detect، والتصنيفات المسبقة هي المربعات القابلة للتحرير نفسها. Ultralytics مرخّصة بموجب AGPL-3.0، والنموذج المدرَّب والموزَّع باستخدام Ultralytics يحمل شروط AGPL. وتبيع Ultralytics ترخيصاً مؤسسياً منفصلاً للاستخدام المغلق. تستثني إضافات Potato مكتبة Ultralytics، فثبّت الحزمة بنفسك:

bash
pip install ultralytics

يطلب Potato منك تأكيد الترخيص قبل كل تشغيلة. تعرض صفحة التدريب نافذة تأكيد، وتحتاج تشغيلة الـ 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. الإعدادات الافتراضية هي 50 حقبة بدقة 640 بكسلاً مع إيقاف مبكر بعد 10 حقب.

المخطّطات الخارجية بدلاً من المربعات

يدرّب torchvision-segment نموذج Mask R-CNN من torchvision على المخطّطات الخارجية المرسومة بمضلّع أو قطع ناقص أو رسم حر أو قناع فرشاة. تُستبعد المربعات من تدريب التجزئة، لأن المربع لا يبيّن أي بكسلات تنتمي إلى الجسم. أعطِ المعلّقين أداة مخطط خارجي مثل polygon أو brush. ويغطي كيف تعلّق أقنعة تجزئة الصور متى تناسب كل أداة.

يُتتبَّع كل قناع متنبَّأ به إلى مضلّع بما لا يزيد على 64 رأساً، فيصحّح المعلّق التصنيف المسبق نقطة بنقطة. وحين يخرج القناع قطعاً متفرقة، تُحفظ أكبر قطعة. قيمة score_threshold الافتراضية 0.5 لا 0.25 كما في الكاشف. تتراوح درجات التخمينات الثانية في Mask R-CNN للجسم الواحد بين 0.25 و0.6، وكل تخمين سيكون شكلاً إضافياً يحذفه المعلّق. وتقارن درجات العناصر المحجوزة المضلّعات المتنبَّأ بها بالمخطّطات الخارجية المعلّقة. على جهاز Mac يتدرّب torchvision-segment على وحدة CPU. مع torch 2.8، قاس فريق Potato خطوة تدريب واحدة على صورة بحجم 256 بكسلاً فكانت 57 ثانية على Metal و2.3 ثانية على CPU. استخدم خادم GPU للدراسات الحقيقية. أما ultralytics-segment فهو نظير YOLO (yolo11n-seg.pt)، بالمضلّعات نفسها ذات الـ 64 رأساً وتأكيد ترخيص AGPL-3.0 نفسه.

تحويل المربعات إلى مخطّطات خارجية بـ sam-finetune

المربعات سريعة الرسم والمخطّطات الخارجية بطيئة. يضبط sam-finetune مفكّك القناع في Segment Anything (SAM) ضبطاً دقيقاً ليحوّل المربع إلى المخطط الخارجي الذي كان معلّقوك سيرسمونه. يبقى مرمِّز الصورة مجمّداً، ويُحسب تضمين كل صورة مرة واحدة، فتكلّف الحقبة قليلاً. يغذّي التدريب كل مخطط خارجي معلّق بمربعه الحدّي. وتحرّك التشغيلة كل مربع مُدخَل وتغيّر حجمه بما يصل إلى box_jitter (5% افتراضياً)، فيتعلّم المفكّك من مربعات فضفاضة بقدر مربعات الكاشف.

يحسّن sam-finetune المربعات ويحتاج إلى مربعات ينطلق منها. يتضمن التسلسل المعتاد على مخطط واحد تشغيلتين:

  1. شغّل torchvision-detect أو ultralytics-detect مع writeback.include_unlabeled: true، فتحمل الصور غير المصنّفة تصنيفات مسبقة بمربعات.
  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 ضبطاً دقيقاً أي نموذج يحمّله AutoModelForImageClassification من Hugging Face، مثل ViT وDeiT وBEiT وConvNeXt وSwin وDINOv2. النموذج الافتراضي هو google/vit-base-patch16-224-in21k. يقلب المُدرِّب صور التدريب عشوائياً افتراضياً. اضبط flip على false في Parameters عندما يغيّر القلب التصنيف، كما في النص داخل الصورة أو اليمين واليسار. ويدرّب lora: true مهايئ LoRA ورأس التصنيف بدلاً من كل الأوزان.

يُعدّ مخطط الاختيار مجموعة صور حين يحمل 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، أو بالنسبة إلى media_directory حين لا يوجد الملف تحت task_dir.
  • يُحلّ مسار URL مثل /media/img_001.jpg بالنسبة إلى media_directory. وتحمّل صفحة التعليق الصورة من المكان نفسه.
  • الملف الذي يضعه مسار مطلق أو ../ أو رابط رمزي خارج مجلد المهمة وmedia_directory يُستبعد مع تحذير.
  • الصور البعيدة عبر http(s) لا تُنزَّل أبداً. تستبعد التشغيلة كل عنصر صورته بعيدة أو مفقودة، ويذكر سجل التشغيلة عددها، ولا تحصل تلك العناصر على تنبؤ.

نزّل الصور البعيدة إلى media_directory لتتدرّب عليها. وتغطي صفحة صيغ الرؤية وpotato import إدخال مجموعات الصور الموجودة إلى مشروع.

الشرائح الكاملة والصور الكبيرة الأخرى

تغيّر مُدرِّبات الكشف والتجزئة حجم كل صورة إلى بضع مئات من البكسلات، وتختفي الأجسام على شريحة أنسجة بحجم 100000 بكسل أو على مشهد قمر اصطناعي عند هذا الحجم. لذلك، في مخططات image_annotation وmicroscopy وgeo_annotation، يقطّع Potato الصور الكبيرة إلى بلاطات عند بناء بيانات تدريب التشغيلة. التبليط آلي لصيغ الشرائح (.svs و.ndpi و.mrxs و.scn وغيرها) وللصور التي يبلغ ضلعها الأطول 4096 بكسلاً أو أكثر. تحتاج الشرائح إلى openslide:

bash
pip install "potato-annotation[wsi]"

يستخدم التدريب البلاطات التي تحتوي جسماً معلّقاً مع عيّنة من البلاطات الفارغة، ويُقصّ كل جسم على بلاطته. ويغطي التنبؤ كل بلاطة فوق النسيج، حتى max_predict_tiles للصورة الواحدة. يُحسم قسم كل صورة قبل قصّها، فلا تقع بلاطات الشريحة الواحدة في قسمين. وتُدمج تنبؤات البلاطات على الصورة كلها، ويُحتفظ مرة واحدة بالجسم الذي وجدته بلاطتان متداخلتان معاً. تستخدم التصنيفات المسبقة إحداثيات الصورة كاملة، وهي الإحداثيات نفسها التي يخزّنها عارض التكبير العميق. وتُحسب درجات العناصر المحجوزة على الصور كاملة. وتنزّل الخلفية البعيدة البلاطات لا الشريحة.

تقع الإعدادات تحت model_training.tiling. يدرّب هذا المقطع شريحة بتكبير 40x عند 20x على بلاطات بحجم 1024 بكسلاً:

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

أبقِ overlap بحجم الأجسام على الأقل، لأن الجسم الأكبر يُعثر عليه قطعاً، قطعة في كل بلاطة. وللشريحة التي تسجّل دقتها، يحدّد mpp عدد الميكرونات لكل بكسل بلاطة ويتجاوز downsample. يحتاج إعدادان إلى عناية في بعض الشرائح. تفترض البلاطات الفارغة في التدريب أن كل جسم على صورة معلّقة قد رُسم، فاضبط background: 0 عندما رسم المعلّقون مناطق من الشريحة فقط. ويُكشف النسيج بعتبة Otsu على صورة الشريحة المصغّرة، فالشريحة التي لا زجاج مكشوفاً فيها تفقد نصفها الأفتح، ويتنبأ tissue_threshold: 0 على كل بلاطة. ويسرد جدول tiling كل مفتاح وقيمته الافتراضية.

المجهرية والخرائط

تدرّب مناطق الاهتمام (ROIs) في مخطط microscopy كلاً من torchvision-detect وultralytics-detect وtorchvision-segment وultralytics-segment وcellpose. تُعرض كل شريحة z ونقطة زمنية فيها ROIs بالقنوات والتباين الافتراضيين للمخطط وتصبح صورة تدريب منفصلة. والعارض هو المركّب الذي يستخدمه العارض. أما الصورة التي لم يُرسم فيها شيء بعد فيُتنبأ عليها عند شريحة z الوسطى والنقطة الزمنية الأولى، حيث يفتح العارض. وتعود التنبؤات بوصفها ROIs مجهرية مع z وt لكل ROI. تشير تصنيفات الخلايا إلى صورة تصنيف لا إلى شكل، وتتخطى المُدرِّبات تصنيفات الخلايا.

تدرّب عناصر مخطط geo_annotation مُدرِّبات الكشف والتجزئة نفسها على الخريطة الأساسية النقطية للعنصر. يوضع ملف GeoTIFF بحسب التحويل ورمز EPSG في وسومه الخاصة ويُعاد إسقاطه بـ pyproj عندما يكون مُسقَطاً. وتوضع الصورة العادية ذات النطاق بالطول والعرض الجغرافيين. وتتحول المضلّعات والمستطيلات والخطوط والنقاط إلى أشكال على الصورة النقطية، وتُملأ ثقوب المضلّعات. وتعود التنبؤات بوصفها عناصر GeoJSON بنظام EPSG:4326 مع source: model. وتعرض الخريطة العناصر اقتراحات، ولا تُحتسب الاقتراحات إجابة إلا بعد أن يحرّر المعلّق أحدها أو يقبله. والخريطة التي أساسها خادم بلاطات أو مخطط GeoJSON خارجي لا صورة نقطية فيها للتدريب، وتستبعد التشغيلة تلك العناصر مع تحذير.

الخلايا بـ cellpose

يضبط cellpose نموذج Cellpose ضبطاً دقيقاً على مخطّطات الخلايا أو النوى الخارجية في مخطط image_annotation أو microscopy. ثبّت Cellpose 3 أو 4 على حدة:

bash
pip install cellpose

النموذج الأساسي الافتراضي هو cyto3. يعمل nuclei وcyto2 أيضاً مع Cellpose 3، ويعمل cpsam مع Cellpose 4. اضبط diameter على قطر الخلية المعتاد بالبكسل حين يخطئ تقدير Cellpose نفسه. يجزّئ Cellpose بلا فئات، فتحصل كل خلية متنبَّأ بها على معامل label، أو على أشيع تصنيف في المخطط حين لا يُضبط label. درّب نموذجاً لكل تصنيف حين تبدو الفئات مختلفة. ويعود كل قناع متنبَّأ به مضلّعاً، ومتوسط احتمال الخلية هو ثقة التصنيف المسبق. لا يحتاج cellpose إلا إلى 5 صور معلّقة في قسم train، مقابل 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]}]}

يملأ استيراد PAGE XML بوضع regions حقل words من عناصر Word في الملف. وتعمل كلمات من الطبقة النصية في ملف PDF أو من أداة OCR أخرى بالطريقة نفسها. تُصنَّف كل كلمة بالمنطقة التي يقع فيها مركز الكلمة، وتُدمج الكلمات المتنبَّأ بها في مناطق، وتصبح كل منطقة تصنيفاً مسبقاً بمربع حول كلمات المنطقة. درجات العناصر المحجوزة هي mAP للمربعات. ينتهي المربع المتنبَّأ به عند كلمات المنطقة، فالمناطق المرسومة أكبر بكثير من الكلمات تحصل على درجة أدنى مما تستحقه المربعات.

أوزان LayoutLMv3 مرخّصة بـ CC BY-NC-SA 4.0 وليست للاستخدام التجاري. وكما في مُدرِّبات YOLO، تطلب صفحة التدريب تأكيداً قبل التشغيلة، وتحتاج تشغيلة الـ 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 إلى 1000 للصورة، فيتعلّم أي نموذج الصيغة من الأمثلة. تنشر تشغيلة النص الإجابة المولَّدة تصنيفاً مسبقاً نصياً. وتنشر تشغيلة الإسناد منطقة أو غياباً لكل عبارة، ويغطي إسناد VLM مخطط grounding_eval. وتقترح تشغيلة مسار واجهة المستخدم حكماً لكل خطوة بحسب المكان الذي كان النموذج سينقر فيه، ويغطي تقييم وكلاء استخدام الحاسوب مسارات واجهة المستخدم. وتُقيَّم تشغيلة الأوصاف بـ token F1 وBLEU-4 ولا تُنشر أبداً، لأن المناطق الموصوفة إجابة معلّق.

تحتاج نقاط الحفظ الحقيقية إلى GPU. درّب فريق Potato حقبتين من Qwen/Qwen3-VL-2B-Instruct بـ LoRA على 26 صورة في 46 ثانية على GPU من نوع Metal في جهاز Mac. ويدرّب {"lora": {"quantize": "4bit"}} في Parameters مهايئ QLoRA فوق أوزان أساسية بدقة 4 بتات. تحقّق من ترخيص النموذج الذي تختاره. يحمل Qwen2.5-VL-3B ترخيص Qwen البحثي، والنموذج 7B برخصة Apache-2.0. ويغطي درس الضبط الدقيق للنماذج اللغوية الكبيرة 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