# AutoencoderRAE

نموذج مُشفِّر التمثيل التلقائي (RAE) الذي تم تقديمه في [حوّلات الانتشار مع مُشفِّرات التمثيل التلقائية](https://huggingface.co/papers/2510.11690) بواسطة Boyang Zheng وNanye Ma وShengbang Tong وSaining Xie من NYU VISIONx.

يجمع RAE بين مُشفِّر رؤية مُجمَّد مُدرَّب مسبقًا (DINOv2 أو SigLIP2 أو MAE) ومُفكِّك قابل للتدريب على طراز ViT-MAE. في وصفة تدريب RAE ذات المرحلتين، يُدرَّب مُشفِّر-المُفكِّك التلقائي في المرحلة 1 (إعادة البناء)، ثم يُدرَّب نموذج انتشار على فضاء الكمون الناتج في المرحلة 2 (التوليد).

تم إصدار نماذج RAE التالية ودعمها في Diffusers:

| النموذج | المُشفِّر | شكل الكم (مدخل 224 بكسل) |
|:------|:--------|:---------------------------|
| [`nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08`](https://huggingface.co/nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08) | DINOv2-base | 768 x 16 x 16 |
| [`nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08-i512`](https://huggingface.co/nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08-i512) | DINOv2-base (512 بكسل) | 768 x 32 x 32 |
| [`nyu-visionx/RAE-dinov2-wReg-small-ViTXL-n08`](https://huggingface.co/nyu-visionx/RAE-dinov2-wReg-small-ViTXL-n08) | DINOv2-small | 384 x 16 x 16 |
| [`nyu-visionx/RAE-dinov2-wReg-large-ViTXL-n08`](https://huggingface.co/nyu-visionx/RAE-dinov2-wReg-large-ViTXL-n08) | DINOv2-large | 1024 x 16 x 16 |
| [`nyu-visionx/RAE-siglip2-base-p16-i256-ViTXL-n08`](https://huggingface.co/nyu-visionx/RAE-siglip2-base-p16-i256-ViTXL-n08) | SigLIP2-base | 768 x 16 x 16 |
| [`nyu-visionx/RAE-mae-base-p16-ViTXL-n08`](https://huggingface.co/nyu-visionx/RAE-mae-base-p16-ViTXL-n08) | MAE-base | 768 x 16 x 16 |

## تحميل نموذج مُدرَّب مسبقًا

```python
from diffusers import AutoencoderRAE

model = AutoencoderRAE.from_pretrained(
    "nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08"
).to("cuda").eval()  # or "mps", "xpu", "cpu"
```

## ترميز وفك ترميز صورة حقيقية

```python
import torch
from diffusers import AutoencoderRAE
from diffusers.utils import load_image
from torchvision.transforms.functional import to_tensor, to_pil_image

model = AutoencoderRAE.from_pretrained(
    "nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08"
).to("cuda").eval()  # or "mps", "xpu", "cpu"

image = load_image("https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/diffusers/cat.png")
image = image.convert("RGB").resize((224, 224))
x = to_tensor(image).unsqueeze(0).to("cuda")  # (1, 3, 224, 224), values in [0, 1]

with torch.no_grad():
    latents = model.encode(x).latent        # (1, 768, 16, 16)
    recon = model.decode(latents).sample     # (1, 3, 256, 256)

recon_image = to_pil_image(recon[0].clamp(0, 1).cpu())
recon_image.save("recon.png")
```

## التطبيع الكامن

تتضمن بعض نقاط التفتيش المُسبقة التدريب إحصاءات `latents_mean` و`latents_std` لكل قناة لتطبيع الفضاء الكامن. عند وجودها، تُطبّق `encode` و`decode` التطبيع وإزالة التطبيع تلقائيًا، على التوالي.

```python
model = AutoencoderRAE.from_pretrained(
    "nyu-visionx/RAE-dinov2-wReg-base-ViTXL-n08"
).to("cuda").eval()  # or "mps", "xpu", "cpu"

# Latent normalization is handled automatically inside encode/decode
# when the checkpoint config includes latents_mean/latents_std.
with torch.no_grad():
    latents = model.encode(x).latent   # normalized latents
    recon = model.decode(latents).sample
```

## AutoencoderRAE[[diffusers.AutoencoderRAE]]

#### diffusers.AutoencoderRAE[[diffusers.AutoencoderRAE]]

```python
diffusers.AutoencoderRAE(encoder_type: str = 'dinov2', encoder_hidden_size: int = 768, encoder_patch_size: int = 14, encoder_num_hidden_layers: int = 12, decoder_hidden_size: int = 512, decoder_num_hidden_layers: int = 8, decoder_num_attention_heads: int = 16, decoder_intermediate_size: int = 2048, patch_size: int = 16, encoder_input_size: int = 224, image_size: int | None = None, num_channels: int = 3, encoder_norm_mean: list | None = None, encoder_norm_std: list | None = None, latents_mean: typing.Union[list, tuple, torch.Tensor, NoneType] = None, latents_std: typing.Union[list, tuple, torch.Tensor, NoneType] = None, noise_tau: float = 0.0, reshape_to_2d: bool = True, use_encoder_loss: bool = False, scaling_factor: float = 1.0)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_rae.py#L393)

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

encoder_type (`str`، *اختياري*، القيمة الافتراضية `"dinov2"`) : نوع المُشفِّر المُجمَّد الذي سيتم استخدامه. أحد `"dinov2"` أو `"siglip2"` أو `"mae"`.

encoder_hidden_size (`int`، *اختياري*، القيمة الافتراضية `768`) : حجم المخفي لنموذج المُشفِّر.

encoder_patch_size (`int`، *اختياري*، القيمة الافتراضية `14`) : حجم الباتش (Patch size) لنموذج المُشفِّر.

encoder_num_hidden_layers (`int`، *اختياري*، القيمة الافتراضية `12`) : عدد الطبقات المخفية في نموذج المُشفِّر.

patch_size (`int`، *اختياري*، القيمة الافتراضية `16`) : حجم الباتش في فك الترميز (يُستخدم في إزالة الباتش ورأس فك الترميز).

encoder_input_size (`int`، *اختياري*، القيمة الافتراضية `224`) : حجم الإدخال المتوقع من قبل المُشفِّر.

image_size (`int`, *اختياري*) : حجم صورة المخرج من فك الترميز. إذا كانت `None`، يتم اشتقاقه من عدد رموز الترميز و`patch_size` كما في RAE-main: `image_size = patch_size * sqrt(num_patches)`، حيث `num_patches = (encoder_input_size // encoder_patch_size) ** 2`.

num_channels (`int`، *اختياري*، القيمة الافتراضية `3`) : عدد قنوات الإدخال/الإخراج.

encoder_norm_mean (`list`، *اختياري*، القيمة الافتراضية `[0.485, 0.456, 0.406]`) : متوسط لكل قناة لتطبيع مدخلات المُشفِّر (القيم الافتراضية الخاصة بـ ImageNet).

encoder_norm_std (`list`، *اختياري*، القيمة الافتراضية `[0.229, 0.224, 0.225]`) : الانحراف المعياري لكل قناة لتطبيع مدخلات المُشفِّر (القيم الافتراضية الخاصة بـ ImageNet).

latents_mean (`list` أو `tuple`، *اختياري*) : متوسط اختياري لتطبيع الكمون. تُقبل مدخلات الموترات وتُحوَّل إلى قوائم قابلة للتسلسل في الإعداد.

latents_std (`list` أو `tuple`، *اختياري*) : الانحراف المعياري الاختياري لتطبيع الكمون. تُقبل مدخلات الموترات وتُحوَّل إلى قوائم قابلة للتسلسل في الإعدادات.

noise_tau (`float`، *اختياري*، القيمة الافتراضية `0.0`) : مستوى الضوضاء للتدريب (يضيف ضوضاء إلى الكمونات أثناء التدريب).

reshape_to_2d (`bool`، *اختياري*، القيمة الافتراضية `True`) : ما إذا كان يجب إعادة تشكيل الكمونيات إلى صيغة ثنائية الأبعاد (B, C, H, W).

use_encoder_loss (`bool`، *اختياري*، الافتراضي `False`) : ما إذا كان سيتم استخدام حالات المُشفِّر المخفية في الدالة الخاسرة (للتدريب المتقدم).

نموذج Representation Autoencoder (RAE) لتشفير الصور إلى متغيرات كامنة وفك تشفير المتغيرات الكامنة إلى صور.

يستخدم هذا النموذج مُشفِّرًا مُسبَق التدريب مُجمَّدًا (DINOv2 أو SigLIP2 أو MAE) مع مُفكِّك ViT قابل للتدريب لإعادة بناء الصور من التمثيلات المُتعلَّمة.

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

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

```python
encode(x: Tensor, return_dict: bool = True, generator: typing.Optional[torch.Generator] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_rae.py#L640)

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

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_rae.py#L671)

#### forward[[diffusers.AutoencoderRAE.forward]]

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

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/autoencoder_rae.py#L682)

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

sample (`torch.Tensor`) : عينة الإدخال.

return_dict (`bool`، *اختياري*، الافتراضي `True`) : ما إذا كان يجب إرجاع `DecoderOutput` بدلاً من tuple عادي.

generator (`torch.Generator`، *اختياري*) : [`torch.Generator`](https://pytorch.org/docs/stable/generated/torch.Generator.html) لجعل عملية أخذ العينات حتمية.

**يعيد:** `DecoderOutput` أو `tuple`

إذا كان `return_dict` صحيحًا، يُعاد `DecoderOutput`، وإلا يُعاد `tuple` عادي.

## DecoderOutput[[diffusers.models.autoencoders.vae.DecoderOutput]]

#### diffusers.models.autoencoders.vae.DecoderOutput[[diffusers.models.autoencoders.vae.DecoderOutput]]

```python
diffusers.models.autoencoders.vae.DecoderOutput(sample: Tensor, commit_loss: typing.Optional[torch.FloatTensor] = None)
```

[المصدر](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/autoencoders/vae.py#L49)

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

sample (`torch.Tensor` من الشكل `(batch_size, num_channels, height, width)`) : عينة الإخراج المُفكّكة من الطبقة الأخيرة للنموذج.

مخرجات طريقة فك الترميز.

