Buckets:

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

AsymmetricAutoencoderKL

Mô hình autoencoder biến phân (VAE) lớn hơn được cải tiến với tổn thất KL cho tác vụ inpainting: Designing a Better Asymmetric VQGAN for StableDiffusion của Zixin Zhu, Xuelu Feng, Dongdong Chen, Jianmin Bao, Le Wang, Yinpeng Chen, Lu Yuan, Gang Hua.

Tóm tắt từ bài báo là:

StableDiffusion là một trình tạo ảnh từ văn bản mang tính cách mạng, đang gây chấn động trong lĩnh vực tạo và chỉnh sửa ảnh. Khác với các phương pháp truyền thống học mô hình khuếch tán trong không gian pixel, StableDiffusion học mô hình khuếch tán trong không gian ẩn thông qua VQGAN, đảm bảo cả hiệu quả lẫn chất lượng. Nó không chỉ hỗ trợ các tác vụ tạo ảnh mà còn cho phép chỉnh sửa ảnh thực, chẳng hạn như inpainting và chỉnh sửa cục bộ. Tuy nhiên, chúng tôi nhận thấy rằng VQGAN thông thường được sử dụng trong StableDiffusion dẫn đến mất thông tin đáng kể, gây ra các hiện tượng méo hình ngay cả trong các vùng ảnh không được chỉnh sửa. Vì vậy, chúng tôi đề xuất một VQGAN bất đối xứng mới với hai thiết kế đơn giản. Thứ nhất, ngoài đầu vào từ bộ mã hóa, bộ giải mã chứa một nhánh điều kiện tích hợp thông tin từ các tiên nghiệm đặc thù cho tác vụ, chẳng hạn như vùng ảnh không bị che trong inpainting. Thứ hai, bộ giải mã nặng hơn đáng kể so với bộ mã hóa, cho phép khôi phục chi tiết tốt hơn trong khi chỉ làm tăng nhẹ tổng chi phí suy luận. Chi phí huấn luyện của VQGAN bất đối xứng của chúng tôi là thấp, và chúng tôi chỉ cần huấn luyện lại một bộ giải mã bất đối xứng mới trong khi giữ nguyên bộ mã hóa VQGAN thông thường và StableDiffusion. VQGAN bất đối xứng của chúng tôi có thể được sử dụng rộng rãi trong các phương pháp inpainting và chỉnh sửa cục bộ dựa trên StableDiffusion. Các thí nghiệm rộng rãi cho thấy nó có thể cải thiện đáng kể hiệu suất inpainting và chỉnh sửa, đồng thời duy trì khả năng tạo ảnh từ văn bản ban đầu. Mã nguồn có sẵn tại https://github.com/buxiangzhiren/Asymmetric_VQGAN

Kết quả đánh giá có thể được tìm thấy trong mục 4.1 của bài báo gốc.

Các checkpoint khả dụng

Ví dụ sử dụng

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[str, ...] = ('DownEncoderBlock2D',), down_block_out_channels: tuple[int, ...] = (64,), layers_per_down_block: int = 1, up_block_types: tuple[str, ...] = ('UpDecoderBlock2D',), up_block_out_channels: tuple[int, ...] = (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)

Nguồn

Tham số:

in_channels (int, tùy chọn, mặc định là 3) : Số kênh trong ảnh đầu vào.

out_channels (int, tuỳ chọn, mặc định là 3) : Số lượng kênh trong đầu ra.

down_block_types (tuple[str], tùy chọn, mặc định là ("DownEncoderBlock2D",)) : tuple các kiểu khối downsample.

down_block_out_channels (tuple[int], optional, mặc định là (64,)) : tuple của số kênh đầu ra của các khối hạ cấp (down block).

layers_per_down_block (int, tuỳ chọn, mặc định là 1) : Số lượng lớp cho khối xuống (down block).

