Transformers documentation
EoMT-DINOv3
نُشر هذا النموذج في أوراق HF في 24 مارس 2025، وأُضيف إلى مكتبة Hugging Face Transformers في 2 فبراير 2026.
EoMT-DINOv3
نظرة عامة
توسّع عائلة EoMT-DINOv3 من بنية Encoder-only Mask Transformer باستخدام محولات الرؤية (Vision Transformers) التي تم تدريبها مسبقًا باستخدام DINOv3. يوفر هذا التحديث جودة تقطيع (Segmentation) أعلى عبر معايير ADE20K وCOCO، مع الحفاظ على التصميم المعتمد على المُشفِّر فقط (encoder-only) الذي جعل EoMT جذابة للتطبيقات الفورية.
مقارنةً بالنماذج القائمة على DINOv2، تستفيد نسخ DINOv3 من تضمينات الموضع الدوارة، والكتل الاختيارية متعددة الطبقات المعتمدة على البوابات (gated MLP blocks)، وأحدث وصفات التدريب المسبق من Meta AI. وتُحقق هذه التغييرات مكاسب أداء قابلة للقياس عبر مهام التقسيم الدلالي، والتقسيم على مستوى الكائن، والتقسيم الشامل، كما هو موضح في مجموعة نماذج DINOv3.
تم تقديم بنية EoMT الأصلية في ورقة CVPR 2025 المميزة Your ViT is Secretly an Image Segmentation Model التي كتبها Tommie Kerssies وNiccolò Cavagnero وAlexander Hermans وNarges Norouzi وGiuseppe Averta وBastian Leibe وGijs Dubbelman وDaan de Geus. يحافظ ترقية DINOv3 على رأس التقطيع الخفيف نفسه واستراتيجية الاستدلال القائمة على الاستعلامات، مع استبدال المُشفِّر بنقاط تفتيش DINOv3 ViT.
نصائح:
- تُتيح الإعدادات ضبط خيارات خاصة بـ DINOv3 مثل
rope_thetaوuse_gated_mlp. وتتوقع هياكل DINOv3 الكبيرة مثلdinov3-vitg14أن تكونuse_gated_mlp=True. - يمكن لنماذج DINOv3 العمل على نطاق أوسع من الدقات بفضل تضمينات المواقع الدورانية. لا يزال معالج الصور يعتمد على المحاصيل المربعة افتراضياً، لكن يمكن تقديم أحجام مخصصة عبر
AutoImageProcessor. - توفر نقاط التفتيش المُدرَّبة مسبقًا التي يستضيفها مختبر أنظمة الإدراك المتنقل في جامعة TU/e أوزانًا دلتا يجب دمجها مع هياكل DINOv3 الأساسية. وتصف أدوات التحويل في المستودع الرسمي هذا سير العمل بالتفصيل.
تمت مساهمة هذا النموذج من قِبل nielsr. يمكن العثور على الكود الأصلي هنا.
أمثلة على الاستخدام
فيما يلي مثال مبسّط يوضح كيفية تشغيل التقطيع البانورامي باستخدام نموذج EoMT المدعوم من DINOv3. يمكن إعادة استخدام معالج الصور نفسه للتقطيع الدلالي أو التقطيع على مستوى الكائنات ببساطة عن طريق تبديل نقطة التفتيش.
import requests
import torch
from PIL import Image
from transformers import AutoImageProcessor, AutoModelForUniversalSegmentation
model_id = "tue-mps/eomt-dinov3-coco-panoptic-base-640"
processor = AutoImageProcessor.from_pretrained(model_id)
model = AutoModelForUniversalSegmentation.from_pretrained(model_id, device_map="auto")
image = Image.open(requests.get("http://images.cocodataset.org/val2017/000000039769.jpg", stream=True).raw)
inputs = processor(images=image, return_tensors="pt").to(model.device)
with torch.inference_mode():
outputs = model(**inputs)
segmentation = processor.post_process_panoptic_segmentation(outputs, target_sizes=[image.size[::-1]])[0]
list(segmentation.keys())
['segmentation', 'segments_info']EomtDinov3Config
فئة transformers.EomtDinov3Config
< source >( transformers_version: str | None = Nonearchitectures: list[str] | None = Noneoutput_hidden_states: bool | None = Falsereturn_dict: bool | None = Truedtype: str | torch.dtype | None = Nonechunk_size_feed_forward: int = 0is_encoder_decoder: bool = Falseid2label: dict[int, str] | dict[str, str] | None = Nonelabel2id: dict[str, int] | dict[str, str] | None = Noneproblem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = Nonehidden_size: int = 1024num_hidden_layers: int = 24num_attention_heads: int = 16hidden_act: str = 'gelu'hidden_dropout_prob: float | int = 0.0initializer_range: float = 0.02layer_norm_eps: float = 1e-06image_size: int | list[int] | tuple[int, int] = 640patch_size: int | list[int] | tuple[int, int] = 16num_channels: int = 3layerscale_value: float = 1.0drop_path_rate: float | int = 0.0num_upscale_blocks: int = 2attention_dropout: float | int = 0.0num_blocks: int = 4no_object_weight: float = 0.1class_weight: float = 2.0mask_weight: float = 5.0dice_weight: float = 5.0train_num_points: int = 12544oversample_ratio: float = 3.0importance_sample_ratio: float = 0.75num_queries: int = 200num_register_tokens: int = 4intermediate_size: int = 4096rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = Nonequery_bias: bool = Truekey_bias: bool = Falsevalue_bias: bool = Trueproj_bias: bool = Truemlp_bias: bool = Trueuse_gated_mlp: bool = Falsepos_embed_shift: float | None = Nonepos_embed_jitter: float | None = Nonepos_embed_rescale: float | None = 2.0 )
المعاملات
- hidden_size (
int، اختياري، القيمة الافتراضية1024) — أبعاد التمثيلات المخفية. - num_hidden_layers (
int، اختياري، القيمة الافتراضية24) — عدد الطبقات المخفية في مُفكِّك Transformer. - num_attention_heads (
int، اختياري، القيمة الافتراضية16) — عدد رؤوس الانتباه لكل طبقة انتباه في مُفكِّك Transformer. - hidden_act (
str، اختياري، القيمة الافتراضيةgelu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال،"gelu"،"relu"،"silu"، وما إلى ذلك. - hidden_dropout_prob (
Union[float, int]، اختياري، القيمة الافتراضية0.0) — احتمالية الإسقاط (dropout) لجميع الطبقات المتصلة بالكامل في التضمينات، والمُشفِّر، والمُجمِّع. - initializer_range (
float، اختياري، القيمة الافتراضية0.02) — الانحراف المعياري لـ truncated_normal_initializer المستخدم في تهيئة جميع مصفوفات الأوزان. - layer_norm_eps (
float, اختياري، القيمة الافتراضية1e-06) — قيمة الإيبسلون المستخدمة في طبقات تطبيع الطبقة. - image_size (
Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية640) — حجم (دقة) كل صورة. - patch_size (
Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية16) — حجم (دقة) كل رقعة. - num_channels (
int، اختياري، القيمة الافتراضية3) — عدد قنوات الإدخال. - layerscale_value (
float، اختياري، القيمة الافتراضية 1.0) — القيمة الأولية لمعامل LayerScale. - drop_path_rate (
Union[float, int], اختياري، القيمة الافتراضية0.0) — معدل إسقاط المسار (Drop path) لدمج البقع (patch fusion). - num_upscale_blocks (
int، اختياري، القيمة الافتراضية 2) — عدد كتل رفع الدقة المستخدمة في فك الترميز أو رأس التقطيع. - attention_dropout (
Union[float, int]، اختياري، القيمة الافتراضية0.0) — نسبة إسقاط (dropout) لاحتمالات الانتباه. - num_blocks (
int، اختياري، القيمة الافتراضية 4) — عدد كتل الميزات أو المراحل في البنية. - no_object_weight (
float, اختياري، القيمة الافتراضية 0.1) — وزن الدالة الخاسرة لفئة "لا يوجد كائن" في التقطيع البانورامي/المشهدي. - class_weight (
float، اختياري، القيمة الافتراضية2.0) — الوزن النسبي لخطأ التصنيف في تكلفة المطابقة الهنغارية. - mask_weight (
float، اختياري، القيمة الافتراضية5.0) — الوزن النسبي لخسارة التركيز (focal loss) في خسارة التقطيع الشامل (panoptic segmentation). - dice_weight (
float، اختياري، القيمة الافتراضية5.0) — الوزن النسبي لخسارة الداي (dice loss) في خسارة التقطيع البانورامي (panoptic segmentation). - train_num_points (
int، اختياري، القيمة الافتراضية 12544) — عدد النقاط التي يتم أخذ عينات منها لحساب خسارة القناع (mask loss) أثناء التدريب. - oversample_ratio (
float، اختياري، القيمة الافتراضية 3.0) — نسبة الإفراط في العينة المستخدمة في أخذ العينات من النقاط لتدريب الأقنعة. - importance_sample_ratio (
float، اختياري، القيمة الافتراضية 0.75) — نسبة النقاط التي يتم أخذ عينة منها بناءً على الأهمية أثناء التدريب. - num_queries (
int، اختياري، القيمة الافتراضية 200) — عدد استعلامات الكائنات في Transformer. - num_register_tokens (
int، اختياري، القيمة الافتراضية 4) — عدد رموز التسجيل القابلة للتعلّم المضافة إلى مدخلات المحوّل. - intermediate_size (
int، اختياري، القيمة الافتراضية4096) — أبعاد تمثيلات MLP. - rope_parameters (
Union[~modeling_rope_utils.RopeParameters, dict], اختياري) — قائمة تحتوي على معاملات التهيئة الخاصة بتضمينات RoPE. يجب أن تحتوي القائمة على قيمة لـrope_theta، ومعاملات اختيارية تُستخدم للتوسيع في حال رغبتَ في استخدام RoPE معmax_position_embeddingsأطول. - query_bias (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام انحياز في إسقاط الاستعلام. - key_bias (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام الانحياز في إسقاط المفتاح. - value_bias (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام الانحياز في الإسقاط القيمي. - proj_bias (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام الانحياز في الإسقاط الخرجي. - mlp_bias (
bool، اختياري، القيمة الافتراضيةTrue) — ما إذا كان سيتم استخدام انحياز في طبقات up_proj و down_proj و gate_proj ضمن طبقات MLP. - use_gated_mlp (
bool، اختياري، القيمة الافتراضيةFalse) — ما إذا كان سيتم استخدام طبقات MLP ذات البوابات. - pos_embed_shift (
float, اختياري) — قيمة الإزاحة لتضمينات المواقع. - pos_embed_jitter (
float, اختياري) — قيمة الاهتزاز لتضمينات المواقع. - pos_embed_rescale (
float، اختياري، القيمة الافتراضية 2.0) — قيمة إعادة التحجيم لتضمينات المواقع.
هذه فئة الإعدادات المخزنة لإعدادات نموذج Eomt Dinov3Model. تُستخدم لاستحداث نموذج Eomt Dinov3 وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن استحداث إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ tue-mps/coco_panoptic_eomt_large_640_dinov3
ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.
EomtDinov3PreTrainedModel
فئة transformers.EomtDinov3PreTrainedModel
< source >( config: PreTrainedConfig*inputs**kwargs )
المعاملات
- config (PreTrainedConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعدادات إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
قيمة وهمية لمسار منقّط (مثل torch.float32): سلاسل الوصول إلى السمات، والاستدعاءات تتصرف كمُزيّنات (decorators) مرّرة، وrepr هو المسار المنقّط، وعند استخدامه كصنف أساسي يُستبدل بصنف أساسي من نوع type عادي (بموجب __mro_entries__ في PEP 560)، بحيث تحتفظ الصنوف الفرعية الحقيقية بفئة ميتا (metaclass) عادية، وتقرأ inspect.signature دالة __init__ الحقيقية الخاصة بها بدلاً من تلك الوهمية.
EomtDinov3ForUniversalSegmentation
فئة transformers.EomtDinov3ForUniversalSegmentation
< source >( config: EomtDinov3Config )
المعاملات
- config (EomtDinov3Config) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. عند التهيئة باستخدام ملف إعدادات، لا يتم تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.
نموذج EoMT-DINOv3 مع رأس في الأعلى للتجزئة على مستوى الكائن/الدلالية/الشاملة.
يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).
هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.
forward
< source >( pixel_values: Tensormask_labels: list[torch.Tensor] | None = Noneclass_labels: list[torch.Tensor] | None = Nonepatch_offsets: list[torch.Tensor] | None = None**kwargs: *<class 'transformers.utils.generic.TransformersKwargs'> ) → EomtDinov3ForUniversalSegmentationOutput or tuple(torch.Tensor)
المعاملات
- pixel_values (
torch.Tensorمن الشكل(batch_size, num_channels, image_size, image_size)) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام EomtImageProcessor. راجع EomtImageProcessor.call() للتفاصيل (يستخدمprocessor_classEomtImageProcessor لمعالجة الصور). - mask_labels (
list[torch.Tensor]، اختياري) — قائمة بتسميات الأقنعة ذات الشكل(num_labels, height, width)لتغذية النموذج - class_labels (
list[torch.LongTensor], اختياري) — قائمة بتسميات الفئات المستهدفة ذات الأبعاد(num_labels, height, width)لتغذية النموذج. تحدد هذه القائمة تسمياتmask_labels، على سبيل المثال تسميةmask_labels[i][j]إذا كانتclass_labels[i][j]. - patch_offsets (
list[torch.Tensor]، اختياري) — قائمة من السلاسل (tuples) تشير إلى فهرس الصورة والمواضع الابتدائية والنهائية للرقع (patches) الخاصة بالتجزئة الدلالية (semantic segmentation).
يعيد
EomtDinov3ForUniversalSegmentationOutput أو tuple(torch.Tensor)
EomtDinov3ForUniversalSegmentationOutput أو مجموعة مرتبة من
torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر
مختلفة اعتمادًا على الإعداد (EomtDinov3Config) والمدخلات.
تتجاوز طريقة EomtDinov3ForUniversalSegmentation الخاصة بالتقديم (forward) الطريقة الخاصة __call__.
على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن
Moduleبدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.
- loss (
torch.Tensor، اختياري) — الخسارة المحسوبة، تُعاد عند وجود التسميات. - class_queries_logits (
torch.Tensor، اختياري) — متجه (Tensor) على شكل(batch_size, num_queries, num_labels + 1)يمثل الفئات المقترحة لكل استعلام. لاحظ أن+ 1ضروري لأننا ندمج فئة فارغة (null class). - masks_queries_logits (
torch.Tensor، اختياري) — متجه ذو شكل(batch_size, num_queries, height, width)يمثل الأقنعة المقترحة لكل استعلام. - last_hidden_state (
torch.Tensorمن الشكل(batch_size, num_channels, height, width)) — حالات المخفية الأخيرة (خريطة الميزات النهائية) للطبقة الأخيرة. - hidden_states (
tuple(torch.Tensor)، اختياري، يُعاد عند تمريرoutput_hidden_states=Trueأو عند تعيينconfig.output_hidden_states=True) — مجموعة منtorch.Tensor(واحدة لإخراج التضمينات + واحدة لإخراج كل مرحلة) من الشكل(batch_size, sequence_length, hidden_size). حالات مخفية لجميع طبقات النموذج. - attentions (
tuple(tuple(torch.Tensor))، اختياري، يُعاد عند تمريرoutput_attentions=Trueأو عند تعيينconfig.output_attentions=True) — مجموعة منtuple(torch.Tensor)(واحدة لكل طبقة) بأبعاد(batch_size, num_heads, sequence_length, sequence_length). أوزان الانتباه الذاتي والتقاطعي من فاحش التحويل (transformer decoder). - patch_offsets (
list[torch.Tensor]، اختياري) — قائمة من السلاسل (tuples) تشير إلى فهرس الصورة والمواضع الابتدائية والنهائية للرقع (patches) الخاصة بالتجزئة الدلالية (semantic segmentation).