Diffusers documentation
AutoencoderKL
AutoencoderKL
KL 손실을 사용하는 변분 오토인코더(VAE) 모델은 Diederik P. Kingma와 Max Welling이 Auto-Encoding Variational Bayes에서 소개했습니다. 이 모델은 🤗 Diffusers에서 이미지를 잠재 변수(latents)로 인코딩하고 잠재 표현을 이미지로 디코딩하는 데 사용됩니다.
해당 논문의 초록은 다음과 같습니다:
연속형 잠재 변수가 존재하고 사후 분포가 계산 불가능(intractable)하며, 대규모 데이터셋을 다루는 방향성 확률 모델에서 효율적인 추론과 학습을 수행할 수 있을까요? 대규모 데이터셋에 확장 가능하며, 일부 완만한 미분 가능성 조건 하에서는 계산 불가능한 경우에도 작동하는 확률적 변분 추론 및 학습 알고리즘을 소개합니다. 우리의 기여는 두 가지입니다. 첫째, 변분 하한(variational lower bound)의 재매개변화(reparameterization)를 통해 표준 확률적 경사 하강법으로 쉽게 최적화할 수 있는 하한 추정자를 얻을 수 있음을 보여줍니다. 둘째, 데이터 포인트마다 연속형 잠재 변수가 있는 i.i.d. 데이터셋의 경우, 제안된 하한 추정자를 사용하여 계산 불가능한 사후 분포에 근사 추론 모델(인식 모델이라고도 함)을 적합시킴으로써 사후 추론을 특히 효율적으로 만들 수 있음을 보여줍니다. 이러한 이론적 이점은 실험 결과에 반영됩니다.
원래 형식에서 로드
기본적으로 AutoencoderKL은 from_pretrained()로 로드해야 하지만, 다음과 같이 FromOriginalModelMixin.from_single_file를 사용하여 원래 형식에서 로드할 수도 있습니다:
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
< source >( in_channels: int = 3out_channels: int = 3down_block_types: tuple = ('DownEncoderBlock2D',)up_block_types: tuple = ('UpDecoderBlock2D',)block_out_channels: tuple = (64,)layers_per_block: int = 1act_fn: str = 'silu'latent_channels: int = 4norm_num_groups: int = 32sample_size: int = 32scaling_factor: float = 0.18215shift_factor: float | None = Nonelatents_mean: tuple[float] | None = Nonelatents_std: tuple[float] | None = Noneforce_upcast: bool = Trueuse_quant_conv: bool = Trueuse_post_quant_conv: bool = Truemid_block_add_attention: bool = True )
매개변수
- 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,)) — 블록 출력 채널의 튜플입니다. - act_fn (
str, 선택 사항, 기본값"silu") — 사용할 활성화 함수입니다. - latent_channels (
int, 선택 사항, 기본값 4) — 잠재 공간의 채널 수입니다. - sample_size (
int, 선택 사항, 기본값32) — 샘플 입력 크기. - scaling_factor (
float, 선택 사항, 기본값 0.18215) — 학습 세트의 첫 번째 배치(first batch)를 사용하여 계산된 학습된 잠재 공간(latent space)의 구성 요소별(component-wise) 표준 편차입니다. 이는 diffusion model을 학습할 때 잠재 공간의 분산을 1로 조정하는 데 사용됩니다. 잠재 변수(latents)는 diffusion model에 전달되기 전에z = z * scaling_factor공식으로 스케일링됩니다. 디코딩 시에는z = 1 / scaling_factor * z공식을 사용하여 잠재 변수를 원래의 스케일로 되돌립니다. 자세한 내용은 High-Resolution Image Synthesis with Latent Diffusion Models 논문의 4.3.2절과 D.1절을 참조하십시오. - force_upcast (
bool, 선택 사항, 기본값True) — 활성화하면 SD-XL과 같은 고해상도 이미지 파이프라인에서 VAE가 float32로 실행되도록 강제합니다. VAE는 정밀도가 크게 손실되지 않는 범위 내에서 더 낮은 범위로 미세 조정/학습할 수 있으며, 이 경우force_upcast를False로 설정할 수 있습니다 - 참고: https://huggingface.co/madebyollin/sdxl-vae-fp16-fix - mid_block_add_attention (
bool, 선택 사항, 기본값True) — 활성화하면 Encoder와 Decoder의 mid_block에 attention 블록이 포함됩니다. false로 설정하면 mid_block에는 resnet 블록만 포함됩니다.
KL 손실을 사용하여 이미지를 잠재 변수로 인코딩하고 잠재 표현을 이미지로 디코딩하는 VAE 모델.
이 모델은 ModelMixin에서 상속됩니다. 모든 모델에 대해 구현된 일반적 메서드(다운로드 또는 저장 등)에 대해서는 상위 클래스 문서를 확인하세요.
decode
< source >( z: FloatTensorreturn_dict: bool = Truegenerator = None ) → ~models.vae.DecoderOutput or tuple
이미지 배치(decode)를 디코딩합니다.
encode
< source >( x: Tensorreturn_dict: bool = True )
이미지 배치(latents)를 인코딩합니다.
forward
< source >( sample: Tensorsample_posterior: bool = Falsereturn_dict: bool = Truegenerator: typing.Optional[torch.Generator] = None ) → ~models.vae.DecoderOutput or tuple
매개변수
- sample (
torch.Tensor) — 입력 샘플. - sample_posterior (
bool, 선택 사항, 기본값False) — 후분포에서 샘플링할지 여부. - return_dict (
bool, 선택 사항, 기본값True) — 일반 튜플 대신DecoderOutput를 반환할지 여부. - generator (
torch.Generator, 선택 사항) — 샘플링을 결정적으로 만들기 위한torch.Generator.
반환값
~models.vae.DecoderOutput 또는 tuple
return_dict가 True이면 ~models.vae.DecoderOutput가 반환되고, 그렇지 않으면 일반 tuple이 반환됩니다.
융합된 QKV 투영을 활성화합니다. 셀프 어텐션 모듈의 경우, 모든 투영 행렬(즉, 쿼리, 키, 값)이 융합됩니다. 크로스 어텐션 모듈의 경우, 키와 값 투영 행렬이 융합됩니다.
> 이 API는 🧪 실험적입니다.
커스텀 어텐션 프로세서를 비활성화하고 기본 어텐션 구현을 설정합니다.
tiled_decode
< source >( z: Tensorreturn_dict: bool = True ) → ~models.vae.DecoderOutput or tuple
tiled decoder를 사용하여 이미지 배치(decoding)를 디코딩합니다.
tiled_encode
< source >( x: Tensorreturn_dict: bool = True ) → ~models.autoencoder_kl.AutoencoderKLOutput or tuple
타일 인코더를 사용하여 이미지 배치 인코딩
이 옵션이 활성화되면 VAE는 입력 텐서를 타일로 분할하여 여러 단계에 걸쳐 인코딩을 계산합니다. 이는 이미지 크기와 관계없이 메모리 사용량을 일정하게 유지하는 데 유용합니다. 타일 인코딩의 최종 결과는 타일마다 다른 인코더를 사용하기 때문에 타일링되지 않은 인코딩과 다릅니다. 타일링 아티팩트를 방지하기 위해 타일들은 겹쳐지고 블렌딩되어 매끄러운 출력을 형성합니다. 출력에서 여전히 타일 크기의 변화가 보일 수 있지만, 훨씬 덜 눈에 띄어야 합니다.
AutoencoderKLOutput
클래스 diffusers.models.modeling_outputs.AutoencoderKLOutput
< source >( latent_dist: DiagonalGaussianDistribution )
AutoencoderKL 인코딩 메서드의 출력.
DecoderOutput
class diffusers.models.autoencoders.vae.DecoderOutput
< source >( sample: Tensorcommit_loss: typing.Optional[torch.FloatTensor] = None )
디코딩 메서드의 출력.