Phase 19: Capstone Projects

معطيات الرؤية

نموذج الرؤية الذي يقرأ البيكسلات يحتاج إلى رمز للبيكسلات. إدراج اللمسات هو ذلك رمز. قطع الصورة إلى شبكة من المربعات، مسطحة كل مربع، عرضها عبر طبقة خطية واحدة، ثم إضافة إشارة موقف 2D حتى يعرف المحول أين كل مربع كان في الصورة الأصلية.

Type: Build

Languages: Python

Prerequisites: Phase 19 lessons 30-37 (Track B foundations)

Time: ~90 minutes

أهداف التعلم

  • إضافة علامات على صورة إلى تسلسل طويل ثابت من إضافة اللصوص.
  • تنفيذConv2d-تقنية التنبؤات التي تتطابق مع الرياضيات من التكشف ثم الخطية.
  • بناء وضع 2D سينوسيدال تحديدية تضمين حتى الترتيب رمزية ترمز الموقف الفضائي.
  • التحقق من عدد المفاتيح، وضع الشكل، و Conv2d/تفقد المساواة على جهاز صناعي

المشكلة

المحول يأكل تسلسل من المتجهات. صورة هي شبكة ثلاثي القنوات. قراءة كل بيكسل كرمز تفجر طول التسلسل: صورة RGB 224 × 224 هي 150.528 رمز، والتي لا يمكن للمتحول 12 طبقة تحمل في الانتباه. قراءة الصورة كمتجه مسطح ضخم يرمي الموقع، الذي لا يمكن الطبقة الانتباهية التعافي منه. مهمة المُشفّر الأمامي هي ضغط شبكة البيكسل إلى بضعة مئات من الرموز التي تجمّع كلّ منها منطقة مربعة.

يصلح إدمج اللصقة هذا الأمر باستخدام مشهد خطي واحد. تم قطع صورة 224 × 224 إلى شرائح 16 × 16 مما ينتج شبكة 14 × 14 من 196 شرائح. يتم تسطح كل شرائح من(3, 16, 16) = 768قيم البيكسل في متجه واحد، ثم تقوم طبقة خطية بتخريطه إلى الأبعاد الخفية للنموذج.hidden(عادة 768) بالإضافة إلى رمز CLS. هذا تسلسل يمكن لبقية الشبكة أن تشتغ عليه.

المفهوم

flowchart LR
  Image[224x224x3 image] --> Cut[cut into 16x16 patches]
  Cut --> Grid[14x14 grid of patches]
  Grid --> Flatten[flatten each patch]
  Flatten --> Proj[linear projection]
  Proj --> Tokens[196 tokens of dim hidden]
  Tokens --> Pos[add 2D sinusoidal position]
  Pos --> Out[final token sequence]

لماذا معجون وليس بيكسلات

الاهتمام مربع في طول السلسلة. تكلفة السلسلة 196 رمزا 196 196 = 38,416نقاط الاهتمام لكل رأس لكل طبقة، تكلفة تسلسل 150,528 رمز 150,528 150,528 = 22.6 billion. تشتري المفاتيح تخفيضًا 590,000x في حساب الاهتمام ، ومناطق 16x16 واحدة تحمل إشارة كافية لمهام الرؤية عالية المستوى. التكلفة هي فقدان التفاصيل الفضائية الدقيقة داخل مساحة واحدة ، ولهذا السبب غالباً ما تعمل كومات متعددة الحركات المتدفقة في النهر فرعًا ثانًا عالي القرار عندما يكون المحلية الدقيقة مهمًا.

لماذا تكفي التنبؤ الخطى

يتم التعامل مع كل ملصق كمتنقل مستقل. يتعلم التنبيه أساسًا: كاشفات الحافة، مرشحات الألوان، نسيج بسيط.768 * 768 = 589,824هناك جذور مغلقة أعمق (ال"هائبريد" ViT) ، ولكن التنبيه الخطوي المستطيل هو المعيار ، ومعظم مرموزات الوزن المفتوح الحديثة تشحن بهذا الشكل الدقيق.

- نعمConv2dخدعة

أConv2d(in_channels=3, out_channels=hidden, kernel_size=patch_size, stride=patch_size)بدون ملعقة يعطي نفس النتيجة العددية مثل التكشف ثم الخطية، لأن كل وضع خروجي نقطة تنتج البكسلات اللمسات ضد مرشح واحد. التخزين هو إلقاء اللمسات، ومعظم قواعد البرمجة الإنتاجية شحن ذلك الطريق لأنه أسرع على GPU ويستخدم واحدة أقل إعادة تشكيل.

إضافة الموقف

لا تحمل الرموز ترتيبًا من الإشارة. إضافة الصناعي الثنائي الأبعاد تعطي كل رمز إشارة ثابتة ترميزها(row, col)وضع. نصف بعد التضمين يرمز وضع الصف مع الخطأ / cos في ترددات متعددة؛ النصف الآخر يرمز وضع العمود. التشفير هو محدد بحيث يمكنك تبادل القرارات دون إعادة التدريب، ويتم التقاطع نظيفا إلى الشبكات التي لم ترى النموذج في وقت التدريب.

