Diffusers documentation
AutoencoderDC
AutoencoderDC
نموذج Autoencoder ثنائي الأبعاد المستخدم في SANA والمُقدَّم في DCAE من قِبل المؤلفين Junyu Chen*، Han Cai*، Junsong Chen، Enze Xie، Shang Yang، Haotian Tang، Muyang Li، Yao Lu، Song Han من مختبر MIT HAN Lab.
ملخص الورقة البحثية هو:
نقدّم هنا 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
< source >( in_channels: int = 3latent_channels: int = 32attention_head_dim: int = 32encoder_block_types: str | tuple[str] = 'ResBlock'decoder_block_types: str | tuple[str] = 'ResBlock'encoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)decoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)encoder_layers_per_block: tuple = (2, 2, 2, 3, 3, 3)decoder_layers_per_block: tuple = (3, 3, 3, 3, 3, 3)encoder_qkv_multiscales: tuple = ((), (), (), (5,), (5,), (5,))decoder_qkv_multiscales: tuple = ((), (), (), (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 = Truedecoder_in_shortcut: bool = Truedecoder_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") — نوع الكتلة المستخدمة للتصعيد (upsampling) في فك الترميز. - 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. راجع توثيق الفئة الأصلية لمعرفة طرقه العامة المُنفَّذة لجميع النماذج (مثل التنزيل أو الحفظ).
encode
< source >( x: Tensorreturn_dict: bool = True )
ترميز دفعة من الصور إلى كامنات.
decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
المعاملات
- z (
torch.Tensor) — دفعة مدخلات من المتجهات الكامنة. - return_dict (
bool، القيمة الافتراضيةTrue) — ما إذا كان يجب إرجاع~models.vae.DecoderOutputبدلاً من tuple عادي.
يعيد
~models.vae.DecoderOutput أو tuple
If return_dict is True, a ~models.vae.DecoderOutput is returned, otherwise a plain tuple is
returned.
فكّ تشفير دفعة من الصور.
enable_tiling
< source >( tile_sample_min_height: int | None = Nonetile_sample_min_width: int | None = Nonetile_sample_stride_height: float | None = Nonetile_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
< source >( sample: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
DecoderOutput
فئة diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
مخرجات طريقة فك الترميز.