چیت‌شیت

تولید ویدیو و سه‌بعدی

Video and 3D Generation

پچ‌های Video DiT و اتنشن تفکیک‌شده، مدل‌های جهان، Gaussian splats، مدل NeRF و سه‌بعدی چندنما. فرمول‌ها و راه‌حل‌ها.

  • ۱۲ بخش
  • ۴ درس مرتبط
  • کد و دستورها عیناً از دوره‌ی اصلی
فهرست مطالب
  1. پایپ‌لاین دیفیوژن ویدیو
  2. رندر و برازش Gaussian splats
  3. فرمول‌ها و اعداد
  4. Tiny video DiT
  5. برازش اسپلت‌های 2 بعدی روی یک تصویر
  6. توابع موجود در درس‌ها
  7. nerfstudio و اکسپورت
  8. مقایسه شیوه‌های نمایش سه‌بعدی
  9. خانواده‌های مدل جهان
  10. پیش‌فرض‌ها در کد
  11. عیب‌یابی
  12. پرسش‌ها

پایپ‌لاین دیفیوژن ویدیو

معماری
نهفتهتوکن‌هاکراس‌اتنشنهر گامویدیوT فریم3D VAEفشرده‌سازی مکانی-زمانیتکه‌تکه کردن (Patchify)پچ‌های t_p, h_p, w_pپرامپتکپشن‌نویسی مجدد متراکمانکودر متنT5-XXLVideo DiTموقعیت‌های سه‌بعدی، اتنشن تفکیک‌شدهفضای نهفته نویززدایی‌شدهپیش‌بینی ε یا vفریم‌هارمزگشایی VAE

رندر و برازش Gaussian splats

گام‌به‌گام
  1. تصویرنگاشت هر گاوسی 3 بعدی به 2 بعدی با پارامترهای بیرونی و درونی دوربین.
  2. کاشی‌بندیانتساب هر گاوسی 2 بعدی به کاشی‌های صفحه‌نمایش 16×16.
  3. مرتب‌سازیمرتب‌سازی گاوسی‌ها بر اساس عمق در هر کاشی.
  4. ترکیبترکیب جلو به عقب در رنگ پیکسل.
  5. تابع زیانمقایسه رندر با تصویر واقعی مبنا (ground-truth).
  6. پس‌انتشاربه‌روزرسانی (mu, q, s, alpha, c_lm) با گرادیان کاهشی.
  7. متراکم‌سازیشبیه‌سازی گاوسی‌های کوچک و تقسیم موارد بزرگ در نقاط با گرادیان بالا.
  8. هرس کردنحذف گاوسی‌ها با کدر بودنِ پایین. آموزش برای حدود 30,000 تکرار.

فرمول‌ها و اعداد

مفهوم‌ها
کوواریانس
$\Sigma = R S S^T R^T$ از کواترنیون و مقیاس‌ها.
تصویر
$\Sigma' = J W \Sigma W^T J^T$، یک کوواریانس 2 × 2.
ترکیب
$C = \sum_i \alpha_i T_i c_i$ با $T_i = \prod_{j < i} (1 - \alpha_j)$. مدل NeRF از همان معادله استفاده می‌کند.
رنگ SH
درجه L تعداد $(L+1)^2$ جمله برای هر کانال می‌دهد. درجه 3، 16 جمله تولید می‌کند.
اندازه گاوسی
حدود 60 عدد اعشاری (float). پنج میلیون گاوسی 240 مگابایت می‌گیرد.
توکن‌های ویدیو
$(T / P_t) \cdot (H / P_h) \cdot (W / P_w)$
اتنشن تفکیک‌شده
$(HW) \cdot T^2 + T \cdot (HW)^2$ به جای $O((THW)^2)$.
ویدیوی خام
10 ثانیه 1080p با نرخ 24 fps معادل 240 فریم و حدود 1.5 گیگابایت است.

Tiny video DiT

