Transformers documentation

SwiftFormer

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

and get access to the augmented documentation experience

to get started

نُشر هذا النموذج في أوراق HF في 27 مارس 2023، وأُضيف إلى مكتبة Hugging Face Transformers في 12 مايو 2023.

SwiftFormer

نظرة عامة

قُدِّم نموذج SwiftFormer في SwiftFormer: Efficient Additive Attention for Transformer-based Real-time Mobile Vision Applications بواسطة Abdelrahman Shaker وMuhammad Maaz وHanoona Rasheed وSalman Khan وMing-Hsuan Yang وFahad Shahbaz Khan.

يُقدّم مقال SwiftFormer آلية انتباه إضافية فعّالة وجديدة تحلّ بفعالية محلّ عمليات ضرب المصفوفات التربيعية في حساب الانتباه الذاتي، مستبدلةً إياها بضرب عناصر خطي. وقد بُنيت على أساس هذه الآلية سلسلة من النماذج تُدعى «SwiftFormer»، والتي تحقق أداءً متقدماً من حيث الدقة وسرعة الاستدلال على الأجهزة المحمولة على حدّ سواء. وحتى متغيرها الصغير يحقق دقة 78.5% في تصنيف ImageNet1K من الدرجة الأولى مع زمن استجابة لا يتجاوز 0.8 مللي ثانية على iPhone 14، وهو أدق وأسرع بمقدار 2× مقارنةً بـ MobileViT-v2.

المستخلص من الورقة البحثية هو كالتالي:

أصبح الانتباه الذاتي الخيار المعتمد عمليًا لالتقاط السياق العام في تطبيقات الرؤية الحاسوبية المختلفة. ومع ذلك، فإن تعقيده الحسابي التربيعي بالنسبة لدقة الصورة يحدّ من استخدامه في التطبيقات الفورية، لا سيما عند النشر على الأجهزة المحمولة ذات الموارد المحدودة. وعلى الرغم من اقتراح نهج هجين يجمع بين مزايا الالتفاف والانتباه الذاتي لتحقيق توازن أفضل بين السرعة والدقة، فإن عمليات ضرب المصفوفات المكلفة في الانتباه الذاتي لا تزال تمثل عنق زجاجة. في هذا العمل، نطرح آلية انتباه إضافي فعّالة وجديدة تحلّ بفعالية محلّ عمليات ضرب المصفوفات التربيعية بعمليات ضرب عنصرية خطية. يُظهر تصميمنا أن تفاعل المفتاح-القيمة يمكن استبداله بطبقة خطية دون أي تنازل عن الدقة. وعلى عكس أحدث الأساليب المتقدمة سابقًا، فإن صياغتنا الفعّالة للانتباه الذاتي تتيح استخدامه في جميع مراحل الشبكة. وباستخدام الانتباه الإضافي الفعّال الذي اقترحناه، بنينا سلسلة من النماذج تُدعى “SwiftFormer” التي تحقق أداءً متقدمًا من حيث الدقة وسرعة الاستدلال على الأجهزة المحمولة على حدّ سواء. يحقق متغيّرنا الصغير دقة 78.5% في تصنيف ImageNet-1K (top-1) مع زمن استجابة لا يتجاوز 0.8 مللي ثانية على iPhone 14، وهو أدق وأسرع بمقدار الضعف مقارنةً بـ MobileViT-v2.

تمت مساهمة هذا النموذج من قِبل shehan97. يمكن العثور على الكود الأصلي هنا.

SwiftFormerConfig

فئة transformers.SwiftFormerConfig

< >

( 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 = Noneimage_size: int | list[int] | tuple[int, int] = 224num_channels: int = 3depths: list[int] | tuple[int, ...] = (3, 3, 6, 4)embed_dims: list[int] | tuple[int, ...] = (48, 56, 112, 220)mlp_ratio: int = 4downsamples: list[bool] | tuple[bool, ...] = (True, True, True, True)hidden_act: str = 'gelu'down_patch_size: int | list[int] | tuple[int, int] = 3down_stride: int = 2down_pad: int = 1drop_path_rate: float | int = 0.0drop_mlp_rate: float | int = 0.0drop_conv_encoder_rate: float | int = 0.0use_layer_scale: bool = Truelayer_scale_init_value: float = 1e-05batch_norm_eps: float = 1e-05 )