ComponentShapeParameters
Patch projection (Conv2d)(hidden, 3, patch, patch)3 P P * hidden + hidden
Position embedding (fixed)(num_patches, hidden)0 (computed, not learned)
CLS token (learned)(1, hidden)hidden

بالنسبة لـ ViT-Base/16 عند 224 قرار: 590.592 ملامح في التنبؤ ، 768 في رمز CLS ، و 0 للموقف السينوسويدي. الدروس التالية (59) تقوم بتجميع محول 12 طبقة فوق هذه الطرف الأمامي.

المساواة كتحقيق الصحة العقلية

خطوة المزج لها اثنين من التكليف: a Conv2dإذا لم يفعلوا ذلك، فإن الرياضيات المتفاضلة خاطئة، وبقية المُرمّد بنيت على الرمال.

بناءها

code/main.pyتطبيقات:

  • PatchEmbed، وnn.ModuleالتغليفConv2dلتنبيه المزج
  • sinusoidal_2d(grid_h, grid_w, dim)، وظيفة بلا حالة التي تبني جدول المواقف 2D.
  • VisionFrontEnd، الذي يتكون من إدراج اللصوص ، CLS prepend ، و إضافة الموقف في مرسلة واحدة إلى الأمام.
  • أsynthesize_image(seed)المساعد الذي يبني مقياس محدد 224x224x3 منnumpy.random. . .
  • عرض عرض يدير صورة واحدة من الأدوات من خلال الطرف الأمامي ويطبع شكل الخروج، ومعيار رمز CLS، وسلسلة واحدة من إدراج الموقف.

إشغله

bashpython3 code/main.py

الناتج: يتم تعريف الجهاز 224x224 إلى تسلسل من الشكل (1, 197, 768). الرمز الأول هو CLS؛ وال 196 التالي هو الرمز المزدوج. القواعد التي تضم الموقف متساوية داخل صف، وهو التوقيع السينوسيدر.

استخدمها

نفس اللمسة الأمامية تظهر في كل نموذج جديد لغة الرؤية: CLIP ViT-L/14, SigLIP, DINOv2, عائلة Qwen-VL، والكعب InternVL كل تبدأ من Conv2dمشروع اللقطات بالإضافة إلى إشارة الموقف. التفاوتات بين العائلات تعيش أسفل النهر (CLS مقابل لا-CLS تجمع، رموز التسجيل، مختلفة حجم اللقطات 14 مقابل 16, القرار الديناميكي عبر المواقع المتقاطعة).

الاختبارات

code/test_main.pyتغطية:

  • معدل تعدد المزادات(image_size / patch_size) ** 2
  • تطابقات الشكل المخرج (batch, num_patches + 1, hidden)
  • الموقعConv2dالتنبيه يساوي التفريغ اليدوي ثم الخطوي على جهاز صغير
  • جدول الموقف السينوسويدي هو تحديد عبر المكالمات
  • إرسال رموز CLS عبر الحزمة دون تسرب

إشغلهم

bashpython3 -m unittest code/test_main.py

التمارين

  1. استبدل الموقف السينوسويدي بموقف علميnn.Parameterويقارن الخسارة في العصر الأول على مهمة تصنيفية صناعية صغيرة. المواقف المتعلمة تفوز عند القرار الثابت؛ السينوسيدال تفوز عندما تغير القرار بعد التدريب.
  1. تغيير Conv2dلأجل صراحةnn.Unfoldبالإضافةnn.Linearويقول ان المخرجات تتطابق مع معاناة الطيران نفس الرياضيات، طريقتين للكتابة
  1. إضافة دعم لحجم المواقع غير المربعة (مثل 32 × 16 لمدخلات الجوانب العريضة) والتحقق من أن جدول المواقف يتعامل مع الشبكات غير المربعة.
  1. تحليل خطوة المزج في أحجام الحزمة 1, 8, 64.
  1. قم بتدريب الطرف الأمامي كمتصدر ميزة مجمد على مجموعة بيانات تشكيل اصطناعي من 4 فئات (الدوائر والربع والثلاثي، والنجوم). يجب أن يتم فصل إصدار رمز CLS خطيا.

الشروط الرئيسية

TermWhat it means
PatchA square sub-region of the image, typically 14x14 or 16x16
Patch embeddingLinear projection of one flattened patch to the hidden dim
Sequence lengthNumber of tokens after patch tokenization, usually plus CLS
Sinusoidal positionFixed sin/cos signal that encodes 2D grid coordinates
CLS tokenLearned vector prepended to the sequence as the pooling head

المزيد من القراءة

  • صورة تستحق 16 × 16 كلمة (فييت، 2021) للإطار الأصلي المضمن بالبقع.
  • الاهتمام هو كل ما تحتاجه (2017) لصيغة الموقف السينوسويدي المعدلة هنا إلى 2D.
  • ورقة DINOv2 لبرامج التسجيل، تمديد يمكنك إضافة كتمارين 6.

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.