Transformers documentation

MobileViTV2

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Bu model 2022-06-06 tarihinde HF papers'ta yayımlanmış ve 2023-06-02 tarihinde Hugging Face Transformers'a katkıda bulunmuştur.

MobileViTV2

Genel Bakış

MobileViTV2 modeli, Sachin Mehta ve Mohammad Rastegari tarafından Separable Self-attention for Mobile Vision Transformers makalesinde önerilmiştir.

MobileViTV2, MobileViT'nin ikinci sürümüdür ve MobileViT'teki çok başlı öz-dikkat (multi-headed self-attention) mekanizmasının ayrılabilir öz-dikkat (separable self-attention) ile değiştirilmesiyle oluşturulmuştur.

Makalenin özeti aşağıdaki gibidir:

Mobile vision transformer'lar (MobileViT), sınıflandırma ve algılama dahil olmak üzere çeşitli mobil görü görevlerinde en iyi performansı elde edebilir. Bu modellerin parametre sayısı daha az olmakla birlikte, konvolüsyonel sinir ağı tabanlı modellere kıyasla gecikmeleri yüksektir. MobileViT'teki ana verimlilik darboğazı, transformer'lardaki çok başlı öz-dikkat (MHA)'tir; bu mekanizma, token (veya yama) sayısı k'ya göre O(k2) zaman karmaşıklığı gerektirir. Ayrıca MHA, öz-dikkat hesaplaması için maliyetli işlemler (örneğin, batch bazlı matris çarpımı) gerektirir ve bu da kaynak kısıtlı cihazlarda gecikmeyi olumsuz etkiler. Bu makale, doğrusal karmaşıklığa (yani O(k)) sahip ayrılabilir bir öz-dikkat yöntemi tanıtır. Önerilen yöntemin basit ve etkili bir özelliği, öz-dikkat hesaplamasında eleman bazlı işlemler kullanmasıdır; bu da onu kaynak kısıtlı cihazlar için iyi bir seçim haline getirir. İyileştirilmiş model olan MobileViTV2, ImageNet nesne sınıflandırması ve MS-COCO nesne algılama dahil olmak üzere çeşitli mobil görü görevlerinde en iyi performansı sergiler. Yaklaşık üç milyon parametreye sahip olan MobileViTV2, ImageNet veri setinde %75,6'lık bir top-1 doğruluğa ulaşır; mobil bir cihazda MobileViT'ten yaklaşık %1 daha iyi performans gösterirken 3,2× daha hızlı çalışır.

Bu model shehan97 tarafından katkıda bulunmuştur. Orijinal kod burada bulunabilir.

Kullanım ipuçları

  • MobileViTV2 bir Transformer modelinden çok bir CNN gibidir. Sıralı verilerle değil, görüntü topluluklarıyla çalışır. ViT'nin aksine gömme (embedding) yoktur. Omurga (backbone) modeli bir özellik haritası (feature map) üretir.
  • Görselleri model için hazırlamak için MobileViTImageProcessor kullanılabilir. Kendi ön işlemenizi yapıyorsanız, önceden eğitilmiş kontrol noktalarının görsellerin BGR piksel sırasınd (RGB değil) olmasını beklediğini unutmayın.
  • Kullanılabilir görüntü sınıflandırma denetim noktaları, ImageNet-1k üzerinde (aynı zamanda ILSVRC 2012 olarak da anılan, 1,3 milyon görüntü ve 1.000 sınıf içeren bir koleksiyon) önceden eğitilmiştir.
  • Segmentasyon modeli DeepLabV3 başlığı kullanır. Kullanılabilir anlamsal segmentasyon kontrol noktaları PASCAL VOC üzerinde önceden eğitilmiştir.

MobileViTV2Config

sınıf transformers.MobileViTV2Config

< >

( 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 = Nonenum_channels: int = 3image_size: int | list[int] | tuple[int, int] = 256patch_size: int | list[int] | tuple[int, int] = 2expand_ratio: float = 2.0hidden_act: str = 'swish'conv_kernel_size: int = 3output_stride: int = 32classifier_dropout_prob: float | int = 0.1initializer_range: float = 0.02layer_norm_eps: float = 1e-05aspp_out_channels: int = 512atrous_rates: list[int] | tuple[int, ...] = (6, 12, 18)aspp_dropout_prob: float | int = 0.1semantic_loss_ignore_index: int = 255n_attn_blocks: list[int] | tuple[int, ...] = (2, 4, 3)base_attn_unit_dims: list[int] | tuple[int, ...] = (128, 192, 256)width_multiplier: float | int = 1.0ffn_multiplier: int = 2attn_dropout: float | int = 0.0ffn_dropout: float | int = 0.0 )

