# AutoencoderKLMiniMaxH3

نموذج الترميز التلقائي التبايني للفيديو (VAE) مع خسارة KL المستخدم في [MiniMax-H3](https://huggingface.co/MiniMaxAI/MiniMax-H3) من MiniMax. يجمع بين مشفر CNN ثلاثي الأبعاد سببي ومفكك ViT غير سببي، ويضغط البيانات 16 مرة مكانيًا و4 مرات زمنيًا.

ثلاثة أشياء تميّزه عن معظم مشفّرات الترميز التلقائي في المكتبة:

- **تُطبَّع القيم الكامنة (Latents) لكل قناة على حدة.** لا يوجد `scaling_factor`: يقوم خط الأنابيب (pipeline) بالتشفير باستخدام `(latent - latents_mean) / latents_std` وفك التشفير باستخدام `latent * latents_std + latents_mean`.
- **اتفاقية البكسل هي RGB مُعايَرة وفق معايير ImageNet فوق نطاق أساسي `[0, 1]`**، وليس النطاق المعتاد `[-1, 1]`. يتوقع `encode` قيمة `(pixel - imagenet_mean) / imagenet_std` ويعيد `decode` قيمًا في ذلك الفضاء نفسه، لذا يطبّق خط الأنابيب `sample * imagenet_std + imagenet_mean` ويقصّ القيم إلى `[0, 1]` قبل المعالجة اللاحقة.
- **تفعيل التقطيع المكاني هو الإعداد الافتراضي.** تم إصدار MiniMax-H3 مع تفعيل التقطيع لكلٍّ من الترميز وفك الترميز، والإطارات المُصدَّرة هي إطارات البلاطات المُدمجة، لذا فإن تعطيله يُغيّر المخرجات. استخدم `enable_tiling` لتغيير هندسة البلاطات و`disable_tiling` لتعطيله.

تُثبَّت الهندسة الزمنية بواسطة `clip_length` (17 إطارًا بكسلًا لكل شريحة مُشفِّر) و`token_drop` (3 إطارات كامنة لاحقة تُستبعد عن كل عملية تشفير)، لذا فإن `17 * n + 5` إطارًا بكسلًا تُقابلها `5 * n + 2` إطارًا كامنة.

```python
import torch
from diffusers import AutoencoderKLMiniMaxH3

vae = AutoencoderKLMiniMaxH3.from_pretrained(
    "MiniMaxAI/MiniMax-H3", subfolder="vae", dtype=torch.float32
).to("cuda")  # or "mps", "xpu", "cpu"
```

## AutoencoderKLMiniMaxH3[[diffusers.AutoencoderKLMiniMaxH3]]

#### diffusers.AutoencoderKLMiniMaxH3[[diffusers.AutoencoderKLMiniMaxH3]]

```python
diffusers.AutoencoderKLMiniMaxH3(in_channels: int = 3, out_channels: int = 3, latent_channels: int = 24, block_out_channels: tuple[int, ...] = (128, 256, 256, 512, 512, 1024), layers_per_block: int = 2, spatial_downsample_factors: tuple[int, ...] = (2, 2, 2, 2, 1, 1), temporal_downsample_factors: tuple[int, ...] = (1, 2, 2, 1, 1, 1), norm_num_groups: int = 32, norm_eps: float = 1e-06, spatial_padding_mode: str = 'reflect', decoder_num_layers: int = 36, decoder_num_attention_heads: int = 32, decoder_attention_head_dim: int = 64, decoder_num_register_tokens: int = 4, decoder_ffn_mult: int = 4, decoder_rope_theta: float = 100.0, decoder_rope_dim_ratio: float = 0.75, decoder_norm_eps: float = 1e-05, clip_length: int = 17, token_drop: int = 3, latents_mean: tuple[float, ...] = (0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0), latents_std: tuple[float, ...] = (1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0))
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L505)

نموذج VAE بمُشفِّر CNN ثلاثي الأبعاد سببي ومُفكِّك ViT غير سببي، يُستخدم في [MiniMax-H3](https://huggingface.co/MiniMaxAI).

يرث هذا النموذج من [ModelMixin](/docs/diffusers/main/ar/api/models/overview#diffusers.ModelMixin). راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).

تُطبَّع الكمونيات (Latents) باستخدام `latents_mean` / `latents_std` لكل قناة بدلاً من `scaling_factor`؛ حيث يقوم خط الأنابيب (pipeline) بالتشفير باستخدام `(latent - latents_mean) / latents_std` وفك التشفير باستخدام `latent * latents_std + latents_mean`.

اتفاقية البكسل هي RGB مُطبَّعة وفق ImageNet على نطاق أساسي `[0, 1]`، وليس `[-1, 1]` المعتاد: يتوقع `encode` قيمة `(pixel - imagenet_mean) / imagenet_std` ويعيد `decode` قيمًا في ذلك الفضاء نفسه، لذا يجب على خط المعالجة تطبيق `sample * imagenet_std + imagenet_mean` (المتوسط `(0.485, 0.456, 0.406)`، والانحراف المعياري `(0.229, 0.224, 0.225)`) ثم تقييد القيم ضمن `[0, 1]` قبل المعالجة اللاحقة.

تُثبَّت الهندسة الزمنية بواسطة `clip_length` (17 إطارًا بكسلًا لكل شريحة مُشفِّر) و`token_drop` (3 إطارات كامنة لاحقة تُستبعد عن كل عملية تشفير): `17 * n + 5` إطارًا بكسلًا تُخضع إلى `5 * n + 2` إطارًا كامنًا.

على عكس معظم مُشفّرات-المُفكّكات الذاتية في المكتبة، يكون التقطيع المكاني **مُفعّلًا افتراضيًا**: فقد أُطلق نموذج MiniMax-H3 مع تفعيل التقطيع لكلٍّ من الترميز وفك الترميز، والإطارات المُطلقة هي إطارات البلاطات المُدموجة، لذا فإن تعطيل التقطيع يُغيّر المخرجات. استخدم `enable_tiling` لتغيير هندسة البلاطات، و`disable_tiling` لتعطيله.

#### ترميز[[diffusers.AutoencoderKLMiniMaxH3.encode]]

```python
encode(x: Tensor, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L855)

**المعاملات:**

x (`torch.Tensor`) : دفعة مدخلات من مقاطع الفيديو، الشكل `(batch_size, in_channels, num_frames, height, width)`.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع [AutoencoderKLOutput](/docs/diffusers/main/ar/api/models/autoencoderkl_qwenimage#diffusers.models.modeling_outputs.AutoencoderKLOutput) بدلاً من tuple عادي.

**يعيد:**

التوزيع الكامن للفيديوهات المُرمّزة. لاحظ أن MiniMax-H3 يُطبّع القيم الكامنة المُستخرجة باستخدام `latents_mean` / `latents_std` بعد ذلك.

ترميز دفعة من مقاطع الفيديو إلى كامنات.

#### فك الترميز[[diffusers.AutoencoderKLMiniMaxH3.decode]]

```python
decode(z: Tensor, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L883)

**المعاملات:**

z (`torch.Tensor`) : دفعة إدخال من مقاطع فيديو كامنة، الشكل `(batch_size, latent_channels, num_latent_frames, height, width)`.

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`

الفيديوهات المُفكّكة، الشكل `(batch_size, out_channels, num_frames, height, width)`.

فكّ تشفير دفعة من مقاطع الفيديو الكامنة.

#### enable_tiling[[diffusers.AutoencoderKLMiniMaxH3.enable_tiling]]

```python
enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_min_overlap_height: int | None = None, tile_sample_min_overlap_width: int | None = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L628)

**المعاملات:**

tile_sample_min_height (`int`, *اختياري*) : ارتفاع البلاطة في فضاء البكسلات. تُقسَّم الإطارات الأطول من هذا الارتفاع على طول بُعد الارتفاع.

tile_sample_min_width (`int`, *اختياري*) : عرض البلاطة في فضاء البكسلات. تُقسَّم الإطارات الأوسع من هذا العرض على طول بُعد العرض.

tile_sample_min_overlap_height (`int`، *اختياري*) : الحد الأدنى للتداخل، بالبكسل، بين بلاطتين عموديتين متتاليتين.

tile_sample_min_overlap_width (`int`، *اختياري*) : الحد الأدنى للتداخل، بالبكسل، بين بلاطتين أفقيتين متتاليتين.

تفعيل ترميز/فك ترميز VAE المُقسّم إلى بلاطات. عند تفعيل هذا الخيار، يقوم VAE بتقسيم الإطارات إلى بلاطات، ثم يرمّز أو يفكّ ترميز كل بلاطة على حدة، وبعدها يمزج التداخلات خطياً لإعادة تجميعها. يقلّل هذا من متطلبات الذاكرة ويتيح معالجة إطارات أكبر.

#### forward[[diffusers.AutoencoderKLMiniMaxH3.forward]]

```python
forward(sample: Tensor, sample_posterior: bool = False, generator: typing.Optional[torch.Generator] = None, return_dict: bool = True)
```

[المصدر](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/autoencoders/autoencoder_kl_minimax_h3.py#L908)

**المعاملات:**

sample (`torch.Tensor`) : دفعة مدخلات من مقاطع الفيديو، الشكل `(batch_size, in_channels, num_frames, height, width)`.

sample_posterior (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان سيتم أخذ عينة من التوزيع اللاحق بدلاً من أخذ وضعه.

generator (`torch.Generator`، *اختياري*) : المولّد المستخدم عند `sample_posterior=True`.

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`

الفيديوهات المُعاد إرسالها، الشكل `(batch_size, out_channels, num_frames, height, width)`.

encode ثم decode دفعة من مقاطع الفيديو.

