Buckets:

hf-doc-build/doc / diffusers /v0.43.0 /ar /api /models /autoencoder_dc.md
mishig's picture
|
download
raw
15.9 kB

AutoencoderDC

نموذج Autoencoder ثنائي الأبعاد المستخدم في SANA والمُقدَّم في DCAE من قِبل المؤلفين Junyu Chen*، Han Cai*، Junsong Chen، Enze Xie، Shang Yang، Haotian Tang، Muyang Li، Yao Lu، Song Han من مختبر MIT HAN.

ملخص الورقة البحثية هو:

نقدّم هنا Deep Compression Autoencoder (DC-AE)، وهو عائلة جديدة من نماذج الترميز الذاتي (autoencoder) لتسريع نماذج الانتشار عالية الدقة. لقد أظهرت نماذج الترميز الذاتي الحالية نتائج مبهرة عند نسبة ضغط مكانية معتدلة (مثل 8x)، لكنها تفشل في الحفاظ على دقة إعادة بناء مرضية عند نسب الضغط المكانية العالية (مثل 64x). نتعامل مع هذا التحدي من خلال تقديم تقنيتين رئيسيتين: (1) الترميز الذاتي المتبقي (Residual Autoencoding)، حيث نصمّم نماذجنا لتتعلم المتبقيات (residuals) بناءً على الميزات المحوّلة من الفضاء إلى القناة (space-to-channel transformed features) لتخفيف صعوبة التحسين في الترميزات الذاتية ذات الضغط المكاني العالي؛ (2) التكيف عالي الدقة المنفصل (Decoupled High-Resolution Adaptation)، وهو استراتيجية تدريب من ثلاث مراحل منفصلة بكفاءة للتخفيف من عقوبة التعميم (generalization penalty) في الترميزات الذاتية ذات الضغط المكاني العالي. بفضل هذه التصاميم، نرفع نسبة الضغط المكانية للترميز الذاتي حتى 128 مع الحفاظ على جودة إعادة البناء. عند تطبيق DC-AE الخاص بنا على نماذج الانتشار الكامنة (latent diffusion models)، نحقق تسريعًا كبيرًا دون انخفاض في الدقة. على سبيل المثال، على ImageNet 512x512، يوفر DC-AE الخاص بنا تسريعًا في الاستدلال بمقدار 19.1x وتسريعًا في التدريب بمقدار 17.9x على معالج H100 GPU لنموذج UViT-H، مع تحقيق FID أفضل، مقارنةً بترميز SD-VAE-f8 الذاتي الشائع الاستخدام. الكود الخاص بنا متاح في هذا الرابط https URL.

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

تمت مساهمة هذا النموذج من قِبل lawrence-cj.

قم بتحميل نموذج بصيغة Diffusers باستخدام from_pretrained().

from diffusers import AutoencoderDC

ae = AutoencoderDC.from_pretrained("mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", dtype=torch.float32).to("cuda")  # or "mps", "xpu", "cpu"

تحميل نموذج في Diffusers عبر from_single_file

from difusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f32c32-sana-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path) 

يتميز نموذج AutoencoderDC بنسختَي نقطة تحقق من ملف واحد هما in وmix، حيث تتطابق مفاتيح نقاط التحقق بينهما، لكنهما تستخدمان عوامل توسيط مختلفة. لا يمكن لـ Diffusers استنتاج ملف الإعداد الصحيح تلقائيًا للاستخدام مع النموذج بناءً على نقطة التحقق وحدها، وسيتم افتراضيًا تكوين النموذج باستخدام ملف إعداد النسخة mix. لتجاوز ملف الإعداد المحدد تلقائيًا، يُرجى استخدام الحجة config عند استخدام تحميل ملف واحد مع نقاط تحقق من النسخة in.

from diffusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f128c512-in-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path, config="mit-han-lab/dc-ae-f128c512-in-1.0-diffusers")

