فاز 8 · درس 10

تولید ویدیو با مدل‌های دیفیوژن و معماری DiT

نوع
ساختنی
زمان
حدود 45 دقیقه
زبان‌ها
Python
پیش‌نیاز
فاز 8 · درس 07 (دیفیوژن لیتنت)، فاز 7 · درس 09 (ViT)، فاز 8 · درس 06 (DDPM)
یک نوار فیلم سینمایی که در طول زمان باز شده و پچ‌های سه‌بعدی نورانی در قالب ساختار شبکه‌ای ماتریس ترنسفورمر در آن پردازش می‌شوند
فهرست مطالب
  1. صورت مسئله
  2. مبانی نظری
  3. تبدیل به پچ (Patchify)
  4. مدل DiT مکانی-زمانی
  5. شرطی‌سازی متنی
  6. آموزش
  7. چشم‌انداز مدل‌های عملیاتی در سال 2026
  8. پیاده‌سازی از صفر
  9. گام 1: پچ‌بندی یک «ویدیوی» 1-بعدی سینتتیک
  10. گام 2: امبدینگ مکانی برای هر فریم
  11. گام 3: مشاهده‌ی کل توالی توسط نویززدا
  12. گام 4: سنجش پیوستگی زمانی
  13. دام‌ها و خطاهای رایج
  14. استفاده از ابزارهای واقعی
  15. خروجی این درس
  16. تمرین‌ها
  17. اصطلاحات کلیدی
  18. نکته‌ی فنی عملیاتی: لیتنت‌های ویدیو و چالش پهنای باند حافظه
  19. برای مطالعه‌ی بیشتر

تولید تصویر با دیفیوژن سال‌هاست که به پایداری رسیده، اما تعمیم آن به ویدیو با مانعی جدی روبرو بود: یک ویدیوی کوتاه 10 ثانیه‌ای بیش از 1.5 گیگابایت داده‌ی خام پیکسلی تولید می‌کند و پردازش مستقیم آن در کارت‌های گرافیک ناممکن است. برای مهندسان هوش مصنوعی، چالش اصلی تنها ساخت پیکسل‌های چشم‌نواز نیست؛ حفظ پیوستگی نوری، فیزیک اشیا در طول زمان و مدیریت مصرف حافظه در ابعاد زمانی و مکانی گلوگاه‌های اصلی این مسیر هستند.

در این درس یاد می‌گیرید که چگونه معماری ترنسفورمرهای دیفیوژن (DiT) همراه با انکودرهای ویدیویی 3D VAE حجم داده را فشرده کرده و ویدیو را به‌صورت پچ‌های مکانی-زمانی پردازش می‌کنند. همچنین علت پدیده‌ی پرش تصویر (Flicker) در نمونه‌برداری‌های مجزا و سازوکار اتنشن تجزیه‌شده (Factorized Attention) برای غلبه بر محدودیت‌های محاسباتی را با کد خالص بررسی خواهیم کرد.

توجه داشته باشید که آموزش و حتی استنتاج مدل‌های وزن‌باز سنگین مانند CogVideoX یا HunyuanVideo به منابع پردازشی قدرتمندی نیاز دارد. با توجه به اینکه اجاره‌ی GPUهای ابری خارجی برای کاربران داخل ایران به دلیل عدم دسترسی مستقیم به پرداخت ارزی چالش‌برانگیز است، بخش عملی این درس با پایتون خالص و بدون نیاز به سخت‌افزار سنگین طراحی شده تا منطق الگوریتم را روی سیستم شخصی درک کنید؛ اجرای مدل‌های بزرگ‌تر معمولاً به تکنیک‌های کوانتیزه‌سازی یا استفاده از سیستم‌های مجهز به شتاب‌دهنده‌های محلی متکی است.

تصویر یک تنسور 2-بعدی است؛ ویدیو یک تنسور 3-بعدی. مبانی نظری یکسان است، اما بار محاسباتی 10 تا 100 برابر سنگین‌تر می‌شود. مدل Sora از شرکت OpenAI در فوریه 2024 امکان‌پذیر بودن آن را اثبات کرد. تا سال 2026، مدل‌های Veo 2 ،Kling 1.5 ،Runway Gen-3 ،Pika 2.0 و WAN 2.2 ویدیوهای تجاری و نهایی را بر اساس متن با وضوح 1080p تولید می‌کنند — و مجموعه‌مدل‌های با وزن باز (CogVideoX ،HunyuanVideo ،Mochi-1 و WAN 2.2) حدود 12 ماه عقب‌تر از آن‌ها حرکت می‌کنند.

