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

Model variational autoencoder (VAE) yang lebih besar dan ditingkatkan dengan KL loss untuk tugas inpainting: Designing a Better Asymmetric VQGAN for StableDiffusion oleh Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.

Abstrak dari makalah tersebut adalah:

StableDiffusion adalah generator teks-ke-gambar yang revolusioner dan sedang mengguncang dunia generasi serta pengeditan gambar. Berbeda dengan metode tradisional yang mempelajari model difusi di ruang piksel, StableDiffusion mempelajari model difusi di ruang laten melalui VQGAN, sehingga menjamin efisiensi dan kualitas. StableDiffusion tidak hanya mendukung tugas generasi gambar, tetapi juga memungkinkan pengeditan gambar untuk gambar nyata, seperti inpainting gambar dan pengeditan lokal. Namun, kami mengamati bahwa VQGAN vanilla yang digunakan dalam StableDiffusion menyebabkan hilangnya informasi yang signifikan, sehingga menimbulkan artefak distorsi bahkan di area gambar yang tidak diedit. Untuk itu, kami mengusulkan VQGAN asimetris baru dengan dua desain sederhana. Pertama, selain masukan dari encoder, decoder mengandung cabang kondisional yang mengintegrasikan informasi dari prior yang spesifik tugas, seperti area gambar yang tidak dimasker dalam inpainting. Kedua, decoder jauh lebih berat daripada encoder, memungkinkan pemulihan yang lebih detail dengan hanya sedikit meningkatkan total biaya inferensi. Biaya pelatihan VQGAN asimetris kami murah, dan kami hanya perlu melatih ulang decoder asimetris baru sambil mempertahankan encoder VQGAN vanilla dan StableDiffusion tetap tidak berubah. VQGAN asimetris kami dapat digunakan secara luas dalam metode inpainting dan pengeditan lokal berbasis StableDiffusion. Eksperimen ekstensif menunjukkan bahwa metode ini dapat secara signifikan meningkatkan kinerja inpainting dan pengeditan, sambil mempertahankan kemampuan teks-ke-gambar aslinya. Kode tersedia di https://github.com/buxiangzhiren/Asymmetric_VQGAN

Hasil evaluasi dapat ditemukan di bagian 4.1 dari paper asli.

Checkpoint yang tersedia

Contoh Penggunaan

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

kelas 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 )

Parameter

  • in_channels (int, opsional, default 3) — Jumlah channel pada gambar input.
  • out_channels (int, opsional, default 3) — Jumlah channel pada output.
  • down_block_types (tuple[str], opsional, defaultnya ("DownEncoderBlock2D",)) — tuple dari tipe blok downsample.
  • down_block_out_channels (tuple[int], opsional, default (64,)) — tuple dari saluran output blok down.
  • layers_per_down_block (int, opsional, default 1) — Jumlah layer untuk down block.
  • up_block_types (tuple[str], opsional, defaultnya ("UpDecoderBlock2D",)) — tuple dari tipe blok upsample.
  • up_block_out_channels (tuple[int], opsional, default (64,)) — tuple dari kanal output blok up.
  • layers_per_up_block (int, opsional, default 1) — Jumlah layer untuk up block.
  • act_fn (str, opsional, defaultnya "silu") — Fungsi aktivasi yang akan digunakan.
  • latent_channels (int, opsional, default 4) — Jumlah channel di ruang laten.
  • sample_size (int, opsional, default 32) — Ukuran sampel input.
  • norm_num_groups (int, opsional, defaultnya 32) — Jumlah grup yang digunakan untuk lapisan normalisasi pertama di blok ResNet.
  • scaling_factor (float, opsional, default 0.18215) — Standar deviasi per komponen dari ruang laten yang dilatih, dihitung menggunakan batch pertama dari set pelatihan. Nilai ini digunakan untuk menskalakan ruang laten agar memiliki varians satu saat melatih model difusi. Laten diskalakan dengan rumus z = z * scaling_factor sebelum diteruskan ke model difusi. Saat decoding, laten diskalakan kembali ke skala aslinya dengan rumus: z = 1 / scaling_factor * z. Untuk detail lebih lanjut, lihat bagian 4.3.2 dan D.1 dari paper High-Resolution Image Synthesis with Latent Diffusion Models.

Merancang VQGAN Asimetris yang Lebih Baik untuk StableDiffusion https://huggingface.co/papers/2306.04632 . Model VAE dengan KL loss untuk mengkodekan gambar menjadi latents dan mendekodekan representasi latent menjadi gambar.

Model ini mewarisi dari ModelMixin. Periksa dokumentasi kelas induk untuk metode generiknya yang diimplementasikan untuk semua model (seperti mengunduh atau menyimpan).

forward

< >

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

Parameter

  • sample (torch.Tensor) — Sampel input.
  • mask (torch.Tensor, opsional, default None) — Mask inpainting opsional.
  • sample_posterior (bool, opsional, default False) — Apakah akan mengambil sampel dari posterior.
  • return_dict (bool, opsional, default True) — Apakah akan mengembalikan DecoderOutput alih-alih tuple biasa.
  • generator (torch.Generator, opsional) — torch.Generator untuk membuat sampling menjadi deterministik.

Mengembalikan

DecoderOutput atau tuple

Jika return_dict bernilai True, sebuah DecoderOutput akan dikembalikan, selain itu sebuah tuple biasa akan dikembalikan.

AutoencoderKLOutput

kelas diffusers.models.modeling_outputs.AutoencoderKLOutput

< >

( latent_dist: DiagonalGaussianDistribution )

Parameter

  • latent_dist (DiagonalGaussianDistribution) — Output hasil encoding dari Encoder yang direpresentasikan sebagai mean dan logvar dari DiagonalGaussianDistribution. DiagonalGaussianDistribution memungkinkan pengambilan sampel latents dari distribusi tersebut.

Output dari metode encoding AutoencoderKL.

DecoderOutput

kelas diffusers.models.autoencoders.vae.DecoderOutput

< >

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

Parameter

  • sample (torch.Tensor dengan bentuk (batch_size, num_channels, height, width)) — Contoh output hasil dekoding dari lapisan terakhir model.

Output dari metode decoding.

Update on GitHub