Diffusers documentation
AsymmetricAutoencoderKL
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 gibi görevlere özgü önceliklerden (priors) bilgi birleştiren bir koşullu dal içeren çözücü (decoder) bulunmaktadır; örneğin doldurma işleminde maskelenmemiş görüntü bölgesi. İ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 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ı
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
Ö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
sınıf 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 )
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",)) — örnekleme azaltma blok 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ılan1) — Aşağı blok için katman sayısı. - up_block_types (
tuple[str], isteğe bağlı, varsayılan("UpDecoderBlock2D",)) — Yukarı örneklem bloğu türlerinin tuple'ı. - up_block_out_channels (
tuple[int], isteğe bağlı, varsayılan(64,)) — yukarı blok çıktı kanalları tuple'ı. - layers_per_up_block (
int, isteğe bağlı, varsayılan1) — 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ılan32) — Örnek giriş boyutu. - norm_num_groups (
int, isteğe bağlı, varsayılan32) — ResNet bloklarındaki ilk normalizasyon katmanı için kullanılacak grup sayısı. - scaling_factor (
float, isteğe bağlı, 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 modelinin eğitimi sırasında gizli uzayın birim varyansa sahip olacak şekilde ölçeklenmesinde kullanılır. Gizli değişkenler, difüzyon modeline aktarılmadan öncez = z * scaling_factorformülüyle ölçeklenir. Kod çözme sırasında gizli değişkenler,z = 1 / scaling_factor * zformülüyle orijinal ölçeğe geri getirilir. 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öntemleri (indirme veya kaydetme gibi) görmek için üst sınıfın belgelendirmesine bakın.
forward
< source >( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
Parametreler
- sample (
torch.Tensor) — Girdi örneği. - mask (
torch.Tensor, isteğe bağlı, varsayılanNone) — İsteğe bağlı inpainting maskesi. - sample_posterior (
bool, isteğe bağlı, varsayılanFalse) — Posterior'dan örneklemeye alınıp alınmayacağı. - return_dict (
bool, isteğe bağlı, varsayılanTrue) — Düz bir tuple yerineDecoderOutputdö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 birtorch.Generator.
Dönüş değeri
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
sınıf diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
AutoencoderKL kodlama yönteminin çıktısı.
DecoderOutput
sınıf diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Çözümleme yönteminin çıktısı.