المعاملات

  • image_size (Union[int, list[int], tuple[int, int]]، اختياري، القيمة الافتراضية 224) — الحجم (الدقة) لكل صورة.
  • num_channels (int، اختياري، القيمة الافتراضية 3) — عدد قنوات الإدخال.
  • depths (Union[list[int], tuple[int, ...]]، اختياري، القيمة الافتراضية (3, 3, 6, 4)) — عمق كل طبقة في Transformer.
  • embed_dims (list[int]، اختياري، القيمة الافتراضية [48, 56, 112, 220]) — أبعاد التضمين (embedding) في كل مرحلة
  • mlp_ratio (int، اختياري، القيمة الافتراضية 4) — نسبة بُعد مخفي MLP إلى بُعد التضمين.
  • downsamples (list[bool]، اختياري، القيمة الافتراضية [True, True, True, True]) — ما إذا كان سيتم إجراء عملية تصغير (downsampling) للمدخلات بين مرحلتين.
  • hidden_act (str، اختياري، القيمة الافتراضية gelu) — دالة التنشيط غير الخطية (دالة أو نص) في المُفكِّك. على سبيل المثال، "gelu"، "relu"، "silu"، وما إلى ذلك.
  • down_patch_size (int، اختياري، القيمة الافتراضية 3) — حجم البقع في طبقات تقليل العينة.
  • down_stride (int، اختياري، القيمة الافتراضية 2) — خطوة نوى الالتفاف في طبقات تقليل الحجم.
  • down_pad (int، اختياري، القيمة الافتراضية 1) — الحشو في طبقات تقليل الحجم.
  • drop_path_rate (Union[float, int], اختياري، القيمة الافتراضية 0.0) — معدل إسقاط المسار (Drop path) لدمج البقع (patch fusion).
  • drop_mlp_rate (float، اختياري، القيمة الافتراضية 0.0) — معدل الإسقاط (Dropout rate) لمكوّن MLP في SwiftFormer.
  • drop_conv_encoder_rate (float, اختياري، القيمة الافتراضية 0.0) — معدل الإسقاط (Dropout rate) لمكوّن ConvEncoder في SwiftFormer.
  • use_layer_scale (bool، اختياري، القيمة الافتراضية True) — ما إذا كان سيتم قياس المخرجات من خلاطات الرموز.
  • layer_scale_init_value (float, اختياري، القيمة الافتراضية 1e-05) — المقياس المستخدم في طبقات الانتباه الذاتي. 0.1 للنموذج الأساسي، و1e-6 للنموذج الكبير. اضبط القيمة على 0 لتعطيل مقياس الطبقة.
  • batch_norm_eps (float، اختياري، القيمة الافتراضية 1e-05) — قيمة إيبسلون المستخدمة في طبقات تطبيع الدفعة.

هذه فئة الإعدادات المخزنة لإعدادات SwiftFormerModel. تُستخدم لتوليد نموذج Swiftformer وفقاً للحجج المحددة، مع تعريف بنية النموذج. إن إنشاء إعدادات باستخدام القيم الافتراضية سيؤدي إلى الحصول على إعدادات مشابهة لتلك الخاصة بـ MBZUAI/swiftformer-xs

ترث كائنات التهيئة من PreTrainedConfig ويمكن استخدامها للتحكم في مخرجات النموذج. اقرأ التوثيق الخاص بـ PreTrainedConfig لمزيد من المعلومات.

مثال:

>>> from transformers import SwiftFormerConfig, SwiftFormerModel

>>> # Initializing a SwiftFormer swiftformer-base-patch16-224 style configuration
>>> configuration = SwiftFormerConfig()

>>> # Initializing a model (with random weights) from the swiftformer-base-patch16-224 style configuration
>>> model = SwiftFormerModel(configuration)

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

SwiftFormerModel

فئة transformers.SwiftFormerModel

< >

( config: SwiftFormerConfig )

