Buckets:
| # LTX2VideoDiffusionDecoderModel | |
| مفكّك الفيديو التوزيعي الذي قدمته Lightricks في LTX-2.5. تقوم مراحل الانتباه الجوارية برفع دقة الكامن إلى حجم سياق، ثم تقوم المرحلة النهائية بإزالة الضوضاء من البكسلات مشروطةً بذلك السياق. | |
| إنه مُفكّك (decoder) وليس مُشفّر-مُفكّك (autoencoder): يبقى التشفير مع [AutoencoderKLLTX2Video](/docs/diffusers/main/ar/api/models/autoencoderkl_ltx_2#diffusers.AutoencoderKLLTX2Video)، الذي يستهلك هذا المُفكّك فضاءه الكامن (latent space) دون تغيير، لذا فإن المتغيرات الكامنة (latents) قابلة للتبديل بين المُفكّك التحويلي (convolutional decoder) وهذا المُفكّك. وبما أنه نموذج انتشار (diffusion model) بحد ذاته، فإنّه يُشغَّل بواسطة [LTX2VideoDiffusionDecodePipeline](/docs/diffusers/main/ar/api/pipelines/ltx2#diffusers.LTX2VideoDiffusionDecodePipeline) بدلاً من تمريره كـ `vae` في خط أنابيب (pipeline): شغّل أي خط أنابيب LTX-2 مع `output_type="latent"`، ثم فكّك الترميز. | |
| ```python | |
| import torch | |
| from diffusers import LTX2Pipeline, LTX2VideoDiffusionDecodePipeline, LTX2VideoDiffusionDecoderModel | |
| pipe = LTX2Pipeline.from_pretrained("Lightricks/LTX-2.5-Diffusers", dtype=torch.bfloat16).to("cuda") # or "mps", "xpu", "cpu" | |
| latents = pipe(prompt="a potter shaping a clay vase", output_type="latent").frames | |
| decoder = LTX2VideoDiffusionDecoderModel.from_pretrained( | |
| "Lightricks/LTX-2.5-Diffusers", subfolder="diffusion_decoder", dtype=torch.bfloat16 | |
| ).to("cuda") | |
| decode_pipe = LTX2VideoDiffusionDecodePipeline(diffusion_decoder=decoder, scheduler=pipe.scheduler) | |
| # `denormalize=False`: `output_type="latent"` already applied the latent statistics, so applying them | |
| # again here would scale every channel by its std a second time. | |
| # The decoder also draws the noise it denoises, so decoding is only reproducible with a generator. | |
| video = decode_pipe( | |
| latents, generator=torch.Generator("cuda").manual_seed(0), denormalize=False | |
| ).frames[0] | |
| ``` | |
| `vae` هو مكوّن اختياري في خط أنابيب فك الترميز: لا يُستشار إلا للحصول على إحصاءات الكمون عندما يكون `denormalize=True`، بينما يحمل المُفكّك إحصاءاته الخاصة، لذا لا يحتاج سير عمل مخصص لفك الترميز فقط إلى تحميل مُشفّر-مفكّك ذاتي ثانٍ. | |
| ## واجهات الخلفية للانتباه | |
| يُعبَّر عن نافذة الانتباه الجوارية على شكل `BlockMask`، لذا يعمل المُفكِّك افتراضيًا على واجهة `flex` الانتباه ولا يحتاج إلى أي اعتماد إضافي. لا يجمِّع PyTorch دالة `flex_attention` إلا إذا طُلب منه ذلك، وبدون التجميع تُنشئ الدالة مصفوفة الدرجات الكاملة — وهو أمر غير عملي عند أطوال التسلسلات الكاملة. لذلك، إما أن تجمع المُفكِّك أو تنتقل إلى نواة [NATTEN](https://github.com/SHI-Labs/NATTEN)، وهي أيضًا ما تستخدمه النسخة الأصلية. يجلب المُعالِج NATTEN من Hub ([`shi-labs/natten`](https://huggingface.co/kernels/shi-labs/natten)) عبر حزمة [`kernels`](https://github.com/huggingface/kernels)، لذا يحتاج إلى `pip install kernels` بدلاً من بناء NATTEN محليًا: | |
| ```python | |
| from diffusers.models.autoencoders.ltx2_diffusion_decoder import LTX2VideoVaeNeighborhoodNattenProcessor | |
| decoder.set_attn_processor(LTX2VideoVaeNeighborhoodNattenProcessor()) | |
| ``` | |
| جلب كود تنزيل النواة من Hub، لذا يرمي المعالج استثناءً عند تعطيل الكود عن بُعد على مستوى النظام باستخدام `DIFFUSERS_DISABLE_REMOTE_CODE=true`. | |
| كل وحدة انتباه في المُفكِّك هي انتباه جوار متطابق (فالاختلافات بين المراحل، مثل حجم النواة، موجودة على الوحدة وليس على المُعالِج)، لذا يستبدل `set_attn_processor` جميعها بمثال مشترك واحد. | |
| تغيير *الواجهة الخلفية* (`decoder.set_attention_backend(...)`) إلى أي شيء غير `flex` يؤدي إلى رفع استثناء: لا تقبل أي واجهة خلفية أخرى `BlockMask`. استخدم معالج NATTEN المذكور أعلاه بدلاً من ذلك. | |
| ## تقسيم | |
| يقوم `decoder.enable_tiling()` بفك الترميز في بلاطات متداخلة يتم دمجها معًا مرة أخرى، مما يحدّ من ذروة الذاكرة حسب حجم البلاطة بدلاً من حجم الفيديو. لا تزال مراحل رفع الدقة المبكرة منخفضة التكلفة ترى الكامنة الكاملة — حيث تعمل فقط مرحلة رفع الدقة الأخيرة ومرحلة الانتشار، اللتان تستهلكان الجزء الأكبر من ذاكرة فك الترميز، لكل بلاطة على حدة — لذا فإن التقسيم إلى بلاطات يغيّر المخرجات فقط بالقرب من حدود البلاطات. وبما أن مرحلة الانتشار تُزيل الضوضاء عن كل بلاطة بشكل مستقل، فإن فك الترميز المبوّب لا يعيد إنتاج النتيجة غير المبوّبة بدقة؛ حيث تتطابق أحجام البلاطة والتداخل الافتراضية مع تلك الموجودة في التنفيذ المرجعي. ترفض الانتباه الجوارية أي شبكة أصغر من نواتها، لذا يتم دمج بلاطة متبقية في نهايتها مع جارتها بدلاً من فك ترميزها بشكل منفرد. | |
| ## LTX2VideoDiffusionDecoderModel[[diffusers.LTX2VideoDiffusionDecoderModel]] | |
| #### diffusers.LTX2VideoDiffusionDecoderModel[[diffusers.LTX2VideoDiffusionDecoderModel]] | |
| ```python | |
| diffusers.LTX2VideoDiffusionDecoderModel(out_channels: int = 3, latent_channels: int = 128, patch_size: int = 4, scaling_factor: float = 1.0, decoder_head_dim: int = 64, decoder_stage_channels: tuple[int, ...] = (2048, 1024, 512, 512, 256), decoder_stage_depths: tuple[int, ...] = (4, 6, 4, 2, 8), decoder_stage_kernels: tuple[tuple[int, int, int], ...] = ((3, 7, 7), (3, 7, 7), (3, 5, 5), (3, 5, 5)), decoder_upsample_strides: tuple[tuple[int, int, int], ...] = ((1, 2, 2), (2, 1, 1), (2, 2, 2), (2, 2, 2)), decoder_upsample_channel_reductions: tuple[int, ...] = (2, 2, 1, 2), decoder_stage5_kernel: tuple[int, int, int] = (11, 11, 11), decoder_t_emb_dim: int = 384, decoder_timestep_scale_multiplier: float = 1000.0, decoder_model_output_type: str = 'x0', decoder_num_inference_steps: int = 1, spatial_compression_ratio: int = 32, temporal_compression_ratio: int = 8) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L700) | |
| مفكّك الفيديو التوليدية LTX-2، الذي أُدخل في LTX-2.5. | |
| هذا مُفكّك (decoder) وليس مُشفّر-مُفكّك (autoencoder): فهو لا يحتوي على مُشفّر (encoder) ولا يمكنه إنتاج تمثيلات كامنة (latents). يبقى التشفير على عاتق [AutoencoderKLLTX2Video](/docs/diffusers/main/ar/api/models/autoencoderkl_ltx_2#diffusers.AutoencoderKLLTX2Video)، الذي يستهلك هذا المُفكّك فضاءه الكامن دون تغيير، وبالتالي فإن التمثيلات الكامنة قابلة للتبديل بين المُفكّك التوافقي (convolutional decoder) وهذا المُفكّك. | |
| كما أنه نموذج انتشار وليس مُفكّكًا حتميًا — فهو يُزيل الضوضاء من البكسلات مشروطًا بحجم سياق مبني من الكمونيات — ولهذا السبب يُشغَّل بواسطة [LTX2VideoDiffusionDecodePipeline](/docs/diffusers/main/ar/api/pipelines/ltx2#diffusers.LTX2VideoDiffusionDecodePipeline) بدلاً من أن يُمرَّر كـ`vae` في خط أنابيب. | |
| تُحمَل الإحصاءات الكامنة هنا كخوادم مؤقتة (buffers) بحيث يمكن لخط أنابيب فك الترميز (decode pipeline) إلغاء التطبيع دون تحميل مُشفِّر-مفكِّك ذاتي ثانٍ فقط من أجل متجهين. | |
| يرث هذا النموذج من [ModelMixin](/docs/diffusers/main/ar/api/models/overview#diffusers.ModelMixin). راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ). | |
| #### فك الترميز[[diffusers.LTX2VideoDiffusionDecoderModel.decode]] | |
| ```python | |
| decode(z: Tensor, generator: typing.Optional[torch.Generator] = None, num_inference_steps: int | None = None, return_dict: bool = True) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L988) | |
| فكّ تشفير دفعة من الكمونيات. | |
| `z` يُفترض أن يكون غير مُعايَر مسبقًا (حيث يطبّق خط المعالجة `latents_mean` / `latents_std`)، بما يتوافق مع [AutoencoderKLLTX2Video](/docs/diffusers/main/ar/api/models/autoencoderkl_ltx_2#diffusers.AutoencoderKLLTX2Video). يقوم هذا المُفكّك بإزالة الضوضاء، لذا مرّر `generator` لضمان قابلية التكرار. | |
| #### enable_tiling[[diffusers.LTX2VideoDiffusionDecoderModel.enable_tiling]] | |
| ```python | |
| enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_min_num_frames: int | None = None, tile_sample_stride_height: int | None = None, tile_sample_stride_width: int | None = None, tile_sample_stride_num_frames: int | None = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L787) | |
| **المعاملات:** | |
| tile_sample_min_height (`int`، *اختياري*) : ارتفاع بلاطة واحدة بعد فك الترميز، بالبكسل. | |
| tile_sample_min_width (`int`, *اختياري*) : عرض بلاطة واحدة بعد فك الترميز، بالبكسل. | |
| tile_sample_min_num_frames (`int`، *اختياري*) : عدد إطارات البلاطة المفكوكة الواحدة. | |
| tile_sample_stride_height (`int`, *اختياري*) : المسافة بالبكسل بين أعلىَي بلاطتين عموديتين متتاليتين؛ والفرق عن `tile_sample_min_height` هو التداخل المُدمج. | |
| tile_sample_stride_width (`int`, *اختياري*) : المسافة بالبكسل بين الحواف اليسرى لقطعتين أفقيتين متتاليتين. | |
| tile_sample_stride_num_frames (`int`, *اختياري*) : المسافة بالأطارات بين بدايات بلاطتين زمنيتين متتاليتين. | |
| تفعيل فك الترميز المُجزّأ. مراحل الاستيفاء الحتمي قبل المرحلة الأخيرة تعالج دائمًا الكامن الكامل (تعمل بدقة منخفضة وتكون منخفضة التكلفة)؛ بينما تعمل المرحلة الأخيرة ومكعبات الانتشار الخاصة بالمرحلة الخامسة — والتي تستهلك الجزء الأكبر من ذاكرة فك الترميز — على بلاطات متداخلة يتم دمج حدودها خطيًا. | |
| #### disable_tiling[[diffusers.LTX2VideoDiffusionDecoderModel.disable_tiling]] | |
| ```python | |
| disable_tiling() | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L824) | |
| تعطيل فك الترميز المُجزّأ، والعودة إلى فك ترميز الفيديو بالكامل في مسار واحد. | |
| #### forward[[diffusers.LTX2VideoDiffusionDecoderModel.forward]] | |
| ```python | |
| forward(z: Tensor, generator: typing.Optional[torch.Generator] = None, num_inference_steps: int | None = None, return_dict: bool = True) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L1017) | |
| **المعاملات:** | |
| z (`torch.Tensor`) : قيم كامنة (Latents) بأبعاد `(B, C, F, H, W)`، يُفترض أن تكون غير مُعايرة مسبقًا (حيث يطبّق خط الأنابيب `latents_mean` / `latents_std`)، بما يتوافق مع [AutoencoderKLLTX2Video](/docs/diffusers/main/ar/api/models/autoencoderkl_ltx_2#diffusers.AutoencoderKLLTX2Video). | |
| generator (`torch.Generator`، *اختياري*) : يقوم هذا المُفكِّك بإزالة الضوضاء، لذا مرِّر مُولِّدًا لجعل عملية فك الترميز قابلة للتكرار. | |
| num_inference_steps (`int`، *اختياري*) : عدد خطوات إزالة الضوضاء. القيمة الافتراضية هي قيمة الإعداد `decoder_num_inference_steps` الخاصة بفك الترميز. | |
| return_dict (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إرجاع [DecoderOutput](/docs/diffusers/main/ar/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) بدلاً من tuple عادي. | |
| **يعيد:** [DecoderOutput](/docs/diffusers/main/ar/api/models/autoencoderkl_qwenimage#diffusers.models.autoencoders.vae.DecoderOutput) أو `tuple` | |
| #### tiled_decode[[diffusers.LTX2VideoDiffusionDecoderModel.tiled_decode]] | |
| ```python | |
| tiled_decode(z: Tensor, generator: typing.Optional[torch.Generator] = None, num_inference_steps: int | None = None) | |
| ``` | |
| [المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/ltx2_diffusion_decoder.py#L855) | |
| Decode دفعة من الكمونيات باستخدام المرحلة الحتمية الأخيرة والمرحلة الانتشارية التي تعمل لكل بلاطة. | |
| توجد البلاطات على الشبكة الداخلة إلى المرحلة الحتمية الأخيرة، حيث تُخزَّن خلية واحدة إلى كتلة ثابتة من بكسلات الإخراج؛ يتم تحويل أحجام `tile_sample_*` إلى تلك الشبكة، لذا يجب أن تكون مضاعفات لحجم الخلية (8 بكسل مكانيًا و2 إطار زمنيًا في إعداد الإنتاج). تتبع البلاطات الزمنية خرائط الإطار السببية: تُسقط البلاطة التي تحتوي على t=0 الإطار الرأسي المكرر من التوسيع الزمني، ولا تحمل البلاطة التي تحتوي على نهاية الفيديو سوى حشوة الحدود الخاصة بـ NATTEN. | |
Xet Storage Details
- Size:
- 15.2 kB
- Xet hash:
- d048a4976e9342693ac011d80c1e5c7a3daafdff0eef555e08a7e5afbb7769d6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.