Diffusers documentation

AsymmetricAutoencoderKL

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v0.42.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AsymmetricAutoencoderKL

نموذج الترميز التلقائي التبايني (VAE) الأكبر المحسّن مع خسارة KL لمهمة إعادة بناء الصور: Designing a Better Asymmetric VQGAN for StableDiffusion بقلم Zixin Zhu وXuelu Feng وDongdong Chen وJianmin Bao وLe Wang وYinpeng Chen وLu Yuan وGang Hua.

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

يُعدّ StableDiffusion مولّدًا ثوريًا لتحويل النص إلى صور، ويثير ضجة في عالم توليد الصور وتحريرها. وعلى عكس الأساليب التقليدية التي تتعلم نموذج انتشار في فضاء البكسلات، يتعلم StableDiffusion نموذج انتشار في الفضاء الكامن عبر VQGAN، مما يضمن الكفاءة والجودة معًا. فهو لا يدعم مهام توليد الصور فحسب، بل يتيح أيضًا تحرير الصور الحقيقية، مثل إعادة بناء الصور (inpainting) والتحرير المحلي. ومع ذلك، لاحظنا أن VQGAN القياسي المستخدم في StableDiffusion يؤدي إلى فقدان كبير للمعلومات، مما يسبب تشوهات حتى في مناطق الصورة غير المحررة. لهذا الغرض، نقترح VQGAN غير متماثل جديدًا بتصميمين بسيطين. أولاً، بالإضافة إلى المدخلات من المُشفّر، يحتوي المُفكّك على فرع شرطي يدمج معلومات من أسبقية محددة للمهمة، مثل منطقة الصورة غير المقنّعة في إعادة البناء. ثانيًا، يكون المُفكّك أثقل بكثير من المُشفّر، مما يسمح باستعادة أكثر تفصيلًا مع زيادة طفيفة فقط في تكلفة الاستدلال الإجمالية. تكلفة تدريب VQGAN غير المتماثل لدينا منخفضة، ولا نحتاج سوى إلى إعادة تدريب مُفكّك غير متماثل جديد مع إبقاء مُشفّر VQGAN القياسي وStableDiffusion دون تغيير. يمكن استخدام VQGAN غير المتماثل لدينا على نطاق واسع في طرق إعادة البناء والتحرير المحلي القائمة على StableDiffusion. تُظهر التجارب الواسعة أنه يمكن تحسين أداء إعادة البناء والتحرير بشكل كبير، مع الحفاظ على القدرة الأصلية على تحويل النص إلى صور. الكود متاح في https://github.com/buxiangzhiren/Asymmetric_VQGAN

يمكن العثور على نتائج التقييم في القسم 4.1 من الورقة الأصلية.

نقاط التفتيش المتاحة

مثال على الاستخدام

from diffusers import AsymmetricAutoencoderKL, StableDiffusionInpaintPipeline
from diffusers.utils import load_image, make_image_grid


prompt = "a photo of a person with beard"
img_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/celeba_hq_256.png"
mask_url = "https://huggingface.co/datasets/hf-internal-testing/diffusers-images/resolve/main/repaint/mask_256.png"

original_image = load_image(img_url).resize((512, 512))
mask_image = load_image(mask_url).resize((512, 512))

pipe = StableDiffusionInpaintPipeline.from_pretrained("stable-diffusion-v1-5/stable-diffusion-inpainting")
pipe.vae = AsymmetricAutoencoderKL.from_pretrained("cross-attention/asymmetric-autoencoder-kl-x-1-5")
pipe.to("cuda")  # or "mps", "xpu", "cpu"

image = pipe(prompt=prompt, image=original_image, mask_image=mask_image).images[0]
make_image_grid([original_image, mask_image, image], rows=1, cols=3)

AsymmetricAutoencoderKL

فئة diffusers.AsymmetricAutoencoderKL

< >

( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)down_block_out_channels: tuple = (64,)layers_per_down_block: int = 1up_block_types: tuple = ('UpDecoderBlock2D',)up_block_out_channels: tuple = (64,)layers_per_up_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215 )