صورت مسئله

یک ویدیوی 10 ثانیه‌ای 1080p با نرخ 24 فریم بر ثانیه، شامل 240 فریم با ابعاد 3×1080×1920 پیکسل است. این حجم، یعنی حدود 1.5 گیگابایت داده‌ی خام برای هر کلیپ. اعمال دیفیوژن در فضای پیکسل (Pixel-space) عملاً غیرممکن است. شما به موارد زیر نیاز دارید:

  1. فشرده‌سازی مکانی-زمانی (Spatiotemporal compression): یک VAE که به‌جای تک‌تک فریم‌ها، کل ویدیو را به توالی مشخصی از پچ‌های (patch) مکانی-زمانی انکود کند.
  2. پیوستگی زمانی (Temporal coherence): محتوا، نورپردازی و هویت اشیا باید در طول چند ثانیه بین فریم‌ها حفظ شوند. شبکه باید حرکت را مدل‌سازی کند.
  3. بودجه‌ی محاسباتی: آموزش مدل ویدیو در مقایسه با تصویر و در اندازه‌ی مدل مشابه، 10 تا 100 برابر پرهزینه‌تر است.
  4. شرطی‌سازی (Conditioning): متن، تصویر (فریم اول)، صدا، یا ویدیویی دیگر. بیشتر مدل‌های پروداکشن هر چهار ورودی را می‌پذیرند.

معماری موفقی که این چالش را حل کرد، ترنسفورمر دیفیوژن (DiT) روی پچ‌های مکانی-زمانی بود که روی دیتاست‌های عظیم شامل (پرامپت، کپشن، ویدیو) آموزش دیده است. تابع زیان (loss) دیفیوژن در اینجا دقیقاً همان تابع درس 06 است.

مبانی نظری

دیفیوژن ویدیو: تبدیل به پچ، DiT، دیکود

تبدیل به پچ (Patchify)

ویدیو را با یک 3D VAE (فشرده‌سازی مکانی-زمانیِ یادگرفته‌شده) انکود کنید. لیتنت حاصل دارای ابعاد [T_latent, H_latent, W_latent, C_latent] خواهد بود. سپس آن را به پچ‌هایی با اندازه‌ی [t_p, h_p, w_p] تقسیم کنید. در مدل‌های مشابه Sora، مقدار t_p = 1 (پچ‌های مجزا برای هر فریم) یا t_p = 2 (هر دو فریم یک پچ) در نظر گرفته می‌شود. یک ویدیوی 10 ثانیه‌ای 1080p در نهایت به حدود 20,000 تا 100,000 پچ فشرده می‌شود.

مدل DiT مکانی-زمانی

یک ترنسفورمر توالی مسطح پچ‌ها را پردازش می‌کند. هر پچ دارای یک امبدینگ مکانی (Positional Embedding) 3-بعدی (زمان + y + x) است. اتنشن معمولاً به‌صورت تجزیه‌شده (factorized) پیاده‌سازی می‌شود:

  • اتنشن مکانی (Spatial attention) میان پچ‌های داخل هر فریم.
  • اتنشن زمانی (Temporal attention) در امتداد فریم‌های مختلف برای یک موقعیت مکانی یکسان.
  • اتنشن 3-بعدی کامل (Full 3D attention) بین 16 تا 100 برابر سنگین‌تر است و تنها در وضوح‌های پایین یا کارهای پژوهشی استفاده می‌شود.

شرطی‌سازی متنی

این کار از طریق کراس‌اتنشن (Cross-Attention) با یک انکودر متنی بزرگ انجام می‌شود (T5-XXL برای Sora؛ مدل CogVideoX-5B نیز از T5-XXL استفاده می‌کند). پرامپت‌های طولانی نقشی کلیدی دارند — مجموعه‌ی آموزشی Sora شامل بازکپشن‌نویسی‌های متراکمِ تولیدشده با GPT با میانگین 200 توکن برای هر کلیپ بود.