AutoencoderDC[[diffusers.AutoencoderDC]]

diffusers.AutoencoderDC[[diffusers.AutoencoderDC]]

diffusers.AutoencoderDC(in_channels: int = 3, latent_channels: int = 32, attention_head_dim: int = 32, encoder_block_types: str | tuple[str] = 'ResBlock', decoder_block_types: str | tuple[str] = 'ResBlock', encoder_block_out_channels: tuple[int, ...] = (128, 256, 512, 512, 1024, 1024), decoder_block_out_channels: tuple[int, ...] = (128, 256, 512, 512, 1024, 1024), encoder_layers_per_block: tuple[int, ...] = (2, 2, 2, 3, 3, 3), decoder_layers_per_block: tuple[int, ...] = (3, 3, 3, 3, 3, 3), encoder_qkv_multiscales: tuple[tuple[int, ...], ...] = ((), (), (), (5,), (5,), (5,)), decoder_qkv_multiscales: tuple[tuple[int, ...], ...] = ((), (), (), (5,), (5,), (5,)), upsample_block_type: str = 'pixel_shuffle', downsample_block_type: str = 'pixel_unshuffle', decoder_norm_types: str | tuple[str] = 'rms_norm', decoder_act_fns: str | tuple[str] = 'silu', encoder_out_shortcut: bool = True, decoder_in_shortcut: bool = True, decoder_conv_act_fn: str = 'relu', scaling_factor: float = 1.0)

المصدر

المعاملات:

in_channels (int، القيمة الافتراضية 3) : عدد قنوات الإدخال في العينات.

latent_channels (int، القيمة الافتراضية 32) : عدد القنوات في تمثيل الفضاء الكامن.

encoder_block_types (str | tuple[str]، الافتراضي "ResBlock") : نوع(أنواع) الكتل المستخدمة في المُشفِّر.

decoder_block_types (str | tuple[str]، الافتراضي "ResBlock") : نوع(أنواع) الكتل المستخدمة في المُفكِّك.

encoder_block_out_channels (tuple[int, ...]، القيمة الافتراضية هي (128, 256, 512, 512, 1024, 1024)) : عدد قنوات الإخراج لكل كتلة في المُشفِّر.

decoder_block_out_channels (tuple[int, ...]، القيمة الافتراضية هي (128, 256, 512, 512, 1024, 1024)) : عدد قنوات الإخراج لكل كتلة في فك الترميز.

encoder_layers_per_block (tuple[int]، القيمة الافتراضية هي (2, 2, 2, 3, 3, 3)) : عدد الطبقات في كل كتلة داخل المُشفِّر.

decoder_layers_per_block (tuple[int]، القيمة الافتراضية هي (3, 3, 3, 3, 3, 3)) : عدد الطبقات في كل كتلة داخل المُفكِّك.

encoder_qkv_multiscales (tuple[tuple[int, ...], ...]، القيمة الافتراضية هي ((), (), (), (5,), (5,), (5,))) : إعدادات متعددة المقاييس لتحويلات QKV (الاستعلام-المفتاح-القيمة) في المُشفِّر.

decoder_qkv_multiscales (tuple[tuple[int, ...], ...]، القيمة الافتراضية هي ((), (), (), (5,), (5,), (5,))) : إعدادات متعددة المقاييس لتحويلات QKV (الاستعلام-المفتاح-القيمة) في المُفكِّك.

upsample_block_type (str، الافتراضي "pixel_shuffle") : نوع الكتلة المستخدمة للتصعيد في فك الترميز.

downsample_block_type (str، الافتراضي "pixel_unshuffle") : نوع الكتلة المستخدمة لتقليل العينات في المُشفِّر.

decoder_norm_types (str | tuple[str]، الافتراضي "rms_norm") : نوع أو أنواع التطبيع المستخدمة في المُفكِّك.

