Buckets:

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

AutoencoderKL

Mô hình autoencoder biến phân (VAE) với tổn thất KL được giới thiệu trong Auto-Encoding Variational Bayes bởi Diederik P. Kingma và Max Welling. Mô hình này được sử dụng trong 🤗 Diffusers để mã hóa ảnh thành các ẩn (latents) và giải mã các biểu diễn ẩn thành ảnh.

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

Chúng ta có thể thực hiện suy luận và học tập hiệu quả trong các mô hình xác suất có hướng, khi có các biến ẩn liên tục với phân phối hậu nghiệm không thể tính toán được, và các bộ dữ liệu lớn, như thế nào? Chúng tôi giới thiệu một thuật toán suy luận và học biến phân ngẫu nhiên, có khả năng mở rộng cho các bộ dữ liệu lớn và, dưới một số điều kiện khả vi nhẹ, thậm chí hoạt động trong trường hợp không thể tính toán được. Đóng góp của chúng tôi gồm hai phần. Thứ nhất, chúng tôi chỉ ra rằng việc tham số hóa lại cận dưới biến phân sẽ tạo ra một ước lượng cận dưới có thể được tối ưu hóa một cách đơn giản bằng các phương pháp gradient ngẫu nhiên tiêu chuẩn. Thứ hai, chúng tôi chỉ ra rằng đối với các bộ dữ liệu i.i.d. có các biến ẩn liên tục cho mỗi điểm dữ liệu, suy luận hậu nghiệm có thể được thực hiện đặc biệt hiệu quả bằng cách khớp một mô hình suy luận gần đúng (còn được gọi là mô hình nhận diện) với hậu nghiệm không thể tính toán được bằng cách sử dụng ước lượng cận dưới được đề xuất. Các lợi thế về mặt lý thuyết được phản ánh trong kết quả thực nghiệm.

Tải từ định dạng gốc

Mặc định, AutoencoderKL nên được tải bằng from_pretrained(), nhưng nó cũng có thể được tải từ định dạng gốc bằng cách sử dụng FromOriginalModelMixin.from_single_file như sau:

from diffusers import AutoencoderKL

url = "https://huggingface.co/stabilityai/sd-vae-ft-mse-original/blob/main/vae-ft-mse-840000-ema-pruned.safetensors"  # can also be a local file
model = AutoencoderKL.from_single_file(url)

AutoencoderKL[[diffusers.AutoencoderKL]]

diffusers.AutoencoderKL[[diffusers.AutoencoderKL]]

diffusers.AutoencoderKL(in_channels: int = 3, out_channels: int = 3, down_block_types: tuple[str] = ('DownEncoderBlock2D',), up_block_types: tuple[str] = ('UpDecoderBlock2D',), block_out_channels: tuple[int] = (64,), layers_per_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, shift_factor: float | None = None, latents_mean: tuple[float] | None = None, latents_std: tuple[float] | None = None, force_upcast: bool = True, use_quant_conv: bool = True, use_post_quant_conv: bool = True, mid_block_add_attention: bool = True)

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.

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

block_out_channels (tuple[int], tuỳ chọn, mặc định là (64,)) : bộ tuple của số kênh đầu ra khối.

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.

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.

force_upcast (bool, tuỳ chọn, mặc định là True) : Nếu được bật, tham số này sẽ buộc VAE chạy ở float32 cho các pipeline có độ phân giải ảnh cao, chẳng hạn như SD-XL. VAE có thể được tinh chỉnh / huấn luyện ở dải giá trị thấp hơn mà không mất quá nhiều độ chính xác, trong trường hợp đó có thể đặt force_upcast thành False - xem: https://huggingface.co/madebyollin/sdxl-vae-fp16-fix

mid_block_add_attention (bool, tuỳ chọn, mặc định là True) : Nếu được bật, mid_block của Encoder và Decoder sẽ có các khối attention. Nếu đặt thành false, mid_block sẽ chỉ có các khối resnet

Một mô hình VAE có tổn thất KL để mã hóa ảnh thành các ẩn và giải mã các biểu diễn ẩn 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ữ).