المعاملات

  • config (SwiftFormerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Swiftformer الأساسي الذي يُخرج حالات مخفية خام دون أي رأس محدد في الأعلى.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → BaseModelOutputWithNoAttention or tuple(torch.Tensor)

المعاملات

  • pixel_values (torch.Tensor من الشكل (batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام ViTImageProcessor. راجع ViTImageProcessor.call() للتفاصيل (يستخدم processor_class ViTImageProcessor لمعالجة الصور).
  • output_hidden_states (bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجع hidden_states ضمن الموترات المُرجعة للحصول على مزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

BaseModelOutputWithNoAttention أو tuple(torch.Tensor)

BaseModelOutputWithNoAttention أو مجموعة (tuple) من torch.Tensor (إذا تم تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على التهيئة (SwiftFormerConfig) والمدخلات.

تتجاوز طريقة SwiftFormerModel الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • last_hidden_state (torch.Tensor من الشكل (batch_size, num_channels, height, width)) — تسلسل من حالات الإخفاء عند مخرجات الطبقة الأخيرة من النموذج.

  • hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل طبقة) بأبعاد (batch_size, num_channels, height, width).

    حالات النموذج المخفية عند مخرج كل طبقة بالإضافة إلى مخرجات التضمين الأولي الاختيارية.

مثال:

SwiftFormerForImageClassification

فئة transformers.SwiftFormerForImageClassification

< >

( config: SwiftFormerConfig )

المعاملات

  • config (SwiftFormerConfig) — فئة إعدادات النموذج التي تحتوي على جميع معاملات النموذج. لا يؤدي التهيئة باستخدام ملف الإعداد إلى تحميل الأوزان المرتبطة بالنموذج، بل الإعدادات فقط. راجع طريقة from_pretrained() لتحميل أوزان النموذج.

نموذج Swiftformer مع رأس تصنيف الصور في الأعلى، على سبيل المثال لـ ImageNet.

يرث هذا النموذج من PreTrainedModel. راجع توثيق الفئة الأصلية لمعرفة الطرق العامة التي تنفذها المكتبة لجميع نماذجها (مثل التحميل أو الحفظ، وتغيير حجم تضمينات الإدخال، وقص الرؤوس، وما إلى ذلك).

هذا النموذج هو أيضًا فئة فرعية من torch.nn.Module في PyTorch. استخدمه كوحدة PyTorch عادية، وارجع إلى توثيق PyTorch لكل ما يتعلق بالاستخدام العام والسلوك.

forward

< >

( pixel_values: typing.Optional[torch.Tensor] = Nonelabels: typing.Optional[torch.Tensor] = Noneoutput_hidden_states: bool | None = Nonereturn_dict: bool | None = None**kwargs ) → ImageClassifierOutputWithNoAttention or tuple(torch.Tensor)

المعاملات

  • pixel_values (torch.Tensor من الشكل (batch_size, num_channels, image_size, image_size)، اختياري) — المصفوفات المقابلة للصور المدخلة. يمكن الحصول على قيم البكسل باستخدام ViTImageProcessor. راجع ViTImageProcessor.call() للتفاصيل (يستخدم processor_class ViTImageProcessor لمعالجة الصور).
  • labels (torch.LongTensor of shape (batch_size,), اختياري) — التسميات لحساب خسارة تصنيف الصور/الانحدار. يجب أن تكون الفهارس ضمن [0, ..., config.num_labels - 1]. إذا كان config.num_labels == 1 يتم حساب خسارة الانحدار (خسارة متوسط المربع)، وإذا كان config.num_labels > 1 يتم حساب خسارة التصنيف (الإنتروبيا المتقاطعة).
  • output_hidden_states (bool، اختياري) — ما إذا كان يجب إرجاع حالات الطبقات المخفية لجميع الطبقات. راجع hidden_states ضمن الموترات المُرجعة للحصول على مزيد من التفاصيل.
  • return_dict (bool، اختياري) — ما إذا كان يجب إرجاع ModelOutput بدلاً من tuple عادي.

يعيد

ImageClassifierOutputWithNoAttention أو tuple(torch.Tensor)

ImageClassifierOutputWithNoAttention أو مجموعة مرتبة من torch.Tensor (في حال تمرير return_dict=False أو عندما يكون config.return_dict=False) وتتضمن عناصر مختلفة تعتمد على الإعداد (SwiftFormerConfig) والمدخلات.

تتجاوز طريقة SwiftFormerForImageClassification الخاصة بالتقديم (forward) الطريقة الخاصة __call__.

على الرغم من أنه يجب تعريف وصفة المرور الأمامي داخل هذه الدالة، إلا أنه ينبغي استدعاء كائن Module بدلاً من هذه الدالة، لأن الكائن يتولى تنفيذ خطوات المعالجة المسبقة والمعالجة اللاحقة، بينما تتجاهل الدالة هذه الخطوات بصمت.

  • loss (torch.Tensor من الشكل (1,)، اختياري، يُعاد عند توفير labels) — خسارة التصنيف (أو الانحدار إذا كان config.num_labels==1).
  • logits (torch.Tensor من الشكل (batch_size, config.num_labels)) — درجات التصنيف (أو الانحدار إذا كان config.num_labels==1) (قبل SoftMax).
  • hidden_states (tuple(torch.Tensor)، اختياري، يُعاد عند تمرير output_hidden_states=True أو عند تعيين config.output_hidden_states=True) — مجموعة من torch.Tensor (واحدة لإخراج الطبقات المضمنة، إذا كان النموذج يحتوي على طبقة تضمين، + واحدة لإخراج كل مرحلة) من الشكل (batch_size, num_channels, height, width). حالات مخفية (تُسمى أيضًا خرائط الميزات) للنموذج عند إخراج كل مرحلة.

مثال:

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

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

>>> image_processor = AutoImageProcessor.from_pretrained("MBZUAI/swiftformer-xs")
>>> model = SwiftFormerForImageClassification.from_pretrained("MBZUAI/swiftformer-xs")

>>> 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])
...
Update on GitHub