آموزش

تابع زیان استاندارد دیفیوژن (پیش‌بینی ε یا v) روی لیتنت‌های مکانی-زمانی اعمال می‌شود. داده‌ها شامل ویدیوهای وب + حدود 100 میلیون کلیپ پالایش‌شده + کپشن‌های متنی سینتتیک است. توان محاسباتی مورد نیاز: بیش از 10,000 ساعت GPU حتی برای یک آزمایش پژوهشی کوچک؛ مقیاس مدلی مانند Sora به بیش از 100,000 ساعت می‌رسد.

چشم‌انداز مدل‌های عملیاتی در سال 2026

مدل تاریخ حداکثر زمان حداکثر وضوح وزن‌های باز؟ ویژگی برجسته
Sora (OpenAI) 2024-02 60 ثانیه 1080p خیر اولین مدلی که ویژگی‌های شبیه‌ساز جهان را در مقیاس بالا نشان داد
Sora Turbo 2024-12 20 ثانیه 1080p خیر نسخه‌ی تجاری Sora با استنتاج 5 برابر سریع‌تر
Veo 2 (Google) 2024-12 8 ثانیه 4K خیر بالاترین کیفیت و درک فیزیک در سال 2025
Veo 3 2025 سه ماهه سوم 15 ثانیه 4K خیر پشتیبانی ذاتی از صدا و کنترل دقیق‌تر دوربین
Kling 1.5 / 2.1 (Kuaishou) 2024-2025 10 ثانیه 1080p خیر بهترین بازنمایی حرکات بدن انسان در اوایل 2025
Runway Gen-3 Alpha 2024-06 10 ثانیه 768p خیر همراه با ابزارهای حرفه‌ای تدوین ویدیو
Pika 2.0 2024-10 5 ثانیه 1080p خیر بیشترین ثبات و یکدستی در حفظ کاراکتر
CogVideoX (THUDM) 2024 10 ثانیه 720p بله (2B، 5B) اولین مدل باز در مقیاس 5 میلیارد پارامتر
HunyuanVideo (Tencent) 2024-12 5 ثانیه 720p بله (13B) پیشرفته‌ترین مدل وزن‌باز در اواخر 2024
Mochi-1 (Genmo) 2024-10 5.4 ثانیه 480p بله (10B) آزادترین مجوز استفاده (Permissive)
WAN 2.2 (Alibaba) 2025-07 5 ثانیه 720p بله قدرتمندترین مدل وزن‌باز در اواسط 2025

مدل‌های دارای وزن باز با سرعتی بیشتر از حوزه‌ی تصویر در حال کم کردن فاصله‌ی خود هستند: ترکیب HunyuanVideo و LoRAهای WAN 2.2 تا اواسط سال 2026 پایه‌ی بیشتر گردش‌کارهای متن‌باز را شکل داده‌اند.

دیفیوژن ویدیونویز ← حرکت پیوسته
VIDEO DIFFUSIONA 3-D VAE compresses the clip into spatiotemporal patches, and a diffusion transformer denoises them. The grey speckle is the noise the model removes step by step; the blue shape resolving and shifting across frames is the temporal coherence the network has to model — the same object, lighting, and motion held consistent through the strip.نویززدایی وصله‌های مکانی‌زمانی طی T گامفریم 1فریم 5
یک 3-D VAE کلیپ را به وصله‌های مکانی‌زمانی فشرده می‌کند و یک ترنسفورمر دیفیوژن آن‌ها را نویززدایی می‌نماید. دانه‌های خاکستری، نویزی هستند که مدل گام‌به‌گام حذف می‌کند؛ شکل آبیِ در حال شکل‌گیری و جابه‌جایی در میان فریم‌ها، همان پیوستگی زمانی است که شبکه باید مدل‌سازی کند — همان شیء، نورپردازی و حرکتی که در سراسر نوار ثابت و منسجم مانده است.

پیاده‌سازی از صفر

