Diffusers documentation
AsymmetricAutoencoderKL
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
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
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
< 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 )
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, default1) — 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, default1) — 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, default32) — Ukuran sampel input. - norm_num_groups (
int, opsional, defaultnya32) — 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 rumusz = z * scaling_factorsebelum 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
< source >( 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, defaultNone) — Mask inpainting opsional. - sample_posterior (
bool, opsional, defaultFalse) — Apakah akan mengambil sampel dari posterior. - return_dict (
bool, opsional, defaultTrue) — Apakah akan mengembalikanDecoderOutputalih-alih tuple biasa. - generator (
torch.Generator, opsional) —torch.Generatoruntuk 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
< source >( latent_dist: DiagonalGaussianDistribution )
Output dari metode encoding AutoencoderKL.
DecoderOutput
kelas diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Output dari metode decoding.