Parametreler

  • num_channels (int, isteğe bağlı, varsayılan 3) — Giriş kanal sayısı.
  • image_size (Union[int, list[int], tuple[int, int]], isteğe bağlı, varsayılan 256) — 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 2) — Her yamanın boyutu (çözünürlüğü).
  • expand_ratio (float, isteğe bağlı, varsayılan 2.0) — Genişletme için çıktı boyutlarını belirlemek üzere ayarlanacak genişletme oranı
  • hidden_act (str, isteğe bağlı, varsayılan swish) — Çözücüdeki doğrusal olmayan aktivasyon fonksiyonu (fonksiyon veya dize). Örneğin, "gelu", "relu", "silu" vb.
  • conv_kernel_size (int, isteğe bağlı, varsayılan 3) — Konvolüsyon çekirdeğinin boyutu.
  • output_stride (int, isteğe bağlı, varsayılan 32) — Girdi ve çıktı özellik haritalarının uzamsal çözünürlüğü arasındaki oran.
  • classifier_dropout_prob (Union[float, int], isteğe bağlı, varsayılan 0.1) — Sınıflandırıcı için dropout oranı.
  • initializer_range (float, isteğe bağlı, 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, isteğe bağlı, varsayılan 1e-05) — Katman normalizasyon katmanları tarafından kullanılan epsilon.
  • aspp_out_channels (int, isteğe bağlı, varsayılan 512) — Anlamsal segmentasyon için ASPP katmanında kullanılan çıktı kanalı sayısı.
  • atrous_rates (list[int], isteğe bağlı, varsayılan [6, 12, 18]) — Anlamsal segmentasyon için ASPP katmanında kullanılan genişleme (atrous) katsayıları.
  • aspp_dropout_prob (float, isteğe bağlı, varsayılan 0.1) — Anlamsal segmentasyon için ASPP katmanının dropout oranı.
  • semantic_loss_ignore_index (int, isteğe bağlı, varsayılan 255) — Semantik segmentasyon modelinin kayıp fonksiyonu tarafından yoksayılan indeks.
  • n_attn_blocks (list[int], isteğe bağlı, varsayılan [2, 4, 3]) — Her MobileViTV2Layer içindeki dikkat bloklarının sayısı
  • base_attn_unit_dims (list[int], isteğe bağlı, varsayılan [128, 192, 256]) — Her MobileViTV2Layer içindeki dikkat bloklarının boyutları için temel çarpan
  • width_multiplier (float, isteğe bağlı, varsayılan 1.0) — MobileViTV2 için genişlik çarpanı.
  • ffn_multiplier (int, isteğe bağlı, varsayılan 2) — MobileViTV2 için FFN çarpanı.
  • attn_dropout (Union[float, int], isteğe bağlı, varsayılan 0.0) — Dikkat olasılıkları için dropout oranı.
  • ffn_dropout (float, isteğe bağlı, varsayılan 0.0) — FFN katmanları arasındaki dropout.

Bu, bir MobileViTV2Model yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır. Belirtilen argümanlara göre bir Mobilevitv2 modelini örneklemek ve model mimarisini tanımlamak için kullanılır. Varsayılan değerlerle bir yapılandırma örneklendiğinde, apple/mobilevitv2-1.0 ile benzer bir yapılandırma elde edilir.

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 MobileViTV2Config, MobileViTV2Model

>>> # Initializing a mobilevitv2-small style configuration
>>> configuration = MobileViTV2Config()

>>> # Initializing a model from the mobilevitv2-small style configuration
>>> model = MobileViTV2Model(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

MobileViTV2Model

sınıf transformers.MobileViTV2Model

< >

( config: MobileViTV2Configexpand_output: bool = True )

Parametreler

  • config (MobileViTV2Config) — 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.
  • expand_output (bool, isteğe bağlı, varsayılan True) — Modelin çıktısının genişletilip genişletilmeyeceğini belirtir. True ise model, gizli durumların yanı sıra havuzlanmış özellikleri de çıktılar. False ise yalnızca gizli durumlar döndürülür.

Üzerinde herhangi bir özel head olmadan ham hidden-state çıktısı üreten çıplak Mobilevitv2 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

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithPoolingAndNoAttention 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 MobileViTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için MobileViTImageProcessor.call() bölümüne bakın (processor_class, görüntü işleme için MobileViTImageProcessor kullanır).
  • 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ındaki hidden_states bö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

BaseModelOutputWithPoolingAndNoAttention veya tuple(torch.Tensor)

BaseModelOutputWithPoolingAndNoAttention veya bir torch.Tensor demeti (return_dict=False geçirildiğinde veya config.return_dict=False olduğunda), yapılandırmaya (MobileViTV2Config) ve girdilere bağlı olarak çeşitli öğelerden oluşur.

MobileViTV2Model 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, num_channels, height, width)) — Modelin son katmanının çıktısındaki gizli durumlar dizisi.

  • pooler_output (torch.Tensor, şekli (batch_size, hidden_size)) — Uzamsal boyutlar üzerinde bir havuzlama işleminden sonra son katman gizli durumu.

  • 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 birer tane) içeren, (batch_size, num_channels, height, width) biçiminde bir demet.

    Her katmanın çıktısında modelin gizli durumları ve isteğe bağlı başlangıç gömme çıktıları.

