Buckets:

hf-doc-build/doc / diffusers /main /tr /api /models /asymmetricautoencoderkl.md
mishig's picture
|
download
raw
9.28 kB

AsymmetricAutoencoderKL

KL kaybı ile inpainting görevi için geliştirilmiş daha büyük varyasyonel otoenkoder (VAE) modeli: Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua tarafından Designing a Better Asymmetric VQGAN for StableDiffusion.

Makalenin özeti şudur:

StableDiffusion, görüntü üretimi ve düzenleme dünyasında büyük yankı uyandıran devrim niteliğinde bir metinden görüntüye üretici modelidir. Piksel uzayında difüzyon modeli öğrenen geleneksel yöntemlerin aksine StableDiffusion, bir VQGAN aracılığıyla latent uzayda difüzyon modeli öğrenerek hem verimliliği hem de kaliteyi garanti altına alır. Sadece görüntü üretimi görevlerini desteklemekle kalmaz, aynı zamanda görüntü doldurma (inpainting) ve yerel düzenleme gibi gerçek görüntüler üzerinde görüntü düzenlemeye de olanak tanır. Ancak StableDiffusion'da kullanılan standart VQGAN'ın önemli miktarda bilgi kaybına yol açtığını ve düzenlenmemiş görüntü bölgelerinde bile bozulma artefaktlarına neden olduğunu gözlemledik. Bu amaçla, iki basit tasarıma sahip yeni bir asimetrik VQGAN öneriyoruz. Öncelikle, kodlayıcıdan gelen girdinin yanı sıra, doldurma (inpainting) gibi görevlere özgü önceliklerden (priors) bilgi birleştiren bir koşullu dal içeren çözücü (decoder) bulunmaktadır. İkincisi, çözücü, kodlayıcıdan çok daha ağırdır; bu da toplam çıkarım maliyetini yalnızca hafifçe artırarak daha ayrıntılı bir geri kazanıma olanak tanır. Asimetrik VQGAN'ımızın eğitim maliyeti düşüktür ve standart VQGAN kodlayıcısı ile StableDiffusion'ı değiştirmeden yalnızca yeni bir asimetrik çözücü yeniden eğitmek yeterlidir. Asimetrik VQGAN'ımız, StableDiffusion tabanlı doldurma (inpainting) ve yerel düzenleme yöntemlerinde yaygın olarak kullanılabilir. Kapsamlı deneyler, orijinal metinden görüntüye yeteneğini korurken doldurma ve düzenleme performansını önemli ölçüde iyileştirebildiğini göstermektedir. Kod, https://github.com/buxiangzhiren/Asymmetric_VQGAN adresinde mevcuttur.

Değerlendirme sonuçları, orijinal makalenin 4.1 bölümünde bulunabilir.

Mevcut denetim noktaları

Örnek Kullanım

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]]

diffusers.AsymmetricAutoencoderKL[[diffusers.AsymmetricAutoencoderKL]]

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

Kaynak

Parametreler:

in_channels (int, isteğe bağlı, varsayılan 3) : Girdi görüntüsündeki kanal sayısı.

out_channels (int, isteğe bağlı, varsayılan 3) : Çıktıdaki kanal sayısı.

down_block_types (tuple[str], isteğe bağlı, varsayılan ("DownEncoderBlock2D",)) : aşağı örneklem bloğu türlerinin tuple'ı.

down_block_out_channels (tuple[int], isteğe bağlı, varsayılan (64,)) : aşağı blok çıktı kanallarının tuple'ı.

layers_per_down_block (int, isteğe bağlı, varsayılan 1) : Down block için katman sayısı.

up_block_types (tuple[str], isteğe bağlı, varsayılan ("UpDecoderBlock2D",)) : örnekleme bloğu türlerinin tuple'ı.

up_block_out_channels (tuple[int], isteğe bağlı, varsayılan (64,)) : up blok çıktı kanallarının tuple'ı.

layers_per_up_block (int, isteğe bağlı, varsayılan 1) : Yukarı blok için katman sayısı.

act_fn (str, isteğe bağlı, varsayılan "silu") : Kullanılacak aktivasyon fonksiyonu.

latent_channels (int, isteğe bağlı, varsayılan 4) : Gizli uzaydaki kanal sayısı.

sample_size (int, isteğe bağlı, varsayılan 32) : Örnek giriş boyutu.

norm_num_groups (int, isteğe bağlı, varsayılan 32) : ResNet bloklarındaki ilk normalizasyon katmanında kullanılacak grup sayısı.

scaling_factor (float, opsiyonel, varsayılan 0.18215) : Eğitim setinin ilk partisi kullanılarak hesaplanan, eğitilmiş gizli uzayın bileşen bazlı standart sapması. Bu değer, difüzyon modeli eğitilirken gizli uzayın birim varyansa ölçeklenmesi için kullanılır. Gizli değişkenler, difüzyon modeline aktarılmadan önce z = z * scaling_factor formülüyle ölçeklenir. Kod çözülürken, gizli değişkenler şu formülle orijinal ölçeğe geri döndürülür: z = 1 / scaling_factor * z. Daha fazla ayrıntı için High-Resolution Image Synthesis with Latent Diffusion Models makalesinin 4.3.2 ve D.1 bölümlerine bakınız.

StableDiffusion için Daha İyi Asimetrik VQGAN Tasarımı https://huggingface.co/papers/2306.04632 . Görselleri latentlere kodlamak ve latent temsilleri görsellere çözmek için KL kaybı kullanan bir VAE modeli.

Bu model ModelMixin sınıfından devralır. Tüm modeller için uygulanan genel yöntemlerini (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.

forward[[diffusers.AsymmetricAutoencoderKL.forward]]

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

Kaynak

Parametreler:

sample (torch.Tensor) : Girdi örneği.

mask (torch.Tensor, isteğe bağlı, varsayılan None) : İsteğe bağlı inpainting maskesi.

sample_posterior (bool, isteğe bağlı, varsayılan False) : Posterior'dan örneklemeye alınıp alınmayacağı.

return_dict (bool, isteğe bağlı, varsayılan True) : Düz bir tuple yerine DecoderOutput döndürülüp döndürülmemesi.

generator (torch.Generator, isteğe bağlı) : Örnekleme işlemini deterministik hale getirmek için kullanılan bir torch.Generator.

Dönüş: DecoderOutput veya tuple

return_dict True ise, DecoderOutput döndürülür; aksi halde düz bir tuple döndürülür.

AutoencoderKLOutput[[diffusers.models.modeling_outputs.AutoencoderKLOutput]]

diffusers.models.modeling_outputs.AutoencoderKLOutput[[diffusers.models.modeling_outputs.AutoencoderKLOutput]]

diffusers.models.modeling_outputs.AutoencoderKLOutput(latent_dist: DiagonalGaussianDistribution)

Kaynak

Parametreler:

latent_dist (DiagonalGaussianDistribution) : Encoder'ın DiagonalGaussianDistribution ortalama ve logvar olarak temsil edilen kodlanmış çıktıları. DiagonalGaussianDistribution, dağılımdan latent örneklemeye olanak tanır.

AutoencoderKL kodlama yönteminin çıktısı.

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)

Kaynak

Parametreler:

sample (torch.Tensor, şekli (batch_size, num_channels, height, width)) : Modelin son katmanından çözümlenmiş çıktı örneği.

Çözümleme yönteminin çıktısı.

Xet Storage Details

Size:
9.28 kB
·
Xet hash:
0e6261b57d146520a0622e53afe5c9f2f53f5c002285adea9fac4dd5dae20b4e

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