اسکریپت code/main.py ایده‌ی اصلی DiT مکانی-زمانی را شبیه‌سازی می‌کند: تبدیل یک ویدیوی سینتتیک کوچک به پچ، افزودن امبدینگ مکانی به هر پچ، و حذف نویز از کل توالی با استفاده از مکانیزم اتنشن ترنسفورمری روی پچ‌ها. بدون استفاده از numpy و صرفاً با پایتون خالص. در اینجا نشان می‌دهیم که حتی در حالت 1-بعدی نیز، وقتی پچ‌های فریم‌های مجاور از نویززدا (denoiser) و امبدینگ‌های مکانی مشترک استفاده می‌کنند، پیوستگی زمانی پدیدار می‌شود.

گام 1: پچ‌بندی یک «ویدیوی» 1-بعدی سینتتیک

def make_video(T_frames=8, rng=None):
    # یک «ویدیو» دنباله‌ای از مقادیر 1 بعدی است که مسیری هموار را دنبال می‌کنند
    base = rng.gauss(0, 1)
    return [base + 0.3 * t + rng.gauss(0, 0.1) for t in range(T_frames)]

گام 2: امبدینگ مکانی برای هر فریم

def pos_embed(t, dim):
    return sinusoidal(t, dim)

گام 3: مشاهده‌ی کل توالی توسط نویززدا

شبکه‌ی کوچک ما به‌جای حذف نویز هر فریم به‌شکل مستقل، مقادیر تمام فریم‌ها را به‌همراه امبدینگ مکانی آن‌ها به هم متصل (concatenate) کرده و نویز همه‌ی فریم‌ها را به‌صورت هم‌زمان پیش‌بینی می‌کند.

گام 4: سنجش پیوستگی زمانی

پس از آموزش، یک ویدیو نمونه‌برداری کنید. میزان اختلاف (دلتا) فریم‌به‌فریم را بسنجید. اگر مدل ساختار زمانی را یاد گرفته باشد، این دلتاها کوچک‌تر از حالتی خواهند ماند که هر فریم به‌طور مستقل نمونه‌برداری شود.

دام‌ها و خطاهای رایج

  • نمونه‌برداری مستقل برای هر فریم = پرش تصویر (Flicker). اگر دیفیوژن تصویر را روی تک‌تک فریم‌ها به‌طور جداگانه اجرا کنید، تصویر چشمک می‌زند؛ چون نویز هر فریم مستقل است. مدل‌های دیفیوژن ویدیو این مشکل را با پیوند زدن فریم‌ها از طریق اتنشن یا نویز مشترک برطرف می‌کنند.
  • اتنشن 3-بعدی ساده‌انگارانه = خطای کمبود حافظه (OOM). اجرای اتنشن 3-بعدی کامل روی لیتنت یک ویدیوی 10 ثانیه‌ای 1080p به صدها میلیارد عملیات نیاز دارد. اتنشن را به دو بخش مکانی و زمانی تجزیه کنید.
  • کپشن‌نویسی داده‌ها مهم‌تر از حجم داده است. مزیت اصلی Sora نسبت به کارهای پیشین (Prior)، آموزش روی کپشن‌هایی با جزئیات حدوداً 10 برابری بود (کلیپ‌هایی که با GPT-4 دوباره برچسب‌گذاری شدند). گزارش فنی OpenAI صراحتاً به این موضوع اشاره دارد.
  • شرطی‌سازی با فریم اول. بیشتر مدل‌های پروداکشن یک تصویر را نیز به‌عنوان فریم اول قبول می‌کنند. این همان حالت «تصویر به ویدیو» (image-to-video) است و در فرآیند آموزش گنجانده می‌شود.
  • انحراف فیزیک (Physics drift). در کلیپ‌های طولانی (بیش از 10 ثانیه)، ناسازگاری‌های جزئی روی هم انباشته می‌شوند. استفاده از تولید مبتنی بر پنجره‌ی لغزان (sliding-window) به‌همراه تثبیت فریم‌های کلیدی (keyframe anchoring) به حل این مشکل کمک می‌کند.

استفاده از ابزارهای واقعی