کد
python
vid = torch.randn(1, 4, 8, 16, 16)                # (N, C, T, H, W)
model = TinyVideoDiT(in_channels=4, dim=64, depth=2, heads=2)
out, grid = model(vid)            # شبکه (4, 8, 8)، خروجی (1, 256, 32)
tokens, grid = self.patch(x)      # Conv3d، استراید برابر کرنل
xt = x.view(n, T, H * W, d).permute(0, 2, 1, 3).reshape(n * H * W, T, d)
a, _ = self.time_attn(self.ln1(xt), self.ln1(xt), self.ln1(xt), need_weights=False)
xs = xt.view(n, T, H * W, d).reshape(n * T, H * W, d)
a, _ = self.space_attn(self.ln2(xs), self.ln2(xs), self.ln2(xs), need_weights=False)
xs = xs + self.mlp(self.ln3(xs))  # MLP پس از زمان و مکان

برازش اسپلت‌های 2 بعدی روی یک تصویر

کد
python
model = Splats2D(num_splats=64, image_size=64)
opt = torch.optim.Adam(model.parameters(), lr=0.05)
for step in range(200):
    pred = model((64, 64))        # rasterise_2d درون
    loss = F.mse_loss(pred, target)
    opt.zero_grad(); loss.backward(); opt.step()
alphas = alphas.clamp(0.0, 0.99)  # درون rasterise_2d
order = torch.argsort(depths)     # اسکالر عمق یادگرفته‌شده در 2 بعد
out = out + (T * a)[..., None] * colours_sorted[i][None, None, :]
T = T * (1.0 - a)                 # ضریب عبور نور

توابع موجود در درس‌ها

کار و کد
وظیفهکد
شمارش توکن‌های ویدیوcount_tokens(T, H, W, p_t=2, p_h=8, p_w=8)
افزودن موقعیت‌های سه‌بعدیrope_3d(tokens, t_dim, h_dim, w_dim, grid)
بلوک زمان سپس مکانDividedAttentionBlock(dim=64, heads=2)
پچ به همراه امبدینگ زمانpatchify_with_pos(noisy)
اندازه‌گیری پرش تصویرframe_deltas(clip)
چگالی گاوسیeval_2d_gaussian(means, covs, points)
ساخت کوواریانس‌هاR @ S @ R.transpose(-1, -2)
رنگ وابسته به نماeval_sh_degree_3(sh_coeffs, dirs)

nerfstudio و اکسپورت

دستورها
دستورعملکرد
pip install nerfstudio gsplatنصب ترینر و شتاب‌دهنده رندرینگ CUDA
ns-download-data exampleدانلود داده‌های نمونه
ns-train splatfacto --data path/to/dataآموزش 3DGS؛ 10 تا 30 دقیقه روی یک RTX 4090
.plyابر گاوسی خام؛ قابل حمل، بزرگ‌ترین فایل
.splatفرمت کوانتیزه‌شده
KHR_gaussian_splattingاستاندارد glTF، سازگار با انواع نرم‌افزارهای نمایش
UsdVolParticleField3DGaussianSplatطرحواره OpenUSD 26.03

مقایسه شیوه‌های نمایش سه‌بعدی

مقایسه
عاملNeRF3D Gaussian splatsTriplaneمش (Mesh)
ذخیره می‌کندوزن‌های MLPگاوسی‌های صریحسه گرید ویژگی 2 بعدیسطح به همراه متریال PBR
رندرانتگرال‌گیری پرتوشطرنجی‌سازی و ترکیب آلفاپیمایش پرتو (ray-marching) به همراه MLPموتور بازی‌سازی
سرعت100 تا 1000 برابر کندتر از مشحدود 100 fps در رزولوشن 1080p روی یک کارت 4090تولید با LRM در حدود 5 ثانیهتولید با TripoSR در حدود 1 ثانیه
ویرایشآموزش مجددجابه‌جایی زیرمجموعه‌ای از گاوسی‌هاپوشش داده نشدهمش‌بندی مجدد پیش از انتشار نهایی

