Transformers documentation
Dilated Neighborhood Attention Transformer
Bu model 2022-09-29 tarihinde HF papers'ta yayımlandı ve 2022-11-18 tarihinde Hugging Face Transformers'a katkıda bulunuldu.
Dilated Neighborhood Attention Transformer
Genel Bakış
DiNAT, Ali Hassani ve Humphrey Shi tarafından Dilated Neighborhood Attention Transformer makalesinde önerilmiştir.
NAT yapısını, global bağlamı yakalamak için Dilated Neighborhood Attention desenini ekleyerek genişletir ve bu yapıya kıyasla belirgin performans iyileştirmeleri gösterir.
Makalenin özeti aşağıdaki gibidir:
Transformers, modallıklar, alanlar ve görevler arasında derin öğrenme mimarileri arasında en yaygın kullanılanlardan biri haline gelmektedir. Görü alanında, düz transformer'lara yönelik devam eden çalışmaların yanı sıra, hiyerarşik transformer'lar da mevcut çerçevelere kolay entegrasyonları ve performansları sayesinde önemli bir ilgi görmüştür. Bu modeller genellikle kayan pencere Neighborhood Attention (NA) veya Swin Transformer'ın Shifted Window Self Attention gibi yerel dikkat mekanizmaları kullanır. Kendi kendine dikkatin (self attention) karesel karmaşıklığını azaltmada etkili olsalar da, yerel dikkat, kendi kendine dikkatin en arzu edilen iki özelliğini zayıflatır: uzun menzilli bağımlılık modellemesi ve küresel algılama alanı. Bu makalede, ek bir maliyet olmadan daha küresel bir bağlamı yakalayabilen ve algılama alanlarını üstel olarak genişletebilen, NA'nın doğal, esnek ve verimli bir uzantısı olan Dilated Neighborhood Attention (DiNA)'yi tanıtıyoruz. NA'nın yerel dikkati ile DiNA'nın seyrek küresel dikkati birbirini tamamladığından, her ikisinin üzerine inşa edilmiş yeni bir hiyerarşik görü transformer'ı olan Dilated Neighborhood Attention Transformer (DiNAT)'ı tanıtıyoruz. DiNAT varyantları, NAT, Swin ve ConvNeXt gibi güçlü baz çizgilerine kıyasla önemli iyileştirmeler sunmaktadır. Büyük modelimiz, COCO nesne tespitinde Swin muadilinden 1.5% box AP, COCO örnek segmentasyonunda 1.3% mask AP ve ADE20K semantik segmentasyonunda 1.1% mIoU daha hızlı ve öndedir. Yeni çerçevelerle eşleştirildiğinde, büyük varyantımız COCO (58.2 PQ) ve ADE20K (48.5 PQ) üzerinde yeni en iyi panoptik segmentasyon modeli ve Cityscapes (44.5 AP) ve ADE20K (35.4 AP) üzerinde örnek segmentasyon modelidir (ek veri yok). Ayrıca ADE20K (58.2 mIoU) üzerinde en iyi semantik segmentasyon modelleriyle eşleşmekte ve Cityscapes'te (84.5 mIoU) ikinci sırada yer almaktadır (ek veri yok).
Neighborhood Attention with different dilation values.
Taken from the original paper. Bu model Ali Hassani tarafından katkıda bulunmuştur. Orijinal kod burada bulunabilir.
Kullanım ipuçları
DiNAT bir backbone olarak kullanılabilir. output_hidden_states = True olduğunda, hem hidden_states hem de reshaped_hidden_states çıktısı verir. reshaped_hidden_states'in şekli (batch_size, height, width, num_channels) yerine (batch, num_channels, height, width)'dir.
Notlar:
- DiNAT, NATTEN tarafından sağlanan Neighborhood Attention ve Dilated Neighborhood Attention uygulamalarına bağımlıdır.
Linux için önceden derlenmiş tekerlekleri (wheels) kullanarak shi-labs.com/natten adresine başvurarak veya
pip install nattenkomutunu çalıştırarak sisteminizde derleyerek yükleyebilirsiniz. İkinci seçeneğin derlenmesinin zaman alabileceğini unutmayın. NATTEN henüz Windows cihazlarını desteklememektedir. - Şu anda yalnızca 4 olan yama boyutu desteklenmektedir.
Kaynaklar
DiNAT ile başlamanıza yardımcı olmak için resmi Hugging Face ve topluluk (🌎 ile belirtilen) kaynaklarının listesi.
- Bu defter DinatForImageClassification sınıfını destekler.
- Bkz: Görsel sınıflandırma görevi kılavuzu
Buraya bir kaynak eklemek isterseniz, bir Pull Request açmaktan çekinmeyin; inceleyeceğiz! Kaynağın, mevcut bir kaynağı tekrarlamak yerine ideal olarak yeni bir şeyi göstermesi beklenir.
DinatConfig
sınıf transformers.DinatConfig
< 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 = Nonepatch_size: int | list[int] | tuple[int, int] = 4num_channels: int = 3embed_dim: int = 64depths: list[int] | tuple[int, ...] = (3, 4, 6, 5)num_heads: list[int] | tuple[int, ...] = (2, 4, 8, 16)kernel_size: int = 7dilations: list | tuple | None = Nonemlp_ratio: float = 3.0qkv_bias: bool = Truehidden_dropout_prob: float | int = 0.0attention_probs_dropout_prob: float | int = 0.0drop_path_rate: float | int = 0.1hidden_act: str = 'gelu'initializer_range: float = 0.02layer_norm_eps: float = 1e-05layer_scale_init_value: float = 0.0_out_features: list[str] | None = None_out_indices: list[int] | None = None )
Parametreler
- patch_size (
Union[int, list[int], tuple[int, int]], isteğe bağlı, varsayılan4) — Her yamanın boyutu (çözünürlüğü). - num_channels (
int, isteğe bağlı, varsayılan3) — Giriş kanal sayısı. - embed_dim (
int, isteğe bağlı, varsayılan64) — Gömme ve gizli durumların boyutluluğu. - depths (
Union[list[int], tuple[int, ...]], isteğe bağlı, varsayılan(3, 4, 6, 5)) — Transformer'daki her katmanın derinliği. - num_heads (
Union[list[int], tuple[int, ...]], isteğe bağlı, varsayılan(2, 4, 8, 16)) — Transformer çözücüdeki her dikkat katmanı için dikkat başlığı sayısı. - kernel_size (
int, isteğe bağlı, varsayılan7) — Konvolüsyon çekirdeğinin boyutu. - dilations (
list[list[int]], isteğe bağlı, varsayılan[[1, 8, 1], [1, 4, 1, 4], [1, 2, 1, 2, 1, 2], [1, 1, 1, 1, 1]]) — Transformer kodlayıcısındaki her NA katmanının genişletme (dilation) değeri. - mlp_ratio (
float, isteğe bağlı, varsayılan3.0) — MLP gizli boyutunun gömme boyutuna oranı. - qkv_bias (
bool, isteğe bağlı, varsayılanTrue) — Sorgulara, anahtarlara ve değerlere bir sapma eklenip eklenmeyeceği. - hidden_dropout_prob (
Union[float, int], isteğe bağlı, varsayılan0.0) — Gömme, kodlayıcı ve havuzlayıcıdaki tüm tam bağlı katmanlar için dropout olasılığı. - attention_probs_dropout_prob (
Union[float, int], isteğe bağlı, varsayılan0.0) — Dikkat olasılıkları için dropout oranı. - drop_path_rate (
Union[float, int], isteğe bağlı, varsayılan0.1) — Patch füzyonu için drop path oranı. - hidden_act (
str, isteğe bağlı, varsayılangelu) — Çözücüdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin,"gelu","relu","silu"vb. - initializer_range (
float, isteğe bağlı, varsayılan0.02) — Tüm ağırlık matrislerini başlatmak için kullanılan truncated_normal_initializer'ın standart sapması. - layer_norm_eps (
float, isteğe bağlı, varsayılan1e-05) — Katman normalizasyon katmanları tarafından kullanılan epsilon. - layer_scale_init_value (
float, isteğe bağlı, varsayılan0.0) — Öz-dikkat katmanlarında kullanılacak ölçek. Baz modeller için 0.1, büyük modeller için 1e-6. Katman ölçeklemeyi devre dışı bırakmak için 0 olarak ayarlayın.
Bu, bir DinatModel'in yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Dinat modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneği oluşturmak, shi-labs/dinat-mini-in1k-224 modelinin yapılandırmasına benzer bir yapılandırma elde edilmesini sağlar.
Yapılandırma nesneleri PreTrainedConfig sınıfından devralır ve model çıktılarını kontrol etmek için kullanılabilir. Daha fazla bilgi için PreTrainedConfig belgesini okuyun.
Örnek:
>>> from transformers import DinatConfig, DinatModel
>>> # Initializing a Dinat shi-labs/dinat-mini-in1k-224 style configuration
>>> configuration = DinatConfig()
>>> # Initializing a model (with random weights) from the shi-labs/dinat-mini-in1k-224 style configuration
>>> model = DinatModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDinatModel
sınıf transformers.DinatModel
< source >( config: DinatConfigadd_pooling_layer = True )
Parametreler
- config (DinatConfig) — 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() yöntemine bakın.
- add_pooling_layer (
bool, isteğe bağlı, varsayılanTrue) — Bir havuzlama katmanı eklenip eklenmeyeceği
Üzerinde herhangi bir özel head olmadan ham hidden-state çıktısı üreten çıplak Dinat Model.
Bu model 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 boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.
Bu model aynı zamanda bir PyTorch 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
< source >( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DinatModelOutput or tuple(torch.Tensor)
Parametreler
- pixel_values (
torch.Tensor, şekli(batch_size, num_channels, image_size, image_size), isteğe bağlı) — Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri ViTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için ViTImageProcessor.call() bölümüne bakın (processor_class, görüntü işleme için ViTImageProcessor kullanır). - output_attentions (
bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındakiattentionsbölümüne bakın. - output_hidden_states (
bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındakihidden_statesbölümüne bakın. - return_dict (
bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?
Dönüş değeri
DinatModelOutput veya tuple(torch.Tensor)
DinatModelOutput veya bir torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (DinatConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.
DinatModel 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ü önceki, ö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, sequence_length, hidden_size), isteğe bağlı) — Modelin son katmanının çıktısındaki gizli durumlar dizisi.pooler_output (
torch.Tensor, şekli(batch_size, hidden_size), isteğe bağlı,add_pooling_layer=Truegeçirildiğinde döndürülür) — Son katman gizli durumunun ortalama havuzlaması.hidden_states (
tuple[torch.Tensor, ...], isteğe bağlı,output_hidden_states=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğ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 birer tane) içeren,(batch_size, sequence_length, hidden_size)biçiminde bir demet.Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.
attentions (
tuple[torch.Tensor, ...], isteğe bağlı,output_attentions=Truegeçirildiğinde veyaconfig.output_attentions=Trueolduğunda döndürülür) —(batch_size, num_heads, sequence_length, sequence_length)biçiminde, her katman için bir adet içerentorch.Tensordemeti.Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.
reshaped_hidden_states (
tuple(torch.Tensor), isteğe bağlı,output_hidden_states=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğ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 bir tuple, şekli(batch_size, hidden_size, height, width).Her katmanın çıktısında modelin gizli durumları ile uzamsal boyutları içerecek şekilde yeniden şekillendirilmiş başlangıç gömme çıktıları.
DinatForImageClassification
sınıf transformers.DinatForImageClassification
< source >( config: DinatConfig )
Parametreler
- config (DinatConfig) — 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() yöntemine bakın.
Dinat Model, [CLS] token'inin son gizli durumunun üzerine yerleştirilen doğrusal bir katman olan bir görüntü sınıflandırma başlığına sahip bir transformer'dır; örneğin ImageNet için.
Bu model 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 boyutlandırma, başları budama vb.) için üst sınıf belgelendirmesine bakın.
Bu model aynı zamanda bir PyTorch 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
< source >( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.LongTensor] = Noneoutput_attentions: bool | None = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → DinatImageClassifierOutput or tuple(torch.Tensor)
Parametreler
- pixel_values (
torch.Tensor, şekli(batch_size, num_channels, image_size, image_size), isteğe bağlı) — Girdi görüntülerine karşılık gelen tensörler. Piksel değerleri ViTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için ViTImageProcessor.call() bölümüne bakın (processor_class, görüntü işleme için ViTImageProcessor kullanır). - labels (
torch.LongTensor, şekli(batch_size,), isteğe bağlı) — Görüntü sınıflandırma/geri dönüşüm kaybını hesaplamak için etiketler. Endeksler[0, ..., config.num_labels - 1]aralığında olmalıdır.config.num_labels == 1ise bir geri dönüşüm kaybı (Ortalama Kare kaybı) hesaplanır,config.num_labels > 1ise bir sınıflandırma kaybı (Çapraz Entropi) hesaplanır. - output_attentions (
bool, isteğe bağlı) — Tüm dikkat katmanlarının dikkat tensörlerinin döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındakiattentionsbölümüne bakın. - output_hidden_states (
bool, isteğe bağlı) — Tüm katmanların gizli durumlarının (hidden states) döndürülüp döndürülmeyeceğini belirtir. Daha fazla ayrıntı için döndürülen tensörler altındakihidden_statesbölümüne bakın. - return_dict (
bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?
Dönüş değeri
DinatImageClassifierOutput veya tuple(torch.Tensor)
DinatImageClassifierOutput veya bir torch.Tensor demeti (eğer return_dict=False geçirildiyse veya config.return_dict=False ise), yapılandırmaya (DinatConfig) ve girdilere bağlı olarak çeşitli öğelerden oluşur.
DinatForImageClassification 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ü önceki, ö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ı,labelssağlandığında döndürülür) — Sınıflandırma (config.num_labels==1 ise regresyon) kaybı.logits (
torch.Tensor, şekli(batch_size, config.num_labels)) — Sınıflandırma (veya config.num_labels==1 ise regresyon) puanları (SoftMax öncesi).hidden_states (
tuple[torch.Tensor, ...], isteğe bağlı,output_hidden_states=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğ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 birer tane) içeren,(batch_size, sequence_length, hidden_size)biçiminde bir demet.Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.
attentions (
tuple[torch.Tensor, ...], isteğe bağlı,output_attentions=Truegeçirildiğinde veyaconfig.output_attentions=Trueolduğunda döndürülür) —(batch_size, num_heads, sequence_length, sequence_length)biçiminde, her katman için bir adet içerentorch.Tensordemeti.Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.
reshaped_hidden_states (
tuple(torch.Tensor), isteğe bağlı,output_hidden_states=Truegeçirildiğinde veyaconfig.output_hidden_states=Trueolduğ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 bir tuple, şekli(batch_size, hidden_size, height, width).Her katmanın çıktısında modelin gizli durumları ile uzamsal boyutları içerecek şekilde yeniden şekillendirilmiş başlangıç gömme çıktıları.
Örnek:
>>> from transformers import AutoImageProcessor, DinatForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("shi-labs/dinat-mini-in1k-224")
>>> model = DinatForImageClassification.from_pretrained("shi-labs/dinat-mini-in1k-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...