Diffusers documentation

AutoencoderDC

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

AutoencoderDC

Mô hình Autoencoder 2D được sử dụng trong SANA và được giới thiệu trong DCAE bởi các tác giả Junyu Chen*, Han Cai*, Junsong Chen, Enze Xie, Shang Yang, Haotian Tang, Muyang Li, Yao Lu, Song Han từ MIT HAN Lab.

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

Chúng tôi giới thiệu Deep Compression Autoencoder (DC-AE), một họ mô hình autoencoder mới nhằm tăng tốc các mô hình diffusion độ phân giải cao. Các mô hình autoencoder hiện có đã cho thấy kết quả ấn tượng ở tỷ lệ nén không gian vừa phải (ví dụ: 8x), nhưng không duy trì được độ chính xác tái tạo thỏa mãn ở các tỷ lệ nén không gian cao (ví dụ: 64x). Chúng tôi giải quyết thách thức này bằng cách đưa ra hai kỹ thuật chính: (1) Residual Autoencoding, trong đó chúng tôi thiết kế mô hình để học phần dư dựa trên các đặc trưng đã được biến đổi space-to-channel, nhằm giảm bớt độ khó tối ưu của các autoencoder có tỷ lệ nén không gian cao; (2) Decoupled High-Resolution Adaptation, một chiến lược huấn luyện ba giai đoạn tách rời hiệu quả để giảm thiểu hình phạt tổng quát hóa của các autoencoder có tỷ lệ nén không gian cao. Với các thiết kế này, chúng tôi nâng tỷ lệ nén không gian của autoencoder lên tới 128 trong khi vẫn duy trì chất lượng tái tạo. Khi áp dụng DC-AE của chúng tôi vào các mô hình latent diffusion, chúng tôi đạt được tăng tốc đáng kể mà không làm giảm độ chính xác. Ví dụ, trên ImageNet 512x512, DC-AE của chúng tôi cung cấp tốc độ suy luận nhanh hơn 19,1 lần và tốc độ huấn luyện nhanh hơn 17,9 lần trên GPU H100 cho UViT-H, đồng thời đạt FID tốt hơn so với autoencoder SD-VAE-f8 được sử dụng rộng rãi. Mã nguồn của chúng tôi có sẵn tại this https URL.

Các mô hình DCAE sau đây đã được phát hành và hỗ trợ trong Diffusers.

Định dạng DiffusersĐịnh dạng gốc
mit-han-lab/dc-ae-f32c32-sana-1.0-diffusersmit-han-lab/dc-ae-f32c32-sana-1.0
mit-han-lab/dc-ae-f32c32-in-1.0-diffusersmit-han-lab/dc-ae-f32c32-in-1.0
mit-han-lab/dc-ae-f32c32-mix-1.0-diffusersmit-han-lab/dc-ae-f32c32-mix-1.0
mit-han-lab/dc-ae-f64c128-in-1.0-diffusersmit-han-lab/dc-ae-f64c128-in-1.0
mit-han-lab/dc-ae-f64c128-mix-1.0-diffusersmit-han-lab/dc-ae-f64c128-mix-1.0
mit-han-lab/dc-ae-f128c512-in-1.0-diffusersmit-han-lab/dc-ae-f128c512-in-1.0
mit-han-lab/dc-ae-f128c512-mix-1.0-diffusersmit-han-lab/dc-ae-f128c512-mix-1.0

Mô hình này được đóng góp bởi lawrence-cj.

Tải một mô hình ở định dạng Diffusers bằng from_pretrained().

from diffusers import AutoencoderDC

ae = AutoencoderDC.from_pretrained("mit-han-lab/dc-ae-f32c32-sana-1.0-diffusers", dtype=torch.float32).to("cuda")  # or "mps", "xpu", "cpu"

Tải một mô hình trong Diffusers thông qua from_single_file

from difusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f32c32-sana-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path) 

Mô hình AutoencoderDC có các biến thể checkpoint tệp đơn in và mix với các khóa checkpoint khớp nhau, nhưng sử dụng các hệ số tỷ lệ khác nhau. Diffusers không thể tự động suy luận tệp config chính xác để sử dụng với mô hình dựa trên riêng checkpoint và sẽ mặc định cấu hình mô hình bằng tệp config của biến thể mix. Để ghi đè lên config được xác định tự động, vui lòng sử dụng đối số config khi tải tệp đơn với các checkpoint biến thể in.

from diffusers import AutoencoderDC

ckpt_path = "https://huggingface.co/mit-han-lab/dc-ae-f128c512-in-1.0/blob/main/model.safetensors"
model = AutoencoderDC.from_single_file(ckpt_path, config="mit-han-lab/dc-ae-f128c512-in-1.0-diffusers")

AutoencoderDC

lớp diffusers.AutoencoderDC

< >

( in_channels: int = 3latent_channels: int = 32attention_head_dim: int = 32encoder_block_types: str | tuple[str] = 'ResBlock'decoder_block_types: str | tuple[str] = 'ResBlock'encoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)decoder_block_out_channels: tuple = (128, 256, 512, 512, 1024, 1024)encoder_layers_per_block: tuple = (2, 2, 2, 3, 3, 3)decoder_layers_per_block: tuple = (3, 3, 3, 3, 3, 3)encoder_qkv_multiscales: tuple = ((), (), (), (5,), (5,), (5,))decoder_qkv_multiscales: tuple = ((), (), (), (5,), (5,), (5,))upsample_block_type: str = 'pixel_shuffle'downsample_block_type: str = 'pixel_unshuffle'decoder_norm_types: str | tuple[str] = 'rms_norm'decoder_act_fns: str | tuple[str] = 'silu'encoder_out_shortcut: bool = Truedecoder_in_shortcut: bool = Truedecoder_conv_act_fn: str = 'relu'scaling_factor: float = 1.0 )

