چیتشیت
تولید ویدیو و سهبعدی
Video and 3D Generation
پچهای Video DiT و اتنشن تفکیکشده، مدلهای جهان، Gaussian splats، مدل NeRF و سهبعدی چندنما. فرمولها و راهحلها.
فهرست مطالب
پایپلاین دیفیوژن ویدیو
معماریرندر و برازش Gaussian splats
گامبهگام- تصویرنگاشت هر گاوسی 3 بعدی به 2 بعدی با پارامترهای بیرونی و درونی دوربین.
- کاشیبندیانتساب هر گاوسی 2 بعدی به کاشیهای صفحهنمایش 16×16.
- مرتبسازیمرتبسازی گاوسیها بر اساس عمق در هر کاشی.
- ترکیبترکیب جلو به عقب در رنگ پیکسل.
- تابع زیانمقایسه رندر با تصویر واقعی مبنا (ground-truth).
- پسانتشاربهروزرسانی
(mu, q, s, alpha, c_lm)با گرادیان کاهشی. - متراکمسازیشبیهسازی گاوسیهای کوچک و تقسیم موارد بزرگ در نقاط با گرادیان بالا.
- هرس کردنحذف گاوسیها با کدر بودنِ پایین. آموزش برای حدود 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 |
مقایسه شیوههای نمایش سهبعدی
مقایسه| عامل | NeRF | 3D Gaussian splats | Triplane | مش (Mesh) |
|---|---|---|---|---|
| ذخیره میکند | وزنهای MLP | گاوسیهای صریح | سه گرید ویژگی 2 بعدی | سطح به همراه متریال PBR |
| رندر | انتگرالگیری پرتو | شطرنجیسازی و ترکیب آلفا | پیمایش پرتو (ray-marching) به همراه MLP | موتور بازیسازی |
| سرعت | 100 تا 1000 برابر کندتر از مش | حدود 100 fps در رزولوشن 1080p روی یک کارت 4090 | تولید با LRM در حدود 5 ثانیه | تولید با TripoSR در حدود 1 ثانیه |
| ویرایش | آموزش مجدد | جابهجایی زیرمجموعهای از گاوسیها | پوشش داده نشده | مشبندی مجدد پیش از انتشار نهایی |
خانوادههای مدل جهان
مقایسه| عامل | تولید ویدیو | مشروط به اکشن | مدل جهان یادگیری تقویتی (RL) |
|---|---|---|---|
| ورودی | پرامپت متنی یا تصویری | فریمهای گذشته + اکشن | حالت + اکشن |
| خروجی | فریمهای ویدیو | فریمهای بعدی | فضای نهفته بعدی + پاداش |
| هدایت در میانه مسیر پیشروی | خیر | بله، کنشهای نهفته | بله |
| مثال | Sora 2 | Genie 3 | DreamerV3 |
پیشفرضها در کد
پیشفرضها| تنظیم | پیشفرض | نکته |
|---|---|---|
`patch_t`, `patch_h`, `patch_w` | 2 | VideoPatch3D ابعاد T، H و W را نصف میکند |
dim | 64 | عرض توکن |
heads | 2 | هر اتنشن در بلوک |
`p_h`, `p_w` in `count_tokens` | 8 | p_t برابر 2 است |
num_splats | 64 | Splats2D در فایل کد |
Adam `lr` | 0.05 | فایل کد از 0.08 استفاده میکند |
Alpha clamp | 0.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 فریمها برای انطباق با پرامپت.