المعاملات

  • in_channels (int، اختياري، القيمة الافتراضية 3) — عدد القنوات في الصورة المدخلة.
  • out_channels (int، اختياري، القيمة الافتراضية 3) — عدد القنوات في المخرجات.
  • down_block_types (tuple[str]، اختياري، الافتراضي ("DownEncoderBlock2D",)) — مجموعة من أنواع كتل التقليل (downsample).
  • down_block_out_channels (tuple[int]، اختياري، القيمة الافتراضية (64,)) — مجموعة قنوات مخرجات كتل التقليل.
  • layers_per_down_block (int، اختياري، القيمة الافتراضية 1) — عدد الطبقات في كتلة التقليل.
  • up_block_types (tuple[str]، اختياري، الافتراضي ("UpDecoderBlock2D",)) — مجموعة من أنواع كتل التوسيع (upsample).
  • up_block_out_channels (tuple[int]، اختياري، القيمة الافتراضية (64,)) — مجموعة من قنوات مخرجات كتل التوسيع.
  • layers_per_up_block (int، اختياري، القيمة الافتراضية 1) — عدد الطبقات في كتلة الرفع.
  • act_fn (str، اختياري، الافتراضي "silu") — دالة التنشيط المستخدمة.
  • latent_channels (int، اختياري، القيمة الافتراضية 4) — عدد القنوات في الفضاء الكامن.
  • sample_size (int، اختياري، القيمة الافتراضية 32) — حجم المدخلات العينة.
  • norm_num_groups (int، اختياري، القيمة الافتراضية 32) — عدد المجموعات المستخدمة في طبقة التطبيع الأولى في كتل ResNet.
  • scaling_factor (float، اختياري، القيمة الافتراضية 0.18215) — انحراف معياري لكل مكوّن في الفضاء الكامن المُدرَّب، محسوب باستخدام الدفعة الأولى من مجموعة التدريب. يُستخدم هذا المقياس لضبط الفضاء الكامن بحيث يكون له تباين وحدة عند تدريب نموذج الانتشار. يتم قياس الكامنات باستخدام الصيغة z = z * scaling_factor قبل تمريرها إلى نموذج الانتشار. عند فك الترميز، تُعاد الكامنات إلى المقياس الأصلي باستخدام الصيغة: z = 1 / scaling_factor * z. لمزيد من التفاصيل، راجع الأقسام 4.3.2 و D.1 من ورقة High-Resolution Image Synthesis with Latent Diffusion Models.

تصميم VQGAN غير متماثل أفضل لـ StableDiffusion https://huggingface.co/papers/2306.04632 . نموذج VAE يستخدم خسارة KL لتشفير الصور إلى كامنات وفك تشفير التمثيلات الكامنة إلى صور.

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

forward

< >

( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple

المعاملات

  • sample (torch.Tensor) — عينة الإدخال.
  • mask (torch.Tensor، اختياري، القيمة الافتراضية None) — قناع اختياري لإعادة الرسم (inpainting).
  • sample_posterior (bool، اختياري، القيمة الافتراضية False) — ما إذا كان سيتم أخذ عينة من التوزيع اللاحق.
  • return_dict (bool، اختياري، القيمة الافتراضية True) — ما إذا كان يجب إرجاع DecoderOutput بدلاً من tuple عادي.
  • generator (torch.Generator، اختياري) — torch.Generator لجعل عملية أخذ العينات حتمية.

يعيد

DecoderOutput أو tuple

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

AutoencoderKLOutput

فئة diffusers.models.modeling_outputs.AutoencoderKLOutput

< >

( latent_dist: DiagonalGaussianDistribution )

المعاملات

  • latent_dist (DiagonalGaussianDistribution) — المخرجات المُرمَّزة من Encoder ممثَّلةً بمتوسط DiagonalGaussianDistribution ومتغيره اللوغاريتمي. يتيح DiagonalGaussianDistribution أخذ عينات من المتغيرات الكامنة (latents) انطلاقًا من هذا التوزيع.

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

DecoderOutput

فئة diffusers.models.autoencoders.vae.DecoderOutput

< >

( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )

المعاملات

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

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

Update on GitHub