# D-FINE

## Genel Bakış

D-FINE modeli, Yansong Peng, Hebei Li, Peixi Wu, Yueyi Zhang, Xiaoyan Sun ve Feng Wu tarafından [D-FINE: Redefine Regression Task in DETRs as Fine-grained Distribution Refinement](https://huggingface.co/papers/2410.13842) makalesinde önerilmiştir.

Makalenin özeti aşağıdaki gibidir:

*D-FINE'yi tanıtıyoruz; bu güçlü gerçek zamanlı nesne algılayıcı, DETR modellerinde sınırlayıcı kutu regresyon görevini yeniden tanımlayarak olağanüstü konumlandırma hassasiyeti elde eder. D-FINE iki ana bileşenden oluşur: İnce Taneli Dağılım İncelemesi (FDR) ve Küresel Optimal Konumlandırma Kendi Kendine Öğretimi (GO-LSD). FDR, regresyon sürecini sabit koordinat tahmininden olasılık dağılımlarını iteratif olarak incelemeye dönüştürerek konumlandırma doğruluğunu önemli ölçüde artıran ince taneli bir ara temsil sağlar. GO-LSD, incelemiş dağılımlardan daha sığ katmanlara kendi kendine öğretimi yoluyla konumlandırma bilgisini aktaran, aynı zamanda daha derin katmanlar için kalan tahmin görevlerini basitleştiren çift yönlü bir optimizasyon stratejisidir. Ayrıca D-FINE, hesaplama yoğun modüllerde ve işlemlerde hafif optimizasyonlar uygulayarak hız ve doğruluk arasında daha iyi bir denge sağlar. Özellikle D-FINE-L / X, NVIDIA T4 GPU üzerinde COCO veri setinde 124 / 78 FPS hızında %54,0 / %55,8 AP elde eder. Objects365 üzerinde ön eğitildiğinde D-FINE-L / X, %57,1 / %59,3 AP'ye ulaşarak mevcut tüm gerçek zamanlı algılayıcıları geride bırakır. Bununla birlikte, yöntemimiz, ihmal edilebilir düzeyde ek parametre ve eğitim maliyetleriyle geniş bir yelpazedeki DETR modellerinin performansını en fazla %5,3 AP kadar artırır. Kodumuz ve ön eğitilmiş modellerimiz: this https URL.*

Bu model [VladOS95-cyber](https://github.com/VladOS95-cyber) tarafından katkıda bulunmuştur. Orijinal kod [burada](https://github.com/Peterande/D-FINE) bulunabilir.

## Kullanım ipuçları

```python
import torch

from transformers import AutoImageProcessor, DFineForObjectDetection
from transformers.image_utils import load_image

url = 'http://images.cocodataset.org/val2017/000000039769.jpg'
image = load_image(url)

image_processor = AutoImageProcessor.from_pretrained("ustc-community/dfine_x_coco")
model = DFineForObjectDetection.from_pretrained("ustc-community/dfine_x_coco", device_map="auto")

inputs = image_processor(images=image, return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)

results = image_processor.post_process_object_detection(outputs, target_sizes=[(image.height, image.width)], threshold=0.5)

for result in results:
    for score, label_id, box in zip(result["scores"], result["labels"], result["boxes"]):
        score, label = score.item(), label_id.item()
        box = [round(i, 2) for i in box.tolist()]
        print(f"{model.config.id2label[label]}: {score:.2f} {box}")
cat: 0.96 [344.49, 23.4, 639.84, 374.27]
cat: 0.96 [11.71, 53.52, 316.64, 472.33]
remote: 0.95 [40.46, 73.7, 175.62, 117.57]
sofa: 0.92 [0.59, 1.88, 640.25, 474.74]
remote: 0.89 [333.48, 77.04, 370.77, 187.3]
```

## DFineConfig[[transformers.DFineConfig]]

#### transformers.DFineConfig[[transformers.DFineConfig]]

```python
transformers.DFineConfig(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, 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, is_encoder_decoder: bool = True, initializer_range: float = 0.01, initializer_bias_prior_prob: float | None = None, layer_norm_eps: float = 1e-05, batch_norm_eps: float = 1e-05, backbone_config: dict | transformers.configuration_utils.PreTrainedConfig | None = None, freeze_backbone_batch_norms: bool = True, encoder_hidden_dim: int = 256, encoder_in_channels: list[int] | tuple[int, ...] = (512, 1024, 2048), feat_strides: list[int] | tuple[int, ...] = (8, 16, 32), encoder_layers: int = 1, encoder_ffn_dim: int = 1024, encoder_attention_heads: int = 8, dropout: float | int = 0.0, activation_dropout: float | int = 0.0, encode_proj_layers: list[int] | tuple[int, ...] = (2,), positional_encoding_temperature: int = 10000, encoder_activation_function: str = 'gelu', activation_function: str = 'silu', eval_size: int | None = None, normalize_before: bool = False, hidden_expansion: float = 1.0, d_model: int = 256, num_queries: int = 300, decoder_in_channels: list[int] | tuple[int, ...] = (256, 256, 256), decoder_ffn_dim: int = 1024, num_feature_levels: int = 3, decoder_n_points: int | list[int] = 4, decoder_layers: int = 6, decoder_attention_heads: int = 8, decoder_activation_function: str = 'relu', attention_dropout: float | int = 0.0, num_denoising: int = 100, label_noise_ratio: float = 0.5, box_noise_scale: float = 1.0, learn_initial_query: bool = False, anchor_image_size: int | list[int] | None = None, with_box_refine: bool = True, matcher_alpha: float = 0.25, matcher_gamma: float = 2.0, matcher_class_cost: float = 2.0, matcher_bbox_cost: float = 5.0, matcher_giou_cost: float = 2.0, use_focal_loss: bool = True, auxiliary_loss: bool = True, focal_loss_alpha: float = 0.75, focal_loss_gamma: float = 2.0, weight_loss_vfl: float = 1.0, weight_loss_bbox: float = 5.0, weight_loss_giou: float = 2.0, weight_loss_fgl: float = 0.15, weight_loss_ddf: float = 1.5, eos_coefficient: float = 0.0001, eval_idx: int = -1, layer_scale: int | float = 1.0, max_num_bins: int = 32, reg_scale: float = 4.0, depth_mult: float = 1.0, top_prob_values: int = 4, lqe_hidden_dim: int = 64, lqe_layers: int = 2, decoder_offset_scale: float = 0.5, decoder_method: str = 'default', up: float = 0.5, tie_word_embeddings: bool = True)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/d_fine/configuration_d_fine.py#L31)

**Parametreler:**

is_encoder_decoder (`bool`, *isteğe bağlı*, varsayılan `True`) : Modelin bir kodlayıcı/çözücü olarak kullanılıp kullanılmadığı.

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

initializer_bias_prior_prob (`float`, *isteğe bağlı*) : `enc_score_head` ve `class_embed` için önyargıları başlatmak üzere önyargı başlatıcısı tarafından kullanılan önceden olasılık. `None` ise, model ağırlıkları başlatılırken `prior_prob`, `prior_prob = 1 / (num_labels + 1)` olarak hesaplanır.

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

batch_norm_eps (`float`, *isteğe bağlı*, varsayılan `1e-05`) : Toplu normalizasyon katmanları tarafından kullanılan epsilon.

backbone_config (`Union[dict, ~configuration_utils.PreTrainedConfig]`, *isteğe bağlı*) : Omurga modelinin yapılandırması.

freeze_backbone_batch_norms (`bool`, *isteğe bağlı*, varsayılan `True`) : Omurgadaki (backbone) toplama normalizasyonu (batch normalization) katmanlarını dondurulup dondurulmayacağı.

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

encoder_in_channels (`list`, *isteğe bağlı*, varsayılan `[512, 1024, 2048]`) : Kodlayıcı için çok seviyeli özellik girişi.

feat_strides (`list[int]`, *isteğe bağlı*, varsayılan `[8, 16, 32]`) : Her özellik haritasında kullanılan adımlar.

encoder_layers (`int`, *isteğe bağlı*, varsayılan `1`) : Transformer kodlayıcısındaki gizli katman sayısı. Ayarlanmazsa `num_layers` ile aynı değeri kullanır.

encoder_ffn_dim (`int`, *opsiyonel*, varsayılan `1024`) : Kodlayıcıdaki "ara" (genellikle feed-forward olarak adlandırılan) katmanının boyutluluğu.

encoder_attention_heads (`int`, *isteğe bağlı*, varsayılan `8`) : Transformer kodlayıcısındaki her dikkat katmanı için dikkat başı sayısı.

dropout (`Union[float, int]`, *isteğe bağlı*, varsayılan `0.0`) : Tüm dropout katmanları için oran.

activation_dropout (`Union[float, int]`, *isteğe bağlı*, varsayılan `0.0`) : Tamamen bağlı katmandaki aktivasyonlar için dropout oranı.

encode_proj_layers (`list[int]`, *isteğe bağlı*, varsayılan `[2]`) : Kodlayıcıda kullanılacak projeksiyon katmanlarının indeksleri.

positional_encoding_temperature (`int`, *isteğe bağlı*, varsayılan 10000) : Konumsal kodlamaları oluşturmak için kullanılan sıcaklık parametresi.

encoder_activation_function (`str`, *isteğe bağlı*, varsayılan `"gelu"`) : Kodlayıcıda ve pooler'da kullanılan doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Dize ise, `"gelu"`, `"relu"`, `"silu"` ve `"gelu_new"` desteklenir.

activation_function (`str`, *isteğe bağlı*, varsayılan `silu`) : Dekoderdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin, `"gelu"`, `"relu"`, `"silu"` vb.

eval_size (`tuple[int, int]`, *isteğe bağlı*) : Stride dikkate alındıktan sonra konum gömme (position embeddings) için geçerli yükseklik ve genişliğin hesaplanmasında kullanılan yükseklik ve genişlik.

normalize_before (`bool`, *isteğe bağlı*, varsayılan `False`) : Transformer kodlayıcı katmanında, öz-dikkat ve ileri beslemeli modüllerden önce katman normalizasyonunun uygulanıp uygulanmayacağını belirler.

hidden_expansion (`float`, *opsiyonel*, varsayılan 1.0) : RepVGGBlock ve CSPRepLayer boyutlarını büyütmek için kullanılan genişletme oranı.

d_model (`int`, *isteğe bağlı*, varsayılan `256`) : Kodlayıcı katmanlarının ve havuzlayıcı katmanının boyutu.

num_queries (`int`, *isteğe bağlı*, varsayılan 300) : Nesne sorgusu sayısı.

decoder_in_channels (`list`, *isteğe bağlı*, varsayılan `[256, 256, 256]`) : Çözücü için çok seviyeli özellik boyutu

decoder_ffn_dim (`int`, *isteğe bağlı*, varsayılan `1024`) : Dekoderdeki "ara" (genellikle feed-forward olarak adlandırılan) katmanın boyutluluğu.

num_feature_levels (`int`, *isteğe bağlı*, varsayılan 3) : Girdi özellik seviyelerinin sayısı.

decoder_n_points (`int`, *isteğe bağlı*, varsayılan 4) : Dekoderdeki her dikkat başı için her özellik seviyesinde örneklenen anahtar sayısı.

decoder_layers (`int`, *isteğe bağlı*, varsayılan `6`) : Transformer decoder'ındaki gizli katman sayısı. Ayarlanmazsa `num_layers` ile aynı değer kullanılır.

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

decoder_activation_function (`str`, *isteğe bağlı*, varsayılan `"relu"`) : Dekoderdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Dize ise `"gelu"`, `"relu"`, `"silu"` ve `"gelu_new"` desteklenir.

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

num_denoising (`int`, *isteğe bağlı*, varsayılan 100) : Karşılaştırmalı gürültü azaltma için kullanılacak toplam gürültü azaltma görevi veya sorgu sayısı.

label_noise_ratio (`float`, *opsiyonel*, varsayılan 0.5) : Rastgele gürültü eklenmesi gereken gürültüden arındırma etiketlerinin oranı.

box_noise_scale (`float`, *isteğe bağlı*, varsayılan 1.0) : Sınır kutularına eklenecek gürültünün ölçeği veya büyüklüğü.

learn_initial_query (`bool`, *isteğe bağlı*, varsayılan `False`) : Eğitme sırasında decoder için başlangıç sorgu gömme değerlerinin öğrenilip öğrenilmeyeceğini belirtir

anchor_image_size (`tuple[int, int]`, *isteğe bağlı*) : Değerlendirme sırasında sınırlayıcı kutu çapaları oluşturmak için kullanılan girdi görüntüsünün yüksekliği ve genişliği. None ise, otomatik çapa üretimi uygulanır.

with_box_refine (`bool`, *isteğe bağlı*, varsayılan `True`) : İteratif sınırlayıcı kutu iyileştirmesinin uygulanıp uygulanmayacağını belirtir; bu yöntemde her decoder katmanı, sınırlayıcı kutuları önceki katmandan gelen tahminlere göre iyileştirir.

matcher_alpha (`float`, *opsiyonel*, varsayılan 0.25) : Hungarian Matcher tarafından kullanılan alpha parametresi.

matcher_gamma (`float`, *opsiyonel*, varsayılan 2.0) : Macar Eşleştirici tarafından kullanılan gamma parametresi.

matcher_class_cost (`float`, *opsiyonel*, varsayılan 2.0) : Hungarian Matcher tarafından kullanılan sınıf kaybının göreli ağırlığı.

matcher_bbox_cost (`float`, *opsiyonel*, varsayılan 5.0) : Hungarian Matcher tarafından kullanılan sınırlayıcı kutu kaybının göreli ağırlığı.

matcher_giou_cost (`float`, *opsiyonel*, varsayılan 2.0) : Hungarian Matcher tarafından kullanılan giou kaybının göreli ağırlığı.

use_focal_loss (`bool`, *isteğe bağlı*, varsayılan `True`) : Focal loss kullanılacaksa bilgilendiren parametre.

auxiliary_loss (`bool`, *isteğe bağlı*, varsayılan `True`) : Yardımcı çözümleme kayıplarının (her decoder katmanındaki kayıplar) kullanılıp kullanılmayacağı.

focal_loss_alpha (`float`, *opsiyonel*, varsayılan 0.75) : Focal loss hesaplamak için kullanılan alpha parametresi.

focal_loss_gamma (`float`, *isteğe bağlı*, varsayılan 2.0) : Focal loss hesaplamak için kullanılan gamma parametresi.

weight_loss_vfl (`float`, *isteğe bağlı*, varsayılan 1.0) : Nesne algılama kaybında varifocal kaybının göreli ağırlığı.

weight_loss_bbox (`float`, *opsiyonel*, varsayılan 5.0) : Nesne algılama kaybında L1 sınırlayıcı kutu kaybının göreli ağırlığı.

weight_loss_giou (`float`, *opsiyonel*, varsayılan 2.0) : Nesne algılama kaybında genelleştirilmiş IoU kaybının göreli ağırlığı.

weight_loss_fgl (`float`, *opsiyonel*, varsayılan 0.15) : Nesne algılama kaybında ince taneli konumlandırma kaybının göreli ağırlığı.

weight_loss_ddf (`float`, *opsiyonel*, varsayılan 1.5) : Nesne algılama kaybında ayrıştırılmış damıtma odaklı kaybın göreli ağırlığı.

eos_coefficient (`float`, *opsiyonel*, varsayılan `0.0001`) : Nesne algılama kaybında 'no-object' sınıfının göreli sınıflandırma ağırlığı.

eval_idx (`int`, *opsiyonel*, varsayılan -1) : Değerlendirme için kullanılacak decoder katmanının indeksi. Negatifse sondan sayılır (ör. -1, son katmanı kullanmak anlamına gelir). Bu, decoder yığınındaki sonraki katmanların eğitilmeye devam etmesine izin verirken erken tahmin yapılmasını sağlar.

layer_scale (`float`, *opsiyonel*, varsayılan `1.0`) : Sonraki decoder katmanlarında gizli boyut için ölçekleme faktörü. Değerlendirme katmanından sonra model kapasitesini ayarlamak için kullanılır.

max_num_bins (`int`, *isteğe bağlı*, varsayılan 32) : Dağılım yönlendirmeli sınırlayıcı kutu iyileştirmesi için maksimum kutu sayısı. Daha yüksek değerler daha ince taneli konumlandırma sağlar ancak hesaplama yükünü artırır.

reg_scale (`float`, *opsiyonel*, varsayılan 4.0) : Regresyon dağılımı için ölçekleme faktörü. Sınır kutusu (bounding box) iyileştirme sürecinin aralığını ve inceliğini kontrol eder.

depth_mult (`float`, *isteğe bağlı*, varsayılan 1.0) : RepNCSPELAN4 katmanlarındaki blok sayısının çarpanı. Modelin derinliğini ölçeklemek için mimarisini koruyarak kullanılır.

top_prob_values (`int`, *isteğe bağlı*, varsayılan 4) : Her köşenin dağılımından dikkate alınacak en yüksek olasılık değerlerinin sayısı.

lqe_hidden_dim (`int`, *isteğe bağlı*, varsayılan 64) : Konum Kalitesi Tahminleyici (LQE) ağı için gizli boyut boyutu.

lqe_layers (`int`, *isteğe bağlı*, varsayılan 2) : Konum Kalitesi Tahminleyici MLP'sindeki katman sayısı.

decoder_offset_scale (`float`, *opsiyonel*, varsayılan 0.5) : Deformable attention'da kullanılan offset ölçeği.

decoder_method (`str`, *isteğe bağlı*, varsayılan `"default"`) : Çözücü için kullanılacak yöntem: `"default"` veya `"discrete"`.

up (`float`, *isteğe bağlı*, varsayılan 0.5) : Ağırlıklandırma Fonksiyonu'nun üst sınırlarını kontrol eder.

tie_word_embeddings (`bool`, *isteğe bağlı*, varsayılan `True`) : Ağırlık gömme bağlamalarının, modelin `tied_weights_keys` eşlemesine göre yapılıp yapılmayacağını belirtir.

Bu, bir DFineModel'in yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir D Fine modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılanlarla bir yapılandırma örneği oluşturmak, [ustc-community/dfine-xlarge-coco](https://huggingface.co/ustc-community/dfine-xlarge-coco) modelinin yapılandırmasına benzer bir yapılandırma üretir.

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.

## DFineModel[[transformers.DFineModel]]

#### transformers.DFineModel[[transformers.DFineModel]]

```python
transformers.DFineModel(config: DFineConfig)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/d_fine/modeling_d_fine.py#L1540)

**Parametreler:**

config ([DFineConfig](/docs/transformers/main/tr/model_doc/d_fine#transformers.DFineConfig)) : 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.

RT-DETR Model (bir omurga ve kodlayıcı-çözücüden oluşan) üzerinde herhangi bir başlık olmadan ham gizli durumlar üreten.

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.DFineModel.forward]]

```python
forward(pixel_values: Tensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: list[dict] | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/d_fine/modeling_d_fine.py#L1666)

**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 `image_processor_class` kullanılarak elde edilebilir. Ayrıntılar için `image_processor_class.__call__` bölümüne bakın (`processor_class`, görüntüleri işlemek için `image_processor_class` kullanır).

pixel_mask (`torch.LongTensor`, şekli `(batch_size, height, width)`, *isteğe bağlı*) : Dolgu piksel değerleri üzerinde dikkat işleminin uygulanmasını önlemek için maske. `[0, 1]` aralığında seçilen maske değerleri:  - Gerçek (yani **maskelenmemiş**) pikseller için 1, - Dolgu (yani **maskelenmiş**) pikseller için 0.  [Dikkat maskeleri nelerdir?](../glossary#attention-mask)

encoder_outputs (`torch.Tensor`, *isteğe bağlı*) : (`last_hidden_state`, *isteğe bağlı*: `hidden_states`, *isteğe bağlı*: `attentions`) `last_hidden_state` boyutu `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) kodlayıcının son katmanının çıktısındaki gizli durumlar dizisidir. Çözücüdeki çapraz dikkat (cross-attention) işleminde kullanılır.

inputs_embeds (`torch.Tensor`, şekli `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) : Düzleştirilmiş özellik haritasını (backbone + projeksiyon katmanının çıktısı) iletmek yerine, bir görüntünün düzleştirilmiş temsilini doğrudan iletme seçeneğine sahipsiniz.

labels (`list[Dict]`, len `(batch_size,)`, *isteğe bağlı*) : İkili eşleştirme kaybını hesaplamak için etiketler. Sözlüklerden oluşan liste, her sözlük en azından şu 2 anahtarı içerir: 'class_labels' ve 'boxes' (sırasıyla bir batch içindeki bir görüntünün sınıf etiketleri ve sınırlayıcı kutuları). Sınıf etiketlerinin kendisi, len `(number of bounding boxes in the image,)` olan bir `torch.LongTensor` ve kutuların şekli `(number of bounding boxes in the image, 4)` olan bir `torch.Tensor` olmalıdır.

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

Yapılandırmaya (`None`) ve girdilere bağlı olarak çeşitli öğelerden oluşan, `DFineModelOutput` veya bir `torch.Tensor` demeti (`return_dict=False` geçirildiğinde veya `config.return_dict=False` olduğunda).

[DFineModel](/docs/transformers/main/tr/model_doc/d_fine#transformers.DFineModel) 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.

- **last_hidden_state** (`torch.Tensor`, şekli `(batch_size, num_queries, hidden_size)`) -- Modelin decoder'ının son katmanının çıktısındaki gizli durumlar dizisi.
- **intermediate_hidden_states** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- Yığılmış ara gizli durumlar (decoder'ın her katmanının çıktısı).
- **intermediate_logits** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, sequence_length, config.num_labels)`) -- Yığılmış ara logits (decoder'ın her katmanının logits'i).
- **intermediate_reference_points** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, 4)`) -- Yığılmış ara referans noktaları (decoder'ın her katmanının referans noktaları).
- **intermediate_predicted_corners** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, 4)`) -- Yığılmış ara tahmini köşeler (decoder'ın her katmanının tahmini köşeleri).
- **initial_reference_points** (`torch.Tensor`, şekli `(batch_size, num_queries, 4)`) -- İlk decoder katmanı için kullanılan başlangıç referans noktaları.
- **decoder_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` (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren bir tuple, şekli `(batch_size, sequence_length, hidden_size)`.

  Her katmanın çıktısında ve başlangıç gömme çıktılarında dekodlayıcının gizli durumları.
- **decoder_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `torch.Tensor` (her katman için bir tane) içeren bir tuple, şekli `(batch_size, num_heads, sequence_length, sequence_length)`.

  Dikkat yumuşatma (attention softmax) sonrasında, öz-dikkat (self-attention) kafalarında ağırlıklı ortalamanın hesaplanmasında kullanılan çözücü (decoder) dikkat ağırlıkları.
- **cross_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `(batch_size, num_heads, sequence_length, sequence_length)` biçiminde, her katman için bir adet içeren `torch.Tensor` demeti.

  Dekoderin çapraz dikkat katmanının dikkat ağırlıkları, dikkat softmax'ından sonra, çapraz dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.
- **encoder_last_hidden_state** (`torch.Tensor`, şekli `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) -- Modelin kodlayıcısının son katmanının çıktısındaki gizli durumlar dizisi.
- **encoder_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` (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren bir tuple, şekli `(batch_size, sequence_length, hidden_size)`.

  Her katmanın çıktısında ve başlangıç gömme çıktılarında kodlayıcının gizli durumları.
- **encoder_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `torch.Tensor` (her katman için bir tane) içeren bir tuple, şekli `(batch_size, num_heads, sequence_length, sequence_length)`.

  Dikkat yumuşatma (attention softmax) sonrasında, öz-dikkat (self-attention) kafalarında ağırlıklı ortalamanın hesaplanmasında kullanılan kodlayıcının dikkat ağırlıkları.
- **init_reference_points** (`torch.Tensor`, şekli `(batch_size, num_queries, 4)`) -- Transformer decoder üzerinden gönderilen başlangıç referans noktaları.
- **enc_topk_logits** (`torch.Tensor`, şekli `(batch_size, sequence_length, config.num_labels)`) -- Kodlayıcı aşamasında bölge önerileri olarak seçilen, en yüksek `config.two_stage_num_proposals` puanlı sınırlayıcı kutuların tahmini sınırlayıcı kutu puanları. Sınırlayıcı kutu ikili sınıflandırmasının (yani ön plan ve arka plan) çıktısı.
- **enc_topk_bboxes** (`torch.Tensor`, şekli `(batch_size, sequence_length, 4)`) -- Kodlayıcı aşamasında tahmin edilen sınırlayıcı kutu koordinatlarının logitleri.
- **enc_outputs_class** (`torch.Tensor`, şekli `(batch_size, sequence_length, config.num_labels)`, *opsiyonel*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- İlk aşamada en yüksek `config.two_stage_num_proposals` puanlı sınırlayıcı kutuların bölge önerileri olarak seçildiği, tahmini sınırlayıcı kutu puanları. Sınırlayıcı kutu ikili sınıflandırmasının (yani ön plan ve arka plan) çıktısı.
- **enc_outputs_coord_logits** (`torch.Tensor`, şekli `(batch_size, sequence_length, 4)`, *opsiyonel*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- Birinci aşamada tahmin edilen sınırlayıcı kutu koordinatlarının logitleri.
- **denoising_meta_values** (`dict`, *isteğe bağlı*) -- Gürültü azaltma ile ilgili değerler için ek sözlük.

Örnekler:

```python
>>> from transformers import AutoImageProcessor, DFineModel
>>> from PIL import Image
>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> image_processor = AutoImageProcessor.from_pretrained("PekingU/DFine_r50vd")
>>> model = DFineModel.from_pretrained("PekingU/DFine_r50vd")