decode[[diffusers.AutoencoderKL.decode]]

decode(z: FloatTensor, return_dict: bool = True, generator = None)

Nguồn

Tham số:

z (torch.Tensor) : Lô đầu vào của các vector ẩn.

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

Trả về: ~models.vae.DecoderOutput hoặc tuple

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

Giải mã một lô ảnh.

encode[[diffusers.AutoencoderKL.encode]]

encode(x: Tensor, return_dict: bool = True)

Nguồn

Tham số:

x (torch.Tensor) : Lô đầu vào của các hình ảnh.

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

Trả về:

Các biểu diễn ẩn của các hình ảnh đã được mã hóa. Nếu return_dict là True, một ~models.autoencoder_kl.AutoencoderKLOutput sẽ được trả về, ngược lại một tuple thông thường sẽ được trả về.

Mã hóa một lô ảnh thành các biến ẩn.

forward[[diffusers.AutoencoderKL.forward]]

forward(sample: Tensor, 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.

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ề: ~models.vae.DecoderOutput hoặc tuple

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

fuse_qkv_projections[[diffusers.AutoencoderKL.fuse_qkv_projections]]

fuse_qkv_projections()

Nguồn

Bật các phép chiếu QKV đã hợp nhất. Đối với các module tự chú ý, tất cả các ma trận chiếu (tức là truy vấn, khóa, giá trị) đều được hợp nhất. Đối với các module chú ý chéo, các ma trận chiếu khóa và giá trị được hợp nhất.

> API này 🧪 đang ở giai đoạn thử nghiệm.

set_default_attn_processor[[diffusers.AutoencoderKL.set_default_attn_processor]]

set_default_attn_processor()

Nguồn

Tắt các bộ xử lý chú ý tùy chỉnh và đặt cài đặt chú ý mặc định.

tiled_decode[[diffusers.AutoencoderKL.tiled_decode]]

tiled_decode(z: Tensor, return_dict: bool = True)

Nguồn

Tham số:

z (torch.Tensor) : Lô đầu vào của các vector ẩn.

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

Trả về: ~models.vae.DecoderOutput hoặc tuple

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

Giải mã một lô ảnh bằng trình giải mã dạng gạch.

tiled_encode[[diffusers.AutoencoderKL.tiled_encode]]

tiled_encode(x: Tensor, return_dict: bool = True)

Nguồn

Tham số:

x (torch.Tensor) : Lô đầu vào của các hình ảnh.

return_dict (bool, tùy chọn, mặc định là True) : Có nên trả về một ~models.autoencoder_kl.AutoencoderKLOutput thay vì một tuple đơn thuần hay không.

Trả về: ~models.autoencoder_kl.AutoencoderKLOutput hoặc tuple

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

Mã hóa một lô ảnh bằng trình mã hóa dạng gạch.

Khi tùy chọn này được bật, VAE sẽ chia tensor đầu vào thành các ô (tiles) để tính toán mã hóa qua nhiều bước. Điều này hữu ích để giữ cho mức sử dụng bộ nhớ luôn ổn định bất kể kích thước ảnh. Kết quả cuối cùng của mã hóa theo ô sẽ khác so với mã hóa không theo ô vì mỗi ô sử dụng một bộ mã hóa khác nhau. Để tránh các hiện tượng méo do chia ô, các ô sẽ chồng lấn lên nhau và được trộn lẫn để tạo ra đầu vào mượt mà. Bạn vẫn có thể nhìn thấy các thay đổi có kích thước bằng ô trong đầu ra, nhưng chúng sẽ ít gây chú ý hơn nhiều.

unfuse_qkv_projections[[diffusers.AutoencoderKL.unfuse_qkv_projections]]

unfuse_qkv_projections()

Nguồn

Tắt dự phóng QKV hợp nhất nếu đã được bật.

> API này 🧪 đang ở giai đoạn thử nghiệm.

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:
14 kB
·
Xet hash:
ef1f7d2e62899aaa97214fd17cb320150662a12b844e6b4a4a39935f5994e6d1

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