up_block_types (tuple[str], tùy chọn, mặc định là ("UpDecoderBlock2D",)) : tuple các kiểu khối upsample.

up_block_out_channels (tuple[int], optional, mặc định là (64,)) : tuple của số kênh đầu ra của các khối up.

layers_per_up_block (int, tuỳ chọn, mặc định là 1) : Số lượng lớp cho khối up.

act_fn (str, tùy chọn, mặc định là "silu") : Hàm kích hoạt cần sử dụng.

latent_channels (int, tuỳ chọn, mặc định là 4) : Số kênh trong không gian tiềm ẩn.

sample_size (int, tuỳ chọn, mặc định là 32) : Kích thước đầu vào mẫu.

norm_num_groups (int, tuỳ chọn, mặc định là 32) : Số nhóm được sử dụng cho lớp chuẩn hóa đầu tiên trong các khối ResNet.

scaling_factor (float, optional, mặc định là 0.18215) : Độ lệch chuẩn theo từng thành phần của không gian tiềm ẩn đã được huấn luyện, được tính toán bằng cách sử dụng lô đầu tiên của tập dữ liệu huấn luyện. Giá trị này được dùng để chuẩn hóa không gian tiềm ẩn sao cho có phương sai bằng đơn vị khi huấn luyện mô hình khuếch tán. Các biến tiềm ẩn được chuẩn hóa bằng công thức z = z * scaling_factor trước khi được truyền vào mô hình khuếch tán. Khi giải mã, các biến tiềm ẩn được đưa về thang đo gốc bằng công thức: z = 1 / scaling_factor * z. Để biết thêm chi tiết, hãy tham khảo các mục 4.3.2 và D.1 của bài báo High-Resolution Image Synthesis with Latent Diffusion Models.

Thiết kế VQGAN bất đối xứng tốt hơn cho StableDiffusion https://huggingface.co/papers/2306.04632 . Một mô hình VAE với tổn thất KL để mã hóa hình ảnh thành các biến tiềm ẩn và giải mã các biểu diễn tiềm ẩn thành hình ảnh.

Mô hình này kế thừa từ ModelMixin. Hãy xem tài liệu của lớp cha để biết các phương thức chung được triển khai cho tất cả các mô hình (chẳng hạn như tải xuống hoặc lưu trữ).

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)

Nguồn

Tham số:

sample (torch.Tensor) : Mẫu đầu vào.

mask (torch.Tensor, tùy chọn, mặc định là None) : Mặt nạ inpainting tùy chọn.

sample_posterior (bool, tùy chọn, mặc định là False) : Có lấy mẫu từ phân phối hậu nghiệm hay không.

return_dict (bool, tùy chọn, mặc định là True) : Có nên trả về một DecoderOutput thay vì một tuple thông thường hay không.

generator (torch.Generator, tùy chọn) : Một torch.Generator để làm cho việc lấy mẫu trở nên tất định.

Trả về: DecoderOutput hoặc tuple

Nếu return_dict là True, một DecoderOutput sẽ được trả về, ngược lại một tuple thông thường sẽ được trả về.

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

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

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

Nguồn

Tham số:

latent_dist (DiagonalGaussianDistribution) : Đầu ra được mã hóa của Encoder, được biểu diễn dưới dạng mean và logvar của DiagonalGaussianDistribution. DiagonalGaussianDistribution cho phép lấy mẫu các biến ẩn (latents) từ phân phối này.

Đầu ra của phương pháp mã hóa của AutoencoderKL.

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)

Nguồn

Tham số:

sample (torch.Tensor có shape (batch_size, num_channels, height, width)) : Mẫu đầu ra đã giải mã từ lớp cuối cùng của mô hình.

Đầu ra của phương pháp giải mã.

Xet Storage Details

Size:
10.2 kB
·
Xet hash:
81ebdce1ebf3a620c633a657666a3db8b508dbc3ec450c12d6728951be891878

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