>>> inputs = image_processor(images=image, return_tensors="pt")

>>> outputs = model(**inputs)

>>> last_hidden_states = outputs.last_hidden_state
>>> list(last_hidden_states.shape)
[1, 300, 256]
```

## DFineForObjectDetection[[transformers.DFineForObjectDetection]]

#### transformers.DFineForObjectDetection[[transformers.DFineForObjectDetection]]

```python
transformers.DFineForObjectDetection(config: DFineConfig)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/d_fine/modeling_d_fine.py#L1950)

**Parametreler:**

config ([DFineConfig](/docs/transformers/main/tr/model_doc/d_fine#transformers.DFineConfig)) : 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.

RT-DETR Model (bir omurga ve kodlayıcı-çözücüden oluşan) sınırlayıcı kutuları ve daha sonra puanlara ve sınıflara çözümlenecek logitleri üreten.

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.DFineForObjectDetection.forward]]

```python
forward(pixel_values: Tensor, pixel_mask: typing.Optional[torch.LongTensor] = None, encoder_outputs: typing.Optional[torch.Tensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: list[dict] | None = None, **kwargs: *<class 'transformers.utils.generic.TransformersKwargs'>)
```

[Kaynak](https://github.com/huggingface/transformers/blob/main/src/transformers/models/d_fine/modeling_d_fine.py#L1989)

**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 `image_processor_class` kullanılarak elde edilebilir. Ayrıntılar için `image_processor_class.__call__` bölümüne bakın (`processor_class`, görüntüleri işlemek için `image_processor_class` kullanır).

pixel_mask (`torch.LongTensor`, şekli `(batch_size, height, width)`, *isteğe bağlı*) : Dolgu piksel değerleri üzerinde dikkat işleminin uygulanmasını önlemek için maske. `[0, 1]` aralığında seçilen maske değerleri:  - Gerçek (yani **maskelenmemiş**) pikseller için 1, - Dolgu (yani **maskelenmiş**) pikseller için 0.  [Dikkat maskeleri nelerdir?](../glossary#attention-mask)

encoder_outputs (`torch.Tensor`, *isteğe bağlı*) : (`last_hidden_state`, *isteğe bağlı*: `hidden_states`, *isteğe bağlı*: `attentions`) `last_hidden_state` boyutu `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) kodlayıcının son katmanının çıktısındaki gizli durumlar dizisidir. Çözücüdeki çapraz dikkat (cross-attention) işleminde kullanılır.

inputs_embeds (`torch.Tensor`, şekli `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) : `input_ids` parametresini iletmek yerine, gömülü bir temsil doğrudan iletmeyi tercih edebilirsiniz. Bu, `input_ids` indekslerini ilgili vektörlere dönüştürme biçimi üzerinde modelin dahili gömme arama matrisine kıyasla daha fazla kontrol sahibi olmak istiyorsanız faydalıdır.

labels (`list[Dict]`, len `(batch_size,)`, *isteğe bağlı*) : İkili eşleştirme kaybını hesaplamak için etiketler. Sözlüklerden oluşan liste, her sözlük en azından şu 2 anahtarı içerir: 'class_labels' ve 'boxes' (sırasıyla bir batch içindeki bir görüntünün sınıf etiketleri ve sınırlayıcı kutuları). Sınıf etiketlerinin kendisi, len `(number of bounding boxes in the image,)` olan bir `torch.LongTensor` ve kutuların şekli `(number of bounding boxes in the image, 4)` olan bir `torch.Tensor` olmalıdır.

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

`DFineObjectDetectionOutput` veya bir `torch.Tensor` demeti (eğer `return_dict=False` geçirildiyse veya `config.return_dict=False` ise), yapılandırmaya (`None`) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

[DFineForObjectDetection](/docs/transformers/main/tr/model_doc/d_fine#transformers.DFineForObjectDetection) ileri yöntemi, `__call__` özel yöntemini 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`, şekli `(1,)`, *isteğe bağlı*, `labels` sağlandığında döndürülür)) -- Sınıf tahmini için negatif log-olabilirlik (çapraz entropi) ile sınırlayıcı kutu kaybının doğrusal bir kombinasyonu olarak toplam kayıp. İkincisi, L1 kaybı ve genelleştirilmiş ölçekten bağımsız IoU kaybının doğrusal bir kombinasyonu olarak tanımlanır.
- **loss_dict** (`Dict`, *isteğe bağlı*) -- Bireysel kayıpları içeren bir sözlük. Kayıt tutma için faydalıdır.
- **logits** (`torch.Tensor`, şekli `(batch_size, num_queries, num_classes + 1)`) -- Tüm sorgular için sınıflandırma logitleri (no-object dahil).
- **pred_boxes** (`torch.Tensor`, şekli `(batch_size, num_queries, 4)`) -- Tüm sorgular için normalize edilmiş kutu koordinatları, (center_x, center_y, width, height) olarak temsil edilir. Bu değerler, [0, 1] aralığında normalize edilmiştir ve parti içindeki her bir görüntünün boyutuna göre (olası dolguları göz ardı ederek) göreli olarak tanımlanır. Normalize edilmemiş (mutlak) sınırlayıcı kutuları almak için `~DFineImageProcessor.post_process_object_detection` işlevini kullanabilirsiniz.
- **auxiliary_outputs** (`list[Dict]`, *isteğe bağlı*) -- İsteğe bağlı, yalnızca yardımcı kayıplar etkinleştirildiğinde (yani `config.auxiliary_loss` `True` olarak ayarlandığında) ve etiketler sağlandığında döndürülür. Her kodlayıcı katmanı için yukarıdaki iki anahtarı (`logits` ve `pred_boxes`) içeren sözlüklerden oluşan bir listedir.
- **last_hidden_state** (`torch.Tensor`, şekli `(batch_size, num_queries, hidden_size)`) -- Modelin decoder'ının son katmanının çıktısındaki gizli durumlar dizisi.
- **intermediate_hidden_states** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, hidden_size)`) -- Yığılmış ara gizli durumlar (decoder'ın her katmanının çıktısı).
- **intermediate_logits** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, config.num_labels)`) -- Yığılmış ara logits (decoder'ın her katmanının logits'i).
- **intermediate_reference_points** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, 4)`) -- Yığılmış ara referans noktaları (decoder'ın her katmanının referans noktaları).
- **intermediate_predicted_corners** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, 4)`) -- Yığılmış ara tahmini köşeler (decoder'ın her katmanının tahmini köşeleri).
- **initial_reference_points** (`torch.Tensor`, şekli `(batch_size, config.decoder_layers, num_queries, 4)`) -- Yığılmış başlangıç referans noktaları (decoder'ın her katmanının başlangıç referans noktaları).
- **decoder_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` (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren bir tuple, şekli `(batch_size, sequence_length, hidden_size)`.

  Her katmanın çıktısında ve başlangıç gömme çıktılarında dekodlayıcının gizli durumları.
- **decoder_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `torch.Tensor` (her katman için bir tane) içeren bir tuple, şekli `(batch_size, num_heads, sequence_length, sequence_length)`.

  Dikkat yumuşatma (attention softmax) sonrasında, öz-dikkat (self-attention) kafalarında ağırlıklı ortalamanın hesaplanmasında kullanılan çözücü (decoder) dikkat ağırlıkları.
- **cross_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `(batch_size, num_heads, sequence_length, sequence_length)` biçiminde, her katman için bir adet içeren `torch.Tensor` demeti.

  Dekoderin çapraz dikkat katmanının dikkat ağırlıkları, dikkat softmax'ından sonra, çapraz dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.
- **encoder_last_hidden_state** (`torch.Tensor`, şekli `(batch_size, sequence_length, hidden_size)`, *isteğe bağlı*) -- Modelin kodlayıcısının son katmanının çıktısındaki gizli durumlar dizisi.
- **encoder_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` (modelin bir gömme katmanı varsa gömme katmanının çıktısı için bir tane + her katmanın çıktısı için bir tane) içeren bir tuple, şekli `(batch_size, sequence_length, hidden_size)`.

  Her katmanın çıktısında ve başlangıç gömme çıktılarında kodlayıcının gizli durumları.
- **encoder_attentions** (`tuple[torch.Tensor]`, *isteğe bağlı*, `output_attentions=True` geçirildiğinde veya `config.output_attentions=True` olduğunda döndürülür) -- `torch.Tensor` (her katman için bir tane) içeren bir tuple, şekli `(batch_size, num_heads, sequence_length, sequence_length)`.

  Dikkat yumuşatma (attention softmax) sonrasında, öz-dikkat (self-attention) kafalarında ağırlıklı ortalamanın hesaplanmasında kullanılan kodlayıcının dikkat ağırlıkları.
- **init_reference_points** (`torch.Tensor`, şekli  `(batch_size, num_queries, 4)`) -- Transformer decoder üzerinden gönderilen başlangıç referans noktaları.
- **enc_topk_logits** (`torch.Tensor`, şekli `(batch_size, sequence_length, config.num_labels)`, *isteğe bağlı*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- Kodlayıcıda tahmin edilen sınırlayıcı kutu koordinatlarının logitleri.
- **enc_topk_bboxes** (`torch.Tensor`, şekli `(batch_size, sequence_length, 4)`, *isteğe bağlı*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- Kodlayıcıda tahmin edilen sınırlayıcı kutu koordinatlarının logitleri.
- **enc_outputs_class** (`torch.Tensor`, şekli `(batch_size, sequence_length, config.num_labels)`, *opsiyonel*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- İlk aşamada en yüksek `config.two_stage_num_proposals` puanlı sınırlayıcı kutuların bölge önerileri olarak seçildiği, tahmini sınırlayıcı kutu puanları. Sınırlayıcı kutu ikili sınıflandırmasının (yani ön plan ve arka plan) çıktısı.
- **enc_outputs_coord_logits** (`torch.Tensor`, şekli `(batch_size, sequence_length, 4)`, *opsiyonel*, `config.with_box_refine=True` ve `config.two_stage=True` olduğunda döndürülür) -- Birinci aşamada tahmin edilen sınırlayıcı kutu koordinatlarının logitleri.
- **denoising_meta_values** (`dict`, *isteğe bağlı*) -- Gürültü azaltma ile ilgili değerler için ek sözlük

Örnek:

```python
>>> import torch
>>> from transformers.image_utils import load_image
>>> from transformers import AutoImageProcessor, DFineForObjectDetection

>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = load_image(url)

>>> image_processor = AutoImageProcessor.from_pretrained("ustc-community/dfine-xlarge-coco")
>>> model = DFineForObjectDetection.from_pretrained("ustc-community/dfine-xlarge-coco")

>>> # prepare image for the model
>>> inputs = image_processor(images=image, return_tensors="pt")

>>> # forward pass
>>> outputs = model(**inputs)

>>> logits = outputs.logits
>>> list(logits.shape)
[1, 300, 80]

>>> boxes = outputs.pred_boxes
>>> list(boxes.shape)
[1, 300, 4]

>>> # convert outputs (bounding boxes and class logits) to Pascal VOC format (xmin, ymin, xmax, ymax)
>>> target_sizes = torch.tensor([image.size[::-1]])
>>> results = image_processor.post_process_object_detection(outputs, threshold=0.9, target_sizes=target_sizes)
>>> result = results[0]  # first image in batch

>>> for score, label, box in zip(result["scores"], result["labels"], result["boxes"]):
...     box = [round(i, 2) for i in box.tolist()]
...     print(
...         f"Detected {model.config.id2label[label.item()]} with confidence "
...         f"{round(score.item(), 3)} at location {box}"
...     )
Detected cat with confidence 0.958 at location [344.49, 23.4, 639.84, 374.27]
Detected cat with confidence 0.956 at location [11.71, 53.52, 316.64, 472.33]
Detected remote with confidence 0.947 at location [40.46, 73.7, 175.62, 117.57]
Detected sofa with confidence 0.918 at location [0.59, 1.88, 640.25, 474.74]
```

