# EoMT-DINOv3

  

## Genel Bakış

**EoMT-DINOv3** ailesi, [Encoder-only Mask Transformer](eomt) mimarisini, [DINOv3](dinov3) kullanılarak ön eğitilmiş Vision Transformer'larla genişletir. Bu güncelleme, gerçek zamanlı uygulamalar için EoMT'yi cazip kılan yalnızca kodlayıcı tasarımını korurken ADE20K ve COCO kıyaslamalarında daha güçlü segmentasyon kalitesi sunar.

DINOv2 tabanlı modellere kıyasla DINOv3 varyantları, döner konum gömme (rotary position embeddings), isteğe bağlı kapılı MLP blokları ve Meta AI'nın en son ön eğitim tarifelerini kullanır. Bu değişiklikler, [DINOv3 model koleksiyonunda](https://github.com/tue-mps/eomt/blob/master/model_zoo/dinov3.md) vurgulandığı gibi, anlamsal, örnek ve panoptik segmentasyon görevlerinde ölçülebilir performans artışları sağlar.

Orijinal EoMT mimarisi, Tommie Kerssies, Niccolò Cavagnero, Alexander Hermans, Narges Norouzi, Giuseppe Averta, Bastian Leibe, Gijs Dubbelman ve Daan de Geus tarafından yazılan CVPR 2025 Highlight makalesi *[Your ViT is Secretly an Image Segmentation Model](https://huggingface.co/papers/2503.19108)* ile tanıtılmıştır. DINOv3 yükseltmesi, aynı hafif segmentasyon başlığını ve sorgu tabanlı çıkarım stratejisini korurken kodlayıcıyı DINOv3 ViT kontrol noktalarıyla değiştirir.

İpuçları:

* Yapılandırma, `rope_theta` ve `use_gated_mlp` gibi DINOv3'e özgü ayarları açığa çıkarır. `dinov3-vitg14` gibi büyük DINOv3 omurgaları `use_gated_mlp=True` değerini bekler.
* DINOv3 modelleri, döner konum gömme (rotary position embeddings) sayesinde daha geniş bir çözünürlük aralığında çalışabilir. Görüntü işleyici varsayılan olarak kare kırpma kullanmaya devam eder ancak özel boyutlar `AutoImageProcessor` üzerinden sağlanabilir.
* TU/e Mobile Perception Systems Lab tarafından barındırılan önceden eğitilmiş denetim noktaları, upstream DINOv3 omurgalarıyla birleştirilmesi gereken delta ağırlıklarını sağlar. [resmi depodaki](https://github.com/tue-mps/eomt) dönüştürme yardımcı programları bu iş akışını ayrıntılı olarak açıklar.

Bu model [nielsr](https://huggingface.co/nielsr) tarafından katkıda bulunmuştur. Orijinal kod [burada](https://github.com/tue-mps/eomt) bulunabilir.

## Kullanım örnekleri

Aşağıda, DINOv3 destekli bir EoMT modeliyle panoptik segmentasyonun nasıl çalıştırılacağını gösteren minimal bir örnek bulunmaktadır. Aynı görüntü işleyici, kontrol noktasını değiştirerek semantik veya örnek segmentasyonu için de yeniden kullanılabilir.

```python
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]]

#### transformers.EomtDinov3Config[[transformers.EomtDinov3Config]]

```python
transformers.EomtDinov3Config(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, hidden_size: int = 1024, num_hidden_layers: int = 24, num_attention_heads: int = 16, hidden_act: str = 'gelu', hidden_dropout_prob: float | int = 0.0, initializer_range: float = 0.02, layer_norm_eps: float = 1e-06, image_size: int | list[int] | tuple[int, int] = 640, patch_size: int | list[int] | tuple[int, int] = 16, num_channels: int = 3, layerscale_value: float = 1.0, drop_path_rate: float | int = 0.0, num_upscale_blocks: int = 2, attention_dropout: float | int = 0.0, num_blocks: int = 4, no_object_weight: float = 0.1, class_weight: float = 2.0, mask_weight: float = 5.0, dice_weight: float = 5.0, train_num_points: int = 12544, oversample_ratio: float = 3.0, importance_sample_ratio: float = 0.75, num_queries: int = 200, num_register_tokens: int = 4, intermediate_size: int = 4096, rope_parameters: transformers.modeling_rope_utils.RopeParameters | dict | None = None, query_bias: bool = True, key_bias: bool = False, value_bias: bool = True, proj_bias: bool = True, mlp_bias: bool = True, use_gated_mlp: bool = False, pos_embed_shift: float | None = None, pos_embed_jitter: float | None = None, pos_embed_rescale: float | None = 2.0)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/eomt_dinov3/configuration_eomt_dinov3.py#L29)

**Parametreler:**

hidden_size (`int`, *isteğe bağlı*, varsayılan `1024`) : Gizli temsillerin boyutu.

num_hidden_layers (`int`, *isteğe bağlı*, varsayılan `24`) : Transformer decoder'ındaki gizli katman sayısı.

num_attention_heads (`int`, *isteğe bağlı*, varsayılan `16`) : Transformer decoder'ındaki her dikkat katmanı için dikkat başı sayısı.

hidden_act (`str`, *isteğe bağlı*, varsayılan `gelu`) : Çözücüdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin, `"gelu"`, `"relu"`, `"silu"` vb.

hidden_dropout_prob (`Union[float, int]`, *isteğe bağlı*, varsayılan `0.0`) : Gömme, kodlayıcı ve havuzlayıcıdaki tüm tam bağlı katmanlar için dropout olasılığı.

initializer_range (`float`, *opsiyonel*, varsayılan `0.02`) : Tüm ağırlık matrislerini başlatmak için kullanılan truncated_normal_initializer'ın standart sapması.

layer_norm_eps (`float`, *opsiyonel*, varsayılan `1e-06`) : Katman normalizasyonu katmanlarında kullanılan epsilon.

image_size (`Union[int, list[int], tuple[int, int]]`, *isteğe bağlı*, varsayılan `640`) : Her bir görüntünün boyutu (çözünürlüğü).

patch_size (`Union[int, list[int], tuple[int, int]]`, *isteğe bağlı*, varsayılan `16`) : Her yamanın boyutu (çözünürlüğü).

num_channels (`int`, *opsiyonel*, varsayılan `3`) : Girdi kanal sayısı.

layerscale_value (`float`, *isteğe bağlı*, varsayılan 1.0) : LayerScale parametresi için başlangıç değeri.

drop_path_rate (`Union[float, int]`, *isteğe bağlı*, varsayılan `0.0`) : Yama birleştirme için drop path oranı.

num_upscale_blocks (`int`, *isteğe bağlı*, varsayılan 2) : Dekoderde veya segmentasyon başlığında kullanılan yukarı örneklemeye bloklarının sayısı.

attention_dropout (`Union[float, int]`, *isteğe bağlı*, varsayılan `0.0`) : Dikkat olasılıkları için dropout oranı.

num_blocks (`int`, *isteğe bağlı*, varsayılan 4) : Mimarideki özellik bloğu veya aşama sayısı.

no_object_weight (`float`, *opsiyonel*, varsayılan 0.1) : Panoptik/nesne segmentasyonunda "nesne yok" sınıfı için kayıp ağırlığı.

class_weight (`float`, *opsiyonel*, varsayılan `2.0`) : Macar eşleştirme maliyetinde sınıflandırma hatasının göreli ağırlığı.

mask_weight (`float`, *isteğe bağlı*, varsayılan `5.0`) : Panoptik segmentasyon kaybında odak kaybının göreli ağırlığı.

dice_weight (`float`, *isteğe bağlı*, varsayılan `5.0`) : Panoptik segmentasyon kaybında dice kaybının göreli ağırlığı.

train_num_points (`int`, *opsiyonel*, varsayılan 12544) : Eğitim sırasında maske kaybı hesabı için örneklenmesi gereken nokta sayısı.

oversample_ratio (`float`, *isteğe bağlı*, varsayılan 3.0) : Maske eğitimi için nokta örneklemesinde kullanılan aşırı örneklem oranı.

importance_sample_ratio (`float`, *opsiyonel*, varsayılan 0.75) : Eğitim sırasında önem bazlı örneklenen noktaların oranı.

num_queries (`int`, *isteğe bağlı*, varsayılan 200) : Transformer'daki nesne sorgularının sayısı.

num_register_tokens (`int`, *isteğe bağlı*, varsayılan 4) : Transformer girdisine eklenen öğrenilebilir kayıt (register) token sayısı.

intermediate_size (`int`, *isteğe bağlı*, varsayılan `4096`) : MLP temsillerinin boyutu.

rope_parameters (`Union[~modeling_rope_utils.RopeParameters, dict]`, *isteğe bağlı*) : RoPE gömme yapılandırma parametrelerini içeren sözlük. Sözlük, `rope_theta` için bir değer içermeli ve daha uzun `max_position_embeddings` ile RoPE kullanmak istiyorsanız ölçekleme için kullanılan parametreleri isteğe bağlı olarak içermelidir.

query_bias (`bool`, *isteğe bağlı*, varsayılan `True`) : Sorgu projeksiyonunda önyargı (bias) kullanılıp kullanılmayacağı.

key_bias (`bool`, *isteğe bağlı*, varsayılan `False`) : Anahtar projeksiyonunda bias kullanılıp kullanılmayacağı.

value_bias (`bool`, *isteğe bağlı*, varsayılan `True`) : Değer projeksiyonunda sapma (bias) kullanılıp kullanılmayacağı.

proj_bias (`bool`, *isteğe bağlı*, varsayılan `True`) : Çıktı projeksiyonunda bias kullanılıp kullanılmayacağı.

mlp_bias (`bool`, *isteğe bağlı*, varsayılan `True`) : MLP katmanlarındaki up_proj, down_proj ve gate_proj katmanlarında bias kullanılıp kullanılmayacağı.

use_gated_mlp (`bool`, *isteğe bağlı*, varsayılan `False`) : Kapılı MLP katmanlarının kullanılıp kullanılmayacağı.

pos_embed_shift (`float`, *isteğe bağlı*) : Konum gömme değerleri için kaydırma değeri.

pos_embed_jitter (`float`, *isteğe bağlı*) : Konum gömme değerleri için titreme (jitter) değeri.

pos_embed_rescale (`float`, *opsiyonel*, varsayılan 2.0) : Konum gömme değerleri için yeniden ölçekleme değeri.

Bu, bir Eomt Dinov3Model yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Eomt Dinov3 modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneği oluşturmak, [tue-mps/coco_panoptic_eomt_large_640_dinov3](https://huggingface.co/tue-mps/coco_panoptic_eomt_large_640_dinov3) modelinin yapılandırmasına benzer bir yapılandırma elde etmenizi sağlar.

Yapılandırma nesneleri [PreTrainedConfig](/docs/transformers/main/tr/main_classes/configuration#transformers.PreTrainedConfig) sınıfından türetilir ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için [PreTrainedConfig](/docs/transformers/main/tr/main_classes/configuration#transformers.PreTrainedConfig) belgesini okuyun.

## EomtDinov3PreTrainedModel[[transformers.EomtDinov3PreTrainedModel]]

#### transformers.EomtDinov3PreTrainedModel[[transformers.EomtDinov3PreTrainedModel]]

```python
transformers.EomtDinov3PreTrainedModel(config: PreTrainedConfig, *inputs, **kwargs)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/eomt_dinov3/modeling_eomt_dinov3.py#L1061)

**Parametreler:**

config ([PreTrainedConfig](/docs/transformers/main/tr/main_classes/configuration#transformers.PreTrainedConfig)) : Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için [from_pretrained()](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) yöntemine göz atın.

Bu model [PreTrainedModel](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel) sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden ayarlama, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

#### forward[[transformers.EomtDinov3PreTrainedModel.forward]]

```python
forward(*args, **kwargs)
```

Noktalı bir yol için sahte bir değer (ör. `torch.float32`): öznitelik erişim zincirleri, çağrılar geçiş (pass-through) dekoratörleri gibi davranır, `repr` noktalı yoldur ve bir taban sınıf olarak kullanıldığında düz bir `type` tabanı yerleştirilir (PEP 560 `__mro_entries__`), böylece gerçek alt sınıflar normal bir metasınıfı korur ve `inspect.signature` sahtenin yerine gerçek `__init__` değerlerini okur.

## EomtDinov3ForUniversalSegmentation[[transformers.EomtDinov3ForUniversalSegmentation]]

#### transformers.EomtDinov3ForUniversalSegmentation[[transformers.EomtDinov3ForUniversalSegmentation]]

```python
transformers.EomtDinov3ForUniversalSegmentation(config: EomtDinov3Config)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/eomt_dinov3/modeling_eomt_dinov3.py#L1167)

**Parametreler:**

config ([EomtDinov3Config](/docs/transformers/main/tr/model_doc/eomt_dinov3#transformers.EomtDinov3Config)) : Modelin tüm parametrelerini içeren model yapılandırma sınıfı. Bir yapılandırma dosyasıyla başlatmak, modelle ilişkili ağırlıkları yüklemez, yalnızca yapılandırmayı yükler. Model ağırlıklarını yüklemek için [from_pretrained()](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel.from_pretrained) yöntemine göz atın.

Örnek/semantik/panoptik segmentasyon için üstte başlık bulunan EoMT-DINOv3 modeli.

Bu model [PreTrainedModel](/docs/transformers/main/tr/main_classes/model#transformers.PreTrainedModel) sınıfından devralır. Kütüphanenin tüm modelleri için uyguladığı genel yöntemler (indirme veya kaydetme, giriş gömme boyutlarını yeniden ayarlama, başları budama vb.) için üst sınıf belgelendirmesine bakın.

Bu model aynı zamanda bir PyTorch [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) alt sınıfıdır. Bunu standart bir PyTorch Module olarak kullanın ve genel kullanım ve davranışla ilgili tüm konular için PyTorch dokümantasyonuna başvurun.

#### forward[[transformers.EomtDinov3ForUniversalSegmentation.forward]]

```python
forward(pixel_values: Tensor, mask_labels: list[torch.Tensor] | None = None, class_labels: list[torch.Tensor] | None = None, patch_offsets: list[torch.Tensor] | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/eomt_dinov3/modeling_eomt_dinov3.py#L1231)

**Parametreler:**

pixel_values (`torch.Tensor`, şekli `(batch_size, num_channels, image_size, image_size)`) : Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri [EomtImageProcessor](/docs/transformers/main/tr/model_doc/eomt#transformers.EomtImageProcessor) kullanılarak elde edilebilir. Ayrıntılar için [EomtImageProcessor.__call__()](/docs/transformers/main/tr/model_doc/molmo2#transformers.Molmo2ImageProcessor.__call__) bölümüne bakın (`processor_class`, görüntü işleme için [EomtImageProcessor](/docs/transformers/main/tr/model_doc/eomt#transformers.EomtImageProcessor) kullanır).

mask_labels (`list[torch.Tensor]`, *isteğe bağlı*) : modele verilecek, `(num_labels, height, width)` biçiminde maske etiketleri listesi

class_labels (`list[torch.LongTensor]`, *isteğe bağlı*) : modele verilecek, `(num_labels, height, width)` biçiminde hedef sınıf etiketleri listesi. Bunlar `mask_labels` etiketlerini belirler; örneğin `class_labels[i][j]` ise `mask_labels[i][j]` etiketi.

patch_offsets (`list[torch.Tensor]`, *isteğe bağlı*) : semantik segmentasyon için yama başlangıç ve bitiş konumlarını ile görüntü indeksini gösteren demetlerin listesi.

**Dönüş:** `EomtDinov3ForUniversalSegmentationOutput` veya `tuple(torch.Tensor)`

A `EomtDinov3ForUniversalSegmentationOutput` veya bir `torch.Tensor` demeti (eğer `return_dict=False` geçirildiyse veya `config.return_dict=False` ise), yapılandırma ([EomtDinov3Config](/docs/transformers/main/tr/model_doc/eomt_dinov3#transformers.EomtDinov3Config)) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

[EomtDinov3ForUniversalSegmentation](/docs/transformers/main/tr/model_doc/eomt_dinov3#transformers.EomtDinov3ForUniversalSegmentation) sınıfının forward metodu, `__call__` özel metodunu geçersiz kılar.

İleri geçiş tarifi bu fonksiyon içinde tanımlanmalı olsa da, sonrasında bunun yerine `Module` örneğini çağırmak gerekir; çünkü ilki ön ve son işleme adımlarını çalıştırmaktan sorumluyken ikincisi bunları sessizce yok sayar.

- **loss** (`torch.Tensor`, *isteğe bağlı*) -- Etiketler mevcut olduğunda döndürülen hesaplanan kayıp.
- **class_queries_logits** (`torch.Tensor`, *isteğe bağlı*) -- Her sorgu için önerilen sınıfları temsil eden, `(batch_size, num_queries, num_labels + 1)` biçiminde bir tensör. `+ 1`'in, null sınıfını dahil ettiğimiz için gerekli olduğunu unutmayın.
- **masks_queries_logits** (`torch.Tensor`, *isteğe bağlı*) -- Her sorgu için önerilen maskeleri temsil eden, `(batch_size, num_queries, height, width)` biçiminde bir tensör.
- **last_hidden_state** (`torch.Tensor`, şekli `(batch_size, num_channels, height, width)`) -- Son katmanın son gizli durumları (son özellik haritası).
- **hidden_states** (`tuple(torch.Tensor)`, *isteğe bağlı*, `output_hidden_states=True` geçirildiğinde veya `config.output_hidden_states=True` olduğunda döndürülür) -- `torch.Tensor` (gömme çıktısı için bir tane + her aşamanın çıktısı için bir tane) içeren, `(batch_size, sequence_length, hidden_size)` biçiminde bir demet. Modelin tüm katmanlarının gizli durumları.
- **attentions** (`tuple(tuple(torch.Tensor))`, *opsiyonel*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `tuple(torch.Tensor)` (her katman için bir tane) içeren bir tuple, şekli `(batch_size, num_heads, sequence_length, sequence_length)`. Transformer decoder'dan Self ve Cross Attentions ağırlıkları.
- **patch_offsets** (`list[torch.Tensor]`, *isteğe bağlı*) -- semantik segmentasyon için yamaların görüntü indeksini ve başlangıç ile bitiş konumlarını gösteren demetlerin listesi.