مورد کاربرد گزینه‌ی برتر 2026
متن به ویدیو با بالاترین کیفیت، سرویس ابری Veo 3 یا Sora
صحنه‌های سینمایی با کنترل حرکات دوربین Runway Gen-3 با motion brush
ثبات چهره و کاراکتر در چندین کلیپ Pika 2.0 یا Kling 2.1
وزن‌های باز با امکان فاین‌تیون سریع WAN 2.2 + LoRA
تصویر به ویدیو WAN 2.2-I2V یا Kling 2.1 I2V یا Runway
همگام‌سازی لب با صدا (Lip sync) Veo 3 (صدای ذاتی) یا مدلی اختصاصی برای هماهنگی لب
ویرایش ویدیو Runway Act-Two یا Kling Motion Brush یا Flux-Kontext (فریم ثابت)

هزینه‌ی تولید هر ثانیه ویدیو با کیفیت یکسان، بین سال‌های 2024 تا 2026 حدود 20 برابر کاهش یافته است.

خروجی این درس

فایل outputs/skill-video-brief.md را ذخیره کنید. این مهارت، یک بریف ویدیویی را (شامل مدت‌زمان، نسبت ابعاد (Aspect ratio)، سبک، برنامه‌ی دوربین، ثبات سوژه و صدا) دریافت می‌کند و موارد زیر را تحویل می‌دهد: مدل و بستر میزبانی، ساختاربندی پرامپت (اصطلاحات فیلم‌برداری، توصیف سوژه، توصیفگرهای حرکتی)، سید (seed) به‌همراه پروتکل بازتولیدپذیری (Reproducibility)، و یک چک‌لیست ارزیابی کیفی فریم‌به‌فریم.

تمرین‌ها

  1. ساده. در code/main.py، اختلاف فریم‌به‌فریم را برای دو حالت مقایسه کنید: (الف) نمونه‌برداری مستقل برای هر فریم، (ب) نمونه‌برداری مشترک کل توالی. میانگین و واریانس دلتاها را گزارش دهید.
  2. متوسط. یک شرط فریم اول اضافه کنید: مقدار فریم 0 را روی مقداری مشخص قفل کنید و باقی فریم‌ها را نمونه‌برداری نمایید. بررسی کنید که این مقدارِ قفل‌شده چگونه در طول فریم‌ها منتشر می‌شود.
  3. پیشرفته. با استفاده از diffusers هاگینگ‌فیس، مدل CogVideoX-2B را روی یک GPU محلی اجرا کنید. زمان لازم برای 20 گام استنتاج با وضوح 720p برای یک کلیپ 6 ثانیه‌ای را بسنجید. اتنشن مکانی-زمانی را پروفایل کنید تا گلوگاه سیستم مشخص شود.

اصطلاحات کلیدی

اصطلاح آنچه گفته می‌شود معنای دقیق فنی
Video VAE «3D VAE» انکودری که ابعاد (T, H, W, C) را به لیتنت مکانی-زمانی فشرده می‌کند.
Patches «توکن‌ها» بلوک‌های 3-بعدی با اندازه‌ی ثابت از فضای لیتنت؛ ورودی مدل DiT.
Factorized attention «مکانی + زمانی» اجرای اتنشن روی فضا و سپس روی زمان؛ صرف‌نظر کردن از اتنشن کامل 3-بعدی.
Image-to-video (I2V) «متحرک کردن عکس» دریافت تصویر + متن توسط مدل و تولید ویدیویی که با آن عکس شروع می‌شود.
Keyframe conditioning «فریم‌های لنگر» قفل کردن فریم‌هایی مشخص برای کنترل مسیر و خط روایی ویدیو.
Motion brush «راهنمای جهت حرکت» ورودی رابط کاربری که در آن کاربر بردارهای حرکتی را روی تصویر نقاشی می‌کند.
Re-captioning «کپشن‌های متراکم» استفاده از LLM برای برچسب‌گذاری مجدد ویدیوهای آموزشی با پرامپت‌های پرجزئیات.
Flicker «آرتیفکت زمانی» ناهماهنگی بین فریم‌های متوالی؛ با نویززدایی جفت‌شده (coupled) برطرف می‌شود.

نکته‌ی فنی عملیاتی: لیتنت‌های ویدیو و چالش پهنای باند حافظه