decoder_act_fns (str | tuple[str]، الافتراضي "silu") : دالة التنشيط (أو الدوال) المستخدمة في المُفكِّك.

encoder_out_shortcut (bool، القيمة الافتراضية True) : ما إذا كان سيتم استخدام الاختصار في نهاية المُشفِّر.

decoder_in_shortcut (bool، القيمة الافتراضية True) : ما إذا كان سيتم استخدام الاختصار في بداية المُفكِّك.

decoder_conv_act_fn (str، الافتراضي "relu") : دالة التنشيط المستخدمة في نهاية المُفكِّك.

scaling_factor (float، القيمة الافتراضية 1.0) : المعكوس الضربي لجذر متوسط مربع الميزات الكامنة. يُستخدم هذا المقياس لضبط مساحة الكمون بحيث تمتلك تباينًا وحدةً أثناء تدريب نموذج الانتشار. يتم قياس الكمون باستخدام الصيغة z = z * scaling_factor قبل تمريره إلى نموذج الانتشار. عند فك الترميز، يُعاد قياس الكمون إلى المقياس الأصلي باستخدام الصيغة: z = 1 / scaling_factor * z.

نموذج Autoencoder تم تقديمه في DCAE واستخدامه في SANA.

يرث هذا النموذج من ModelMixin. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).

ترميز[[diffusers.AutoencoderDC.encode]]

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

المصدر

المعاملات:

x (torch.Tensor) : دفعة من الصور المدخلة.

return_dict (bool، القيمة الافتراضية True) : ما إذا كان يجب إرجاع ~models.vae.EncoderOutput بدلاً من tuple عادي.

يعيد:

تمثيلات الكامنة للفيديوهات المُرمّزة. إذا كان return_dict صحيحًا (True)، يُعاد ~models.vae.EncoderOutput، وإلا يُعاد tuple عادي.

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

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

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

المصدر

المعاملات:

z (torch.Tensor) : دفعة إدخال من المتجهات الكامنة.

return_dict (bool، القيمة الافتراضية True) : ما إذا كان يجب إرجاع ~models.vae.DecoderOutput بدلاً من tuple عادي.

يعيد: ~models.vae.DecoderOutput أو tuple

إذا كانت return_dict تساوي True، يُعاد ~models.vae.DecoderOutput، وإلا يُعاد tuple عادي.

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

enable_tiling[[diffusers.AutoencoderDC.enable_tiling]]

enable_tiling(tile_sample_min_height: int | None = None, tile_sample_min_width: int | None = None, tile_sample_stride_height: float | None = None, tile_sample_stride_width: float | None = None)

المصدر

المعاملات:

tile_sample_min_height (int, اختياري) : الحد الأدنى للارتفاع المطلوب لعينة حتى يتم فصلها إلى بلاطات عبر بُعد الارتفاع.

tile_sample_min_width (int, اختياري) : الحد الأدنى من العرض المطلوب حتى يتم فصل العينة إلى بلاطات عبر بُعد العرض.

tile_sample_stride_height (int، اختياري) : الحد الأدنى من التداخل بين بلاطتين عموديتين متتاليتين. يهدف هذا إلى ضمان عدم ظهور أي شوائب تخطيط عبر بُعد الارتفاع.

tile_sample_stride_width (int، اختياري) : الخطوة بين بلاطتين أفقيتين متتاليتين. يهدف هذا إلى ضمان عدم إنتاج أي شوائب تبليط عبر بُعد العرض.

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

forward[[diffusers.AutoencoderDC.forward]]

forward(sample: Tensor, return_dict: bool = True)

المصدر

المعاملات:

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

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

يعيد: ~models.vae.DecoderOutput أو tuple

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

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

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

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

المصدر

المعاملات:

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

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

Xet Storage Details

Size:
15.9 kB
·
Xet hash:
105e30b57bdd0169feaad1ab15facd600c06f5ab2ec7885a8a21855897ef3421

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.