Vision Transformer (ViT)
يقسّم محوّل الرؤية (ViT) الصورة إلى رقع ويربط بينها باستخدام الانتباه الذاتي. يتناول هذا النص بنيته ومتغيراته ومفاضلاته مقارنةً بالشبكات العصبية الالتفافية (CNNs).
إن Transformer البصري (ViT) هو شبكة عصبية تطبّق بنية Transformer المستخدمة في نمذجة اللغة على الصور. تقسّم الصورة إلى رقع ثابتة الحجم، وتحول كل رقعة إلى تضمين رمز، ثم تعالج التسلسل باستخدام الانتباه الذاتي، بحيث تستطيع كل رقعة الاستفادة من جميع الرقع الأخرى منذ الطبقة الأولى. قدّم باحثو Google هذه البنية في "الصورة تساوي 16×16 كلمة"، وأظهروا أن Transformer خالصًا بلا طبقات التفاف يضاهي الشبكات العصبية الالتفافية (CNNs) المتقدمة في تصنيف الصور عند تدريبه مسبقًا على بيانات كافية. وتُستخدم ViTs الآن كمُرمِّزات صور في نماذج الرؤية واللغة، والنماذج التأسيسية للتقسيم، والأعمدة الفقرية ذاتية الإشراف.
آلية عمل المحوّلات البصرية#
تحوّل ViT الصورة إلى تسلسل ثم تعالجه مثل النص. تستخدم الخطوات أدناه ViT-Base/16 على صورة بحجم 224×224:
- تضمين الرقع: تُقسّم الصورة إلى رقع بحجم 16×16 بكسل، أي شبكة من 14×14 تضم 196 رقعة. تُسطّح كل رقعة وتُضرب في مصفوفة متعلّمة لتصبح تضمينًا ذا 768 بُعدًا، ويُنفّذ ذلك عادةً بالتفاف 16×16 بخطوة 16.
- رمز الفئة وتضمينات المواضع: يُضاف رمز فئة قابل للتعلّم إلى بداية التسلسل، وتُضاف تضمينات مواضع قابلة للتعلّم إلى كل رمز. يتجاهل الانتباه الترتيب بحد ذاته، لذا تشكّل هذه التضمينات المصدر الوحيد للمعلومات عن موضع كل رقعة.
- مُرمِّز Transformer: تتناوب رزمة من الكتل المتطابقة، وعددها 12 في ViT-Base، بين الانتباه الذاتي متعدد الرؤوس، الذي يمزج المعلومات عبر جميع الرموز، وشبكة MLP من طبقتين تستخدم تنشيطات GELU، التي تحوّل كل رمز على حدة. ويسبق كل طبقة فرعية تطبيع الطبقة، وتحيط بها وصلة متبقية.
- الرأس: يغذّي الخرج النهائي لرمز الفئة مصنّفًا خطيًا. أما المهام الكثيفة، مثل التقسيم، فتستخدم رموز الرقع بدلًا منه، بعد إعادة تشكيلها إلى شبكة 14×14.
يبني الرمز المكتوب بـPyTorch أدناه تسلسل الرموز لصورة واحدة ويمرره عبر كتلة مُرمِّز واحدة.
import torch
from torch import nn
# إعدادات ViT-Base/16: رقع 16x16، رموز بأبعاد 768، و12 رأس انتباه
image = torch.randn(1, 3, 224, 224)
patch_embed = nn.Conv2d(3, 768, kernel_size=16, stride=16) # إسقاط خطي واحد لكل رقعة
# قسّم الصورة إلى شبكة من 14x14 رقعة وسوّها في 196 رمزًا
tokens = patch_embed(image).flatten(2).transpose(1, 2)
# أضف رمز فئة قابلًا للتعلّم إلى البداية وأضف تضمينات مواضع قابلة للتعلّم
cls_token = nn.Parameter(torch.zeros(1, 1, 768))
pos_embed = nn.Parameter(torch.zeros(1, 197, 768))
tokens = torch.cat([cls_token, tokens], dim=1) + pos_embed
# كتلة مُرمِّز واحدة بتطبيع مسبق، ينتبه فيها كل رمز إلى كل رمز آخر
block = nn.TransformerEncoderLayer(
d_model=768, nhead=12, dim_feedforward=3072, activation="gelu", batch_first=True, norm_first=True
)
print(block(tokens).shape)يطبع torch.Size([1, 197, 768]): رموز الرقع الـ196 مضافًا إليها رمز الفئة، ولكل منها 768 بُعدًا، وهي جاهزة للكتلة التالية من كتل ViT-Base الاثنتي عشرة.
أحجام النماذج ومتغيراتها#
تشير أسماء ViT إلى حجم النموذج وحجم الرقعة: ViT-B/16 هو نموذج Base المؤلف من 86 مليون معلمة مع رقع بحجم 16×16، ويضم نموذجا Large وHuge عدد 307 ملايين و632 مليون معلمة. تنتج الرقع الأصغر عددًا أكبر من الرموز، ما يحسّن التفاصيل بتكلفة حوسبية أعلى. غيّرت عدة متغيرات طريقة تدريب ViTs أو بنيتها:
- DeiT: وصفة تدريب تستخدم زيادة بيانات قوية ورمزًا للتقطير، وتدرّب ViTs تنافسية على ImageNet-1k وحدها، من دون بيانات تدريب مسبق إضافية.
- Swin Transformer: يحسب الانتباه داخل نوافذ محلية متحركة ويدمج الرقع بين المراحل، منتجًا بنية هرمية شبيهة بـCNN تلائم الاكتشاف والتقسيم.
- المشفّرات التلقائية المقنّعة (MAE) وDINOv2: أساليب ذاتية الإشراف لتدريب ViTs مسبقًا على صور غير موسومة، وذلك بإعادة بناء الرقع المقنّعة في MAE، ومطابقة مخرجات شبكة معلّم في DINOv2.
- CLIP وSigLIP: مُرمِّزات صور ViT مدرّبة على مواءمة الصور مع تعليقاتها، ويُعاد استخدامها على نطاق واسع كبرج الرؤية في النماذج متعددة الوسائط.
التطبيقات#
- نماذج الرؤية واللغة: يحوّل مُرمِّز ViT الصورة إلى تسلسل من الرموز يقرأه نموذج لغوي كبير إلى جانب النص، ما يتيح إنشاء التعليقات التوضيحية والإجابة عن الأسئلة البصرية.
- التنبؤ الكثيف: تدعم رموز الرقع من الأعمدة الفقرية لـViT مهام تقسيم الصور وتقدير العمق، حيث يحتاج كل بكسل ناتج إلى سياق من مناطق بعيدة في الصورة.
- فهم الفيديو: تقسّم نماذج ViT للفيديو المقاطع إلى رقع مكانية-زمانية، وتتعلم نماذج الفيديو ذاتية الإشراف مثل V-JEPA سمات الحركة والمظهر من مقاطع غير موسومة لمهام مثل التعرّف على الأفعال.
المحوّلات البصرية مقابل الشبكات العصبية الالتفافية#
تدمج CNNs افتراضين في كل طبقة: المحلية، لأن كل مرشح يرى جوارًا صغيرًا، والتكافؤ الانتقالي، لأن المرشح نفسه يُطبّق في كل موضع. وباستثناء شبكة الرقع، يتعين على ViT تعلّم البنية المكانية من البيانات. وفي الورقة الأصلية، حققت ViTs المدرّبة على ImageNet وحدها (1.3 مليون صورة) درجات تقل ببضع نقاط مئوية عن ResNets ذات الحجم المماثل، بينما رفع التدريب المسبق على مجموعة بيانات JFT-300M المؤلفة من 300 مليون صورة دقة ViT-H/14 إلى 88.55% في دقة أعلى 1 على ImageNet. وتكمن نقطة الاختلاف الأخرى في الكلفة. يقارن الانتباه الذاتي كل رمز بكل رمز آخر، لذا فإن مضاعفة طول ضلع الصورة تزيد عدد الرموز أربعة أمثال، وتضرب كلفة الانتباه في 16. يقلل الانتباه السريع حركة البيانات في الذاكرة اللازمة لهذا الحساب، بينما يحدّ الانتباه ضمن النوافذ من المقارنات نفسها. تشغّل Ultralytics نموذج Segment Anything Model من Meta، الذي يرمّز فحص sam_b.pt صورةً بحجم 1024×1024 باستخدام العمود الفقري ViT-B: تشكّل الرقع ذات الحجم 16×16 شبكة 64×64 من 4,096 رمزًا، لذا تنتبه 8 من كتل النموذج الاثنتي عشرة إلى النوافذ ذات الحجم 14×14 فقط، بينما تستخدم 4 كتل الانتباه الشامل.