یک کلیپ 10 ثانیه‌ای 1080p با نرخ 24 فریم بر ثانیه شامل 240 فریم × 1920 × 1080 × 3 یعنی حدود 1.5 گیگابایت پیکسل خام است. پس از فشرده‌سازی 4 برابری با Video VAE (به‌صورت 2 × مکانی × 2 × زمانی)، حجم لیتنت به حدود 100 مگابایت به ازای هر درخواست می‌رسد. پردازش این حجم در یک DiT مکانی-زمانی طی 30 گام با بچ 1، به جابه‌جایی حدود 3 گیگابایت داده در هر گام در حافظه‌ی HBM نیاز دارد — در اینجا گلوگاه اصلی، پهنای باند حافظه است نه توان محاسباتی (FLOPs).

سه اهرم تنظیم در محیط‌های عملیاتی که همگی مستقیماً از مباحث استنتاج در مقیاس پروداکشن می‌آیند:

  • موازی‌سازی تنسوری (TP) در طول DiT: مدل‌های متن به ویدیو معمولاً بیشتر از 10 میلیارد پارامتر دارند. پیکربندی TP=4 روی 4 کارت H100 یک استاندارد رایج است؛ برای مدل‌های رده‌ی 405 میلیارد پارامتر نیز از ترکیب PP=2 × TP=2 استفاده می‌شود. تاخیر (Latency) هر گام استنتاج تقریباً تا رسیدن به دیوار All-Reduce، به‌شکل خطی با افزایش TP کاهش می‌یابد.
  • بچ‌بندی فریم‌ها = بچ‌بندی پیوسته (Continuous batching): ویدیو در مرحله‌ی تولید، ساختاری مشابه یک بچ از فریم‌های متصل‌به‌هم از طریق اتنشن دارد. در صورتی که معماری مدل اجازه‌ی تولید با پنجره‌ی لغزان را بدهد، تکنیک بچ‌بندی پیوسته (زمان‌بندی در حین پرواز یا in-flight) قابل استفاده است: یعنی رندر فریم t+1 هم‌زمان با بازگرداندن فریم t-1 آغاز شود.
  • کش Prefill در سطح کلیپ: در حالت تصویر به ویدیو، شرطی‌سازی فریم اول مشابه مرحله‌ی Prefill پرامپت در یک مدل زبانی است: آن را یک‌بار محاسبه کرده و در تمام مراحل زمانی دیکودر بازاستفاده کنید. این سازوکار در عمل همان KV-Cache برای ویدیو است.

برای مطالعه‌ی بیشتر

سؤالات متداول

چرا نمی‌توان دیفیوژن تصویر را فریم‌به‌فریم برای ساخت ویدیو اجرا کرد؟

نمونه‌برداری مستقل برای هر فریم باعث ایجاد پرش شدید (Flicker) می‌شود؛ زیرا متغیرهای نویز در هر فریم جداگانه تولید شده و هماهنگی مکانی و نوری فریم‌های مجاور از بین می‌رود. مدل‌های ویدیویی باید با اتنشن زمانی یا نویز مشترک فریم‌ها را پیوند دهند.

منظور از اتنشن تجزیه‌شده (Factorized Attention) در مدل‌های ویدیویی چیست؟

محاسبه اتنشن سه‌بعدی کامل میان تمام پچ‌ها بسیار سنگین است. برای کاهش محاسبات، ابتدا اتنشن مکانی درون هر فریم و سپس اتنشن زمانی در همان نقطه مکانی میان فریم‌ها اجرا می‌شود تا مصرف حافظه و بار پردازشی بهینه بماند.

گلوگاه اصلی در استنتاج مدل‌های ویدیویی چیست و چگونه مدیریت می‌شود؟

گلوگاه اصلی پهنای باند حافظه (Memory Bandwidth) است، نه صرفاً توان محاسباتی. برای رفع آن از موازی‌سازی تنسوری (TP)، تکنیک بچ‌بندی پیوسته و کش Prefill برای فریم اول استفاده می‌شود.

ما رو توی گوگل بیشتر ببین

با افزودن نکست ادمین به «منابع ترجیحی» گوگل، درس‌ها و مطالب ما را در بخش اخبار برتر جستجو بیشتر می‌بینید.