Diffusers documentation
AsymmetricAutoencoderKL
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 من الورقة الأصلية.
نقاط التفتيش المتاحة
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
مثال على الاستخدام
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
< source >( 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
< source >( 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
< source >( latent_dist: DiagonalGaussianDistribution )
مخرجات طريقة الترميز encoding في AutoencoderKL.
DecoderOutput
فئة diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
مخرجات طريقة فك الترميز.