Janus-Pro: کدرهای غیرقابل اتصال برای مدل های چند مدل یکپارچه
Type: Build
Languages: Python (stdlib, dual-encoder routing + shared-body signal)
Prerequisites: Phase 12 · 13 (Transfusion), Phase 12 · 14 (Show-o)
Time: ~120 minutes
اهداف یادگیری
- توضیح دهید که چرا یک کدگر مشترک به درک یا کیفیت تولید آسیب می رساند.
- رویت Janus-Pro را شرح دهید: ویژگی های SigLIP در سمت ورودی برای درک، توکن های VQ در هر دو ورودی و خروجی برای تولید.
- دنبال کردن مقیاس بندی مخلوط داده ها که باعث می شود Janus-Pro موفق شود جایی که Janus موفق نشد.
- معماری های جدا شده (Janus-Pro) ، متصل به مداوم (Transfusion) و متصل به منحصربه فرد (Show-o) را مقایسه کنید.
مشکل
مدل های متحد یک بدن ترانسفورماتور را در سراسر درک و تولید به اشتراک می گذارند. تلاش های قبلی (Chameleon، Show-o، Transfusion) همه از یک توکنایزر بصری برای هر دو جهت استفاده می کنند. توکنایزر یک سازش است:
- بهینه سازی برای بازسازی (پدایی): VQ-VAE جزئیات پیکسل های نازک را ضبط می کند اما توکن هایی با همبستگی معنوی ضعیف تولید می کند.
- بهینه سازی برای سیمانیک (فهمی): گنجانده شدن سیگلپ تصاویر "قط" در نزدیکی توکن های "قط" را گروه می کند اما اجازه بازسازی خوب را نمی دهد.
Show-o و Transfusion با مالیات کیفیت قابل مشاهده در یک جهت پرداخت این هزینه را پرداخت می کنند. Janus-Pro می پرسد: چرا نیاز به یک توکنر در حالی که وظایف نیاز های متفاوتی دارند؟
مفهوم
کد بندی بصری قطع شده
معماری Janus-Pro دو کدگر را جدا می کند:
- درک مسیر. تصویر ورودی → سیگلپ-SO400m → دو لایه MLP → بدن ترانسفورماتور.
- مسیر تولید. تصویر ورودی (اگر در یک تصویر موجود است) → VQ tokenizer → ID های توکن → بدن ترانسفورماتور.
- تولید خروجی. توکن های تصویر پیش بینی شده توسط ترانسفورماتور → VQ decoder → پیکسل.
بدن ترانسفورماتور به اشتراک گذاشته شده همه چیز در جریان و پایین جریان بدن به طور خاص انجام می شود
ورودی ها با فرمت فوری مشخص می شوند: a <understand>مسیرهای تگ از طریق سیگلپ<generate>روترها از طریق VQ. یا روترها از کار ضمنی هستند.
چرا این کار می کنه
درک از دست دادن ویژگی های SigLIP را دریافت می کند که تمرین پیش از CLIP برای شباهت معنوی تنظیم شده است. معیار های سنجش مدل نسبت به Show-o / Transfusion بهبود می یابد زیرا ویژگی های ورودی برای کار بهتر است.
از دست دادن نسل توکن های VQ را دریافت می کند که یک توکنایزر برای بازسازی تنظیم کرده است. کیفیت تصویر نسبت به Show-o بهبود می یابد زیرا کد های VQ به طور تمیز به پیکسل ها ترکیب می شوند.
بدن ترانسفورماتور مشترک دو توزیع ورودی را می بیند (SigLIP و VQ) و یاد می گیرد با هر دو کار کند. ادعا: داده های کافی + پارامترهای کافی، بدن سوئیچ را جذب می کند.
مقیاس بندی داده ها Janus vs Janus-Pro
جانوس (اصل، arXiv 2410.13848) جداسازی را معرفی کرد اما در مقیاس کوچک (1.3B پارام، داده های محدود). جانوس-پرو (arXiv 2501.17811) مقیاس:
- پارام 7B (با 1.3B)
- 90 میلیون جفت تصویر-متن برای مرحله 1 (موافق) از 72 میلیون.
- 72M برای مرحله 2 (وحده) از 26M.
- 200 هزار نمونه از دستورات ژن تصویر برای مرحله 3 اضافه شد.
نتیجه: Janus-Pro-7B با LLaVA در MMMU (60.3 در مقابل ~58) مطابقت دارد و DALL-E 3 را در GenEval (0.80 در مقابل 0.67) شکست می دهد. یک مدل باز، رقابتی در هر دو طرف طیف متحد است.
JanusFlow نوع جریان اصلاح شده
JanusFlow (arXiv 2411.07975) مسیر تولید VQ را با مسیر تولید جریان اصلاح شده (مستقیم) تغییر می دهد. تقسیم به SigLIP برای درک + جریان اصلاح شده برای نسل تبدیل می شود. سقف های کیفیت بیشتر افزایش می یابد. معماری همچنان از انکودرهای غیر متصل به بدن مشترک است.
کار بدن مشترک
بدن ترانسفورماتور یک دنباله ی یکپارچه را با دو توزیع ورودی پردازش می کند.
- برای درک: استفاده از ویژگی های SigLIP + توکن های متن → ارسال متن به صورت خودکار.
- برای تولید: استفاده از توکن های متن + (توکن های VQ تصویر اختیاری) → ارسال توکن های VQ تصویر به صورت خودکار.
بدن هیچ وزن خاصی برای هر بلوک ندارد. این ترانسفورماتور سبک متن است که انتظار می رود در داخل Qwen یا Llama پیدا کنید، به علاوه دو آداپتور ورودی.
جالب است بدانید که این بدان معنی است که بدن Janus-Pro می تواند از یک LLM پیش از آموزش آغاز شود. Janus-Pro از DeepSeek-MoE-7B شروع می کند. این انتخاب مهم است: LLM توانایی استدلال را که مدل های متحد خالص از ابتدا تلاش می کنند به دست آورند.
در مقایسه با InternVL-U
InternVL-U (درسه 12.10) در سال 2026 دنباله دار است.
- پیش آموزش مولتیمولی بومی (InternVL3 spine).
- مسیر کدگذاری غیر متصل (SigLIP وارد، VQ + انتشار به سمت خارج)
- درک یکپارچه + نسل + ویرایش
InternVL-U انتخاب معماری Janus-Pro را به یک چارچوب بزرگتر شامل می کند. ایده کدگذاری غیرمسلح اکنون پیش فرض برای مدل های متحد در مقیاس است.
محدودیت ها
کدرهای قطع شده پیچیدگی معماری را اضافه می کنند. دو توکنر برای آموزش، دو مسیر ورودی برای نگهداری، دو مجموعه از حالت شکست. برای محصولات که نیاز به تولید ندارند، Janus-Pro بیش از حد مهندسی شده است.
برای محصولات که نیاز به درک ندارند، Janus- Pro بیش از حد واجد شرایط است یک مدل Stable Diffusion 3 / Flux را انتخاب کنید.
برای محصولات که هر دو مورد نیاز دارند، Janus-Pro اکنون معماری باز مرجع است.
ازش استفاده کن
code/main.pyشبیه سازی مسیر Janus-Pro:
- دو کدگر ساختگی: شبیه SigLIP (به تولید ویکتورهای معنوی 256 بعدی) و شبیه VQ (به تولید کد های عدد کامل).
- یک روتر فوری که بر اساس یک برچسب کار کدر را انتخاب می کند.
- یک بدن مشترک (استاند-این) که به ترتیب توکن ها بدون توجه به اینکه کدرها تولید شده اند، پردازش می کند.
- تغییر از مرحله 1 (تحریف) به مرحله 3 (مغنی آموزش) برنامه نمونه با وزن.
مسیرهای مسیر برای 3 مثال چاپ کنید: تصویر QA، T2I، ویرایش تصویر.
-باده
این درس به ما کمک می کندoutputs/skill-decoupled-encoder-picker.md. به دلیل محصولی که نیاز به تولید یکپارچه + درک در کیفیت مرزها دارد، Janus-Pro، JanusFlow یا InternVL-U را با یک توصیه مقیاس داده های مشخص انتخاب می کند.
تمرینات
- Janus-Pro-7B DALL-E 3 را در GenEval پیروز می کند. توضیح دهید که چرا یک مدل باز 7B می تواند در تولید با یک مدل اختصاصی مرز مطابقت داشته باشد اما در درک نیست.
- اجرای یک تابع روتر: با متن فوری، به عنوان طبقه بندی کنید
understandیاgenerateچطوري با دستورات مبهم مثل "وصف و سپس نقشه" برخورد مي کني؟
- JanusFlow مسیر VQ را با جریان اصلاح شده جایگزین می کند. بدن ترانسفورماتور اکنون چه چیزی را تولید می کند و چه تغییرات در ضایعات ایجاد می شود؟
- یک کار چهارم را پیشنهاد کنید که معماری Janus-Pro می تواند با یک کدگر غیر متصل دیگر انجام دهد. نمونه ها: بخش بندی تصویر (به سبک DINO) ، عمق (به سبک MiDaS).
- بخش 4.2 Janus-Pro را در مورد مقیاس بندی داده ها بخوانید. کدام مرحله داده بیشترین کمک را به افزایش کیفیت T2I در مقایسه با Janus می کند؟
اصطلاحات کلیدی
| Term | What people say | What it actually means |
|---|---|---|
| Decoupled encoding | "Two visual encoders" | Separate tokenizer or encoder per direction: semantic for understanding, reconstruction for generation |
| Shared body | "One transformer" | Single transformer processes either encoder's output; no modality-specific weights |
| SigLIP for understanding | "Semantic features" | CLIP-family vision tower providing rich conceptual features but poor reconstruction |
| VQ for generation | "Reconstruction codes" | Vector-quantized tokens that decode cleanly back to pixels |
| JanusFlow | "Rectified-flow variant" | Janus-Pro with a continuous flow-matching generation head instead of VQ |
| Routing tag | "Task tag" | Prompt marker (<understand> / <generate>) that picks the input encoder |
خواندن بیشتر
- Wu et al. — Janus (arXiv:2410.13848)
- Chen et al. — Janus-Pro (arXiv:2501.17811)
- Ma et al. — JanusFlow (arXiv:2411.07975)
- InternVL-U (arXiv:2603.09877)
- Dong et al. — DreamLLM (arXiv:2309.11499)
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.