Diffusers documentation
AsymmetricAutoencoderKL
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 gốc đượ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ả ở 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 nhiều 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 gốc 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
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-1-5
- https://huggingface.co/cross-attention/asymmetric-autoencoder-kl-x-2
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
lớp 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 )
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, tùy 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], tùy chọn, mặc định là(64,)) — bộ tuple các kênh đầu ra của khối hạ (down block). - layers_per_down_block (
int, tùy 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], tùy chọn, mặc định là(64,)) — bộ tuple các kênh đầu ra của khối up. - layers_per_up_block (
int, tùy 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, tùy chọn, mặc định là 4) — Số lượng kênh trong không gian tiềm ẩn. - sample_size (
int, tùy chọn, mặc định là32) — Kích thước đầu vào mẫu. - norm_num_groups (
int, tùy chọn, mặc định là32) — Số lượng 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, tùy chọn, mặc định là 0.18215) — Độ lệch chuẩn theo từng thành phần của không gian ẩ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 ẩ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 ẩn (latents) được chuẩn hóa bằng công thứcz = z * scaling_factortrước khi được truyền vào mô hình khuếch tán. Khi giải mã, các ẩn được đưa về thang đo ban đầu 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 sử dụng KL loss để mã hóa ảnh thành latents và giải mã các biểu diễn latent thà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
< source >( sample: Tensormask: typing.Optional[torch.Tensor] = Nonesample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → DecoderOutput or tuple
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ừ posterior hay không. - return_dict (
bool, tùy chọn, mặc định làTrue) — Có nên trả về mộtDecoderOutputthay vì một tuple thông thường hay không. - generator (
torch.Generator, tùy chọn) — Mộttorch.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
lớp diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
Đầu ra của phương pháp mã hóa của AutoencoderKL.
DecoderOutput
lớp diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
Đầu ra của phương pháp giải mã.