Tham số

  • in_channels (int, mặc định là 3) — Số lượng kênh đầu vào trong các mẫu.
  • latent_channels (int, mặc định là 32) — Số lượng kênh trong biểu diễn không gian ẩn.
  • encoder_block_types (str | tuple[str], mặc định là "ResBlock") — Loại khối được sử dụng trong encoder.
  • decoder_block_types (str | tuple[str], mặc định là "ResBlock") — Loại khối được sử dụng trong bộ giải mã.
  • encoder_block_out_channels (tuple[int, ...], mặc định là (128, 256, 512, 512, 1024, 1024)) — Số lượng kênh đầu ra cho mỗi khối trong bộ mã hóa.
  • decoder_block_out_channels (tuple[int, ...], mặc định là (128, 256, 512, 512, 1024, 1024)) — Số lượng kênh đầu ra cho mỗi khối trong bộ giải mã.
  • encoder_layers_per_block (tuple[int], mặc định là (2, 2, 2, 3, 3, 3)) — Số lượng lớp cho mỗi khối trong bộ mã hóa.
  • decoder_layers_per_block (tuple[int], mặc định là (3, 3, 3, 3, 3, 3)) — Số lượng lớp cho mỗi khối trong bộ giải mã.
  • encoder_qkv_multiscales (tuple[tuple[int, ...], ...], mặc định là ((), (), (), (5,), (5,), (5,))) — Cấu hình đa tỷ lệ cho các phép biến đổi QKV (query-key-value) của encoder.
  • decoder_qkv_multiscales (tuple[tuple[int, ...], ...], mặc định là ((), (), (), (5,), (5,), (5,))) — Cấu hình đa tỷ lệ cho các phép biến đổi QKV (query-key-value) của bộ giải mã.
  • upsample_block_type (str, mặc định là "pixel_shuffle") — Loại khối được sử dụng để tăng mẫu (upsampling) trong bộ giải mã (decoder).
  • downsample_block_type (str, mặc định là "pixel_unshuffle") — Loại khối được sử dụng để giảm mẫu trong bộ mã hóa.
  • decoder_norm_types (str | tuple[str], mặc định là "rms_norm") — Loại (hoặc các loại) chuẩn hóa cần sử dụng trong bộ giải mã.
  • decoder_act_fns (str | tuple[str], mặc định là "silu") — Hàm kích hoạt (hoặc các hàm kích hoạt) được sử dụng trong bộ giải mã.
  • encoder_out_shortcut (bool, mặc định là True) — Có sử dụng shortcut ở cuối encoder hay không.
  • decoder_in_shortcut (bool, mặc định là True) — Có sử dụng shortcut ở đầu decoder hay không.
  • decoder_conv_act_fn (str, mặc định là "relu") — Hàm kích hoạt được sử dụng ở cuối bộ giải mã.
  • scaling_factor (float, mặc định là 1.0) — Nghịch đảo nhân của căn phương sai trung bình (root mean square) của các đặc trưng tiềm ẩn (latent features). Tham số 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 (diffusion model). Các latent được nhân với 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 latent được đưa về thang đo ban đầu bằng công thức: z = 1 / scaling_factor * z.

Mô hình Autoencoder được giới thiệu trong DCAE và được sử dụng trong SANA.

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ữ).

encode

< >

( x: Tensorreturn_dict: bool = True )

Tham số

  • x (torch.Tensor) — Lô đầu vào của các hình ảnh.
  • return_dict (bool, mặc định là True) — Có nên trả về một ~models.vae.EncoderOutput thay vì một tuple thông thường hay không.

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

decode

< >

( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple

Tham số

  • z (torch.Tensor) — Lô đầu vào của các vector ẩn.
  • return_dict (bool, 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.

enable_tiling

< >

( tile_sample_min_height: int | None = Nonetile_sample_min_width: int | None = Nonetile_sample_stride_height: float | None = Nonetile_sample_stride_width: float | None = None )

Tham số

  • tile_sample_min_height (int, tùy chọn) — Chiều cao tối thiểu cần thiết để một mẫu được tách thành các ô (tile) theo chiều cao.
  • tile_sample_min_width (int, tùy chọn) — Chiều rộng tối thiểu cần thiết để một mẫu được tách thành các ô (tile) theo chiều rộng.
  • tile_sample_stride_height (int, tùy chọn) — Lượng chồng lấn tối thiểu giữa hai gạch dọc liên tiếp. Điều này nhằm đảm bảo không có hiện tượng lỗi ghép gạch nào xảy ra dọc theo chiều cao.
  • tile_sample_stride_width (int, tùy chọn) — Bước nhảy giữa hai lát cắt ngang liên tiếp. Điều này nhằm đảm bảo không có hiện tượng lỗi lát cắt nào xuất hiện trên chiều rộng.

Bật giải mã AE dạng gạch. Khi tùy chọn này được bật, AE sẽ chia tensor đầu vào thành các gạch để tính toán giải mã và mã hóa trong nhiều bước. Điều này hữu ích để tiết kiệm một lượng lớn bộ nhớ và cho phép xử lý các hình ảnh lớn hơn.

forward

< >

( sample: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple

Tham số

  • sample (torch.Tensor) — Mẫu đầu vào.
  • 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.

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ề.

DecoderOutput

lớp diffusers.models.autoencoders.vae.DecoderOutput

< >

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

Tham số

  • sample (torch.Tensor có hình dạng (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ã.

Update on GitHub