Örnek:

MobileViTV2ForImageClassification

sınıf transformers.MobileViTV2ForImageClassification

< >

( config: MobileViTV2Config )

Parametreler

  • config (MobileViTV2Config) — 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.

Üstünde bir görüntü sınıflandırma başlığı (havuzlanmış özelliklerin üzerinde doğrusal bir katman) bulunan MobileViTV2 modeli, ö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

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonelabels: typing.Optional[torch.Tensor] = Nonereturn_dict: bool | None = None**kwargs ) → ImageClassifierOutputWithNoAttention 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 MobileViTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için MobileViTImageProcessor.call() bölümüne bakın (processor_class, görüntü işleme için MobileViTImageProcessor kullanır).
  • 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ındaki hidden_states bölümüne bakın.
  • 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 == 1 ise bir geri dönüşüm kaybı (Ortalama Kare kaybı) hesaplanır, config.num_labels > 1 ise bir sınıflandırma kaybı (Çapraz Entropi) hesaplanır.
  • return_dict (bool, isteğe bağlı) — Düz bir tuple yerine ModelOutput döndürülecek mi?

Dönüş değeri

ImageClassifierOutputWithNoAttention veya tuple(torch.Tensor)

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

MobileViTV2ForImageClassification 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ı, labels sağ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=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 aşamanın çıktısı için birer tane) içeren bir tuple, şekli (batch_size, num_channels, height, width). Modelin her aşamanın çıktısındaki gizli durumları (aynı zamanda özellik haritaları olarak da adlandırılır).

Örnek:

>>> from transformers import AutoImageProcessor, MobileViTV2ForImageClassification
>>> import torch
>>> from datasets import load_dataset

>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]

>>> image_processor = AutoImageProcessor.from_pretrained("apple/mobilevitv2-1.0")
>>> model = MobileViTV2ForImageClassification.from_pretrained("apple/mobilevitv2-1.0")

>>> 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])
...

MobileViTV2ForSemanticSegmentation

sınıf transformers.MobileViTV2ForSemanticSegmentation

< >

( config: MobileViTV2Config )

Parametreler

  • config (MobileViTV2Config) — 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.

Üstünde semantik segmentasyon başlığı bulunan, örneğin Pascal VOC için kullanılan MobileViTV2 modeli.

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

< >

( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → SemanticSegmenterOutput 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 MobileViTImageProcessor kullanılarak elde edilebilir. Ayrıntılar için MobileViTImageProcessor.call() bölümüne bakın (processor_class, görüntü işleme için MobileViTImageProcessor kullanır).
  • labels (torch.LongTensor, şekli (batch_size, height, width), isteğe bağlı) — Kayıp (loss) hesaplamak için kullanılan doğru etiketli semantik segmentasyon haritaları. İndisler [0, ..., config.num_labels - 1] aralığında olmalıdır. config.num_labels > 1 ise, bir sınıflandırma kaybı (Cross-Entropy) hesaplanır.
  • 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ındaki hidden_states bö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

SemanticSegmenterOutput veya tuple(torch.Tensor)

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

MobileViTV2ForSemanticSegmentation 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ı, labels sağ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, logits_height, logits_width)) — Her piksel için sınıflandırma puanları.

    Döndürülen logits değerleri, girdi olarak geçirilen pixel_values ile aynı boyutta olmak zorunda değildir. Bu, bir kullanıcının logits değerlerini son işlem olarak orijinal görüntü boyutuna yeniden boyutlandırmak istediğinde iki kez interpolasyon yapılarak bazı kalite kayıpları yaşanmasını önlemek içindir. Logits şeklinizi her zaman kontrol etmeli ve gerektiğinde yeniden boyutlandırmalısınız.

  • 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 birer tane) içeren, (batch_size, patch_size, 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=True geçirildiğinde veya config.output_attentions=True olduğunda döndürülür) — torch.Tensor (katman başına bir tane) içeren bir tuple, şekli (batch_size, num_heads, patch_size, sequence_length).

    Dikkat softmax'ı sonrası dikkat ağırlıkları, öz-dikkat başlıklarında ağırlıklı ortalamanın hesaplanmasında kullanılır.

Örnekler:

>>> from huggingface_hub.utils import httpx
>>> from io import BytesIO
>>> import torch
>>> from PIL import Image
>>> from transformers import AutoImageProcessor, MobileViTV2ForSemanticSegmentation

>>> 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("apple/mobilevitv2-1.0-imagenet1k-256")
>>> model = MobileViTV2ForSemanticSegmentation.from_pretrained("apple/mobilevitv2-1.0-imagenet1k-256")

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

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

>>> # logits are of shape (batch_size, num_labels, height, width)
>>> logits = outputs.logits
Update on GitHub