خانواده‌های مدل جهان

مقایسه
عاملتولید ویدیومشروط به اکشنمدل جهان یادگیری تقویتی (RL)
ورودیپرامپت متنی یا تصویریفریم‌های گذشته + اکشنحالت + اکشن
خروجیفریم‌های ویدیوفریم‌های بعدیفضای نهفته بعدی + پاداش
هدایت در میانه مسیر پیش‌رویخیربله، کنش‌های نهفتهبله
مثالSora 2Genie 3DreamerV3

پیش‌فرض‌ها در کد

پیش‌فرض‌ها
تنظیمپیش‌فرضنکته
`patch_t`, `patch_h`, `patch_w`2VideoPatch3D ابعاد T، H و W را نصف می‌کند
dim64عرض توکن
heads2هر اتنشن در بلوک
`p_h`, `p_w` in `count_tokens`8p_t برابر 2 است
num_splats64Splats2D در فایل کد
Adam `lr`0.05فایل کد از 0.08 استفاده می‌کند
Alpha clamp0.99حد بالا به ازای هر گاوسی
Initial Gaussians~100kمقداردهی اولیه از نقاط SfM

عیب‌یابی

عیب‌یابی
  • پرش تصویر در فریم‌ها

    علت
    نمونه‌برداری جداگانه هر فریم
    راه‌حل
    جفت کردن فریم‌ها از طریق اتنشن یا نویز مشترک
  • کمبود حافظه

    علت
    اتنشن سه‌بعدی کامل
    راه‌حل
    فاکتورگیری به بخش مکانی و زمانی
  • دریفت کلیپ‌های بالای 10 ثانیه

    علت
    تجمع خطاها
    راه‌حل
    پنجره‌های لغزان و فریم‌های کلیدی مرجع
  • ناپدید شدن یا merge شدن اشیاء

    علت
    نبود مدل ماندگاری شیء
    راه‌حل
    اجرای بررسی‌های بقای جسم پیش از استقرار
  • برازش سه‌بعدی تار

    علت
    عدم تطابق نماها روی ساختار
    راه‌حل
    دیفیوژن چندنما با اتنشن مشترک
  • 10 میلیون اسپلت، بیش‌برازش (overfit)

    علت
    نبود کنترل بر متراکم‌سازی و هرس
    راه‌حل
    استفاده از روش‌های اکتشافی متراکم‌سازی و هرس کردن
  • وجود سوراخ در مش

    علت
    توپولوژی میدان ضمنی
    راه‌حل
    اجرای یک مش‌ساز مجدد پیش از انتشار نهایی
  • خطای ValueError در rope_3d

    علت
    مجموع t_dim+h_dim+w_dim برابر D نیست
    راه‌حل
    تقسیم D روی هر سه محور

پرسش‌ها

پرسش و پاسخ
چرا 3DGS جایگزین NeRF شد؟
با نرخ بالای 100 fps رندر می‌گیرد، در چند دقیقه آموزش می‌بیند و مستقیماً قابل ویرایش است.
چرا کیفیت 3DGS با NeRF برابری می‌کند؟
هر دو معادله یکسانی از میدان درخشندگی را انتگرال‌گیری می‌کنند.
چه عاملی در زمان سرویس‌دهی Video DiT گلوگاه است؟
پهنای باند حافظه، نه محاسبات FLOPs.
چه چیزی Sora را بیش از همه بهبود داد؟
کپشن‌های حدوداً 10 برابر دقیق‌تر.
استک سه‌بعدی 2026 چگونه کار می‌کند؟
دیفیوژن تصاویر چندنما تولید می‌کند و سپس برازش سه‌بعدی (معمولاً اسپلت‌ها) انجام می‌شود.
کیفیت ویدیو چگونه سنجیده می‌شود؟
با معیار FVD برای کیفیت بصری و CLIPScore فریم‌ها برای انطباق با پرامپت.