رؤية أي قرار: معططات و NaFlex
Type: Build
Languages: Python (stdlib, patch packer + block-diagonal mask)
Prerequisites: Phase 12 · 01 (ViT patches), Phase 12 · 05 (LLaVA)
Time: ~120 minutes
أهداف التعلم
- قم بتجميع اللصوص من مجموعة من الصور ذات القرار المتغير إلى تسلسل واحد وبناء قناع الاهتمام المقطعية.
- اختر بين AnyRes tiling (LLaVA-NeXT) ، NaFlex (SigLIP 2) ، و M-RoPE (Qwen2-VL) لمهمة معينة.
- حساب ميزانيات الرمزية لـ OCR والرسوم البيانية والتصوير بدون إعادة الحجم.
- أسمائ أنواع الفشل الثلاثة لتحديد حجم التربيع: النص المحقق، المحتوى المقطع، والرموز المهدرة على التدليك.
المشكلة
المتحولات تتوقع تسلسل. مجموعة هي كومة من تسلسلات نفس الطول. إذا كانت صورك 224 × 224, تحصل على 196 علامة اللصوص في كل مرة, لا حاجة إلى ملء, العمل قد تم. تدرب على 224, استنتاج على 224, لا تفكر أبدا عن القرار مرة أخرى.
العالم لا يتعاون. الوثائق هي صورة (8.5x11 بوصة، 2:3-شبه). صور الشاشة الرسمية هي المناظر الطبيعية (16:9). الإيصالات طويلة ونحيفة (1:3). سفن التصوير الطبي في 2048x2048 أو أكبر. صور الشاشة من أجهزة الهاتف المحمول هي 1170x2532 (0.46:1).
ثلاثة خيارات قبل عام 2024 و لماذا تفشل كل واحد منها:
- إعادة الحجم إلى مربع ثابت (224 × 224 أو 336 × 336). يزعج الكتيب والوجوه. يدمّر التقييم المنخفض علامات الرسم البياني ومحتوى OCR. الممارسة القياسية حتى LLaVA-1.5.
- تُرمي معظم الصورة، واختيار موقع المحاصيل هو مشكلة رؤيتها الخاصة.
- المكعب إلى أطول جانب. يصلح التشوهات ولكن يضيع 50٪ + من الرموز على التشغيل لصور الصورة. تكلفة الاهتمام التربيعي على جميع تلك الرموز الرموز.
الجواب 2024-2025: دع المحول يأكل اللقطات عند قرار الصورة الأصلي، واكتشف كيفية حزم مجموعة متفرقة في تسلسل واحد دون إهدار الحساب.
المفهوم
(NaViT) و (patch-n'-pack)
كان NaViT (Dehghani et al., 2023) ورقة التي أظهرت هذا العمل على نطاق واسع.
- لكل صورة في اللحظة، احسب شبكة اللحظة الأصلية في حجم اللحظة المختار (قول 14).
- سطحوا مساحات كل صورة إلى تسلسل طولها المتغير
- قم بتجميع جميع اللقطات في تسلسل طويل للشحنة.
- قم ببناء قناع الاهتمام المكون من شكل كتلة بحيث تظهر معطيات الصورة A فقط داخل الصورة A
- يحمل معلومات الموقف لكل إصبع (2D RoPE أو إضافة الموقف الفقري).
تصبح مجموعة من ثلاث صور في 336x336 (576 رمزا) ، 224x224 (256 رمزا) ، و 448x336 (768 رمزا) تسلسلًا واحدًا 1600 رمزاً مع قناع كتلة خط خط 1600x1600. لا يوجد ملابس. لا توجد حسابات مضيعة. يتعامل المحول بنسب الجانب التعسفي.
كما قدم NaViT تساقط المفاتيح الجزئية أثناء التدريب تساقط 50% من المفاتيح عشوائيا عبر المفرد والتي تساعد على تنظيم وتسريع التدريب. الورثة SigLIP 2 هذا.
أي ريس (LLaVA-NeXT)
أيريس من LLaVA-NeXT هو البديل العملي. بالنظر إلى صورة عالية القرار ومؤشر ثابت (CLIP أو SigLIP في 336), الطلاء الصورة:
- اختر ترتيب الشبكة من مجموعة محددة مسبقاً (1x1) ، (1x2) ، (2x1) ، (1x3) ، (3x1) ، (2x2) ، إلخ التي تناسب تناسب الصورة بشكل أفضل.
- صب الصورة الكاملة في الشبكة، كل صب صب تصبح 336x336 محصول.
- كما أنّه يجب أن يكون هناك صورة صغيرة: الصورة بأكملها قد تمّ تحويلها إلى 336x336 كرمز للسياق العالمي.
- قم بتشفير كل طوب عبر رمز 336 المجمد، و قم بتحديد رموز الطوب + رموز الصورة الصغيرة.
لـ 672x672 صورة في شبكة 2x2 بالإضافة إلى صورة صغيرة: 4 * 576 + 576 = 2880 رمزاً بصرياً. مكلفة ولكنها فعالة يرى ماجستير في التدريب التفاصيل المحلية والسياق العالمي.
AnyRes هو الطريق المفضل عندما يتم تجميد مرموزك ويؤيد فقط قرار واحد. فإنه يفجر عدد الرموز للصور الكبيرة (صورة 1344x1344 في شبكة 4x4 هي 9216 + 576 ≈ 9800 رموز، والتي تملأ معظم سياق 8k LLM).
م-روبي (Qwen2-VL)
قوان 2-VL قدمت إضافة الموقف المتحرك متعدد الطرق. بدلاً من المواقع الفقرية من NaViT أو البلاط والصورة الصغيرة من AnyRes ، يحمل كل ملصق وضعًا ثلاثي الأبعاد (الزمني ، والارتفاع ، والعرض). تتعامل دورانات البحث / المفتاح مع H ، W ، والطول الزمني التعسفي.
M-RoPE يرسل القرار الديناميكي الأصلي دون إعادة التدريب. عند استنتاج إطعام أي صورة HxW ، ينتج إمبيدر اللمسات H/14 x W/14 رموز ، وتحصل كل رموز على موقعها (t = 0 ، r = صف ، c = col) ، يقوم RoPE بتدوير الاهتمام بأوتارية مناسبة ، ويقوم Qwen2.5-VL و Qwen3-VL بمواصلة هذا. V2PE من InternVL3 هو نفس الفكرة مع تشفير متغير لكل طريقة.
على عكس AnyRes ، M-RoPE هو O(H x W / P^2) رموز عند قرار محلي لا تخزين الطلاء فوق. على عكس NaViT ، لا يزال يتوقع صورة واحدة لكل خط. لا يزال الحزم عبر القرارات تحتاج إلى معطلة-n'-pack على الأعلى.
NaFlex (SigLIP 2)
NaFlex هو وضع التردد الأصلي لمفتاح SigLIP 2. يعمل نموذج واحد على طولات تسلسل متعددة (256, 729, 1024 رمزا) عند الاستنتاج. في الداخل يستخدم معطفاً على نمط NaViT أثناء التدريب والمواقع الفصلية المطلقة لكل معطفاً. نقطة البيع: نقطة تفتيش واحدة ، اختر ميزانية رمزاً الخاصة بك عند الاستنتاج بناءً على المهمة.
لمهام تعريفية (التصنيف، الاستعراض) ، 256 رمزا. ل OCR أو فهم الرسم البياني، 1024 رمزا. لا إعادة التدريب.
قناع التعبئة
القناع المُشكل الحجر هو المكان الذي تعثّر فيه معظم التطبيقات.N_totalتغطية الصور i=0..B-1مع الطول n_i، القناعMمن الشكل(N_total, N_total)هو 1 إذا كان كلا المؤشرات تقع في نفس الكتل الصورة، وإلا 0. يمكنك بناءها من قائمة الطول التراكمية:
offsets = [0, n_0, n_0+n_1, ..., N_total]
M[i, j] = 1 iff there exists b where offsets[b] <= i < offsets[b+1] and offsets[b] <= j < offsets[b+1]هذا خط واحد في PyTorch معtorch.block_diagأو جمع صريح. مسار طول المتغير في FlashAttention (cu_seqlens) يفرغ القناع بالكامل ويتم خلال تسلسلات باستخدام الجهاز التنسوري التراكمي مباشرة ~ 10x أسرع من قناع كثيف للكفائز النموذجية.
ميزانيات الوسائل
اختر استراتيجيتك حسب المهمة:
- OCR / وثائق: 1024-4096 رموز. SigLIP 2 NaFlex في 1024, أو AnyRes 3x3 + صورة صغيرة.
- الرسوم البيانية و UI: 729-1024 رموز في 384-448 الأصلي. Qwen2.5VL القرار الديناميكي مع أقصى حد من البكسلات.
- صور طبيعية: 256-576 رمزاً هو بخير. الـ LLM التدريجي يرى ما يكفي. دفع رمزاً حيث كثافة المحتوى مرتفعة.
- الفيديو: 64-128 رمزا لكل إطار بعد جمع المكان، 2-8 FPS. الدروس 12.17 تغطي هذا.
قاعدة الإنتاج 2026: اختر قبعة أكس-بيكسل لكل مهمة، قم بتشفير النسبة الأصلية إلى تلك القفصة، وعبّر اللحظة، وقلق من التدليك.min_pixelsوmax_pixelsلهذا القنبلة بالضبط
استخدمها
code/main.pyيطبق معطفاً "بالتزاوج" لفرقة مختلفة من الصور ذات إحداثيات البيكسل كاملة.
- يأخذ قائمة من حجم الصورة (H, W).
- يحسب طول تسلسل اللصوص لكل صورة عند حجم اللصوص 14.
- يُغلفهم في تسلسل واحد بطول إجمالي
sum(n_i). . . - يُبني قناع الإنتباه المُشكل (كثيف، لضوحة).
- يُقارن التكلفة المُغلفة مقابل الحجم التربيعي وتربية AnyRes.
- يطبخ جدول ميزانية رمزية لفرقة مختلطة (الوصول، الرسم البياني، لقطة الشاشة، الصورة).
إشغله، الأرقام التي تنسحب هي السبب في كل 2026 مفتوحة VLM يستخدم معطفاً
أرسله
هذا الدرس يُنتجoutputs/skill-resolution-budget-planner.md. بالنظر إلى حجم العمل المختلط في النسب الجوهرية (OCR والرسوم البيانية والصور والإطارات الفيديو) وميزانية الرمز الكلي ، فإنه يختار الاستراتيجية الصحيحة (NaFlex أو AnyRes أو M-RoPE أو مربع ثابت) ويصدر تكوينًا لكل طلب. استخدم هذه المهارة عند قياس VLM لمنتج فإنه يمنع انفجار الرمز الصامت 10x الذي يقتل ميزانيات التخفيف.
التمارين
- الإيصالات هي 600 × 1500 (1:2.5). في حجم اللصق 14، كم رموز ذات القرار الأصلي؟ كم بعد التربيع إلى 336؟ والتي تفقد دقة OCR أكثر في الممارسة العملية؟
- قم ببناء قناع الحجر المقطعية لفرقة من أربعة صور بطول 256، 576، 729، 1024. تحقق من المصفوفة الاهتمام هو 2585x2585 و لديها بالضبط
256^2 + 576^2 + 729^2 + 1024^2إدخالات غير صفر.
- لصور 1792x896 في اللمسة 14، قم بالمقارنة: (أ) مربع حجم إلى 336 ثم ترميز، (ب) AnyRes 2x1 + صورة صغيرة، (ج) M-RoPE في الأصلية. أي استخدام أقل رموز؟ الذي يحافظ على أكثر التفاصيل؟
- تنفيذ تساقط المزج الجزئي: مع إعطاء تسلسل معبأ ، إسقاط 50٪ من الرموز بشكل متساوي عشوائي ، وتحديث قناع الشكل الكلي وفقا لذلك. قياس تغير ضيق القناع.
- اقرأ القسم 3.2 من ورقة Qwen2-VL (arXiv:2409.12191).
min_pixelsوmax_pixelsالسيطرة و لماذا كلتا الحدود مهمة
الشروط الرئيسية
| Term | What people say | What it actually means |
|---|---|---|
| Patch-n'-pack | "NaViT-style packing" | Concatenate variable-length patch sequences from different images into one batch dimension |
| Block-diagonal mask | "Packing mask" | Attention mask that confines each image's patches to attend only to themselves, not neighbors in the pack |
| AnyRes | "LLaVA-NeXT tiling" | Split a high-res image into a grid of fixed-size tiles plus a global thumbnail; encode every tile with a fixed encoder |
| NaFlex | "SigLIP 2 native-flex" | Single SigLIP 2 checkpoint that serves 256/729/1024-token budgets at inference without retraining |
| M-RoPE | "Multimodal RoPE" | 3D rotary position encoding (time, row, column) that handles arbitrary H, W, T without position tables |
| cu_seqlens | "FlashAttention packing" | Cumulative-length tensor the FlashAttention varlen path uses instead of a dense block-diagonal mask |
| min_pixels / max_pixels | "Resolution bounds" | Qwen2.5-VL per-request knobs capping token count on very small or very large inputs |
| Visual token budget | "How many tokens per image" | Rough count of patch tokens emitted per image; sets the LLM's prompt budget and attention cost |
المزيد من القراءة
- Dehghani et al. — Patch n' Pack: NaViT (arXiv:2307.06304)
- Wang et al. — Qwen2-VL (arXiv:2409.12191)
- Laurençon et al. — What matters when building vision-language models? (Idefics2, arXiv:2405.02246)
- Tschannen et al. — SigLIP 2 (arXiv:2502.14786)
- Qwen Team — Qwen2.5-VL Technical Report (arXiv:2502.13923)
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.