Diffusers documentation

VQDiffusionScheduler

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

VQDiffusionScheduler

VQDiffusionScheduler는 transformer 모델의 출력을 이전 diffusion timestep의 노이즈가 제거된 이미지의 샘플로 변환합니다. Shuyang Gu, Dong Chen, Jianmin Bao, Fang Wen, Bo Zhang, Dongdong Chen, Lu Yuan, Baining Guo가 발표한 Vector Quantized Diffusion Model for Text-to-Image Synthesis에서 소개되었습니다.

해당 논문의 초록은 다음과 같습니다:

텍스트-이미지 생성을 위한 벡터 양자화 확산(VQ-Diffusion) 모델을 제시합니다. 이 방법은 최근 개발된 노이즈 제거 확률적 모델(Denoising Diffusion Probabilistic Model, DDPM)의 조건부 변형을 사용하여 잠재 공간을 모델링하는 벡터 양자화 변분 오토인코더(VQ-VAE)에 기반합니다. 이 잠재 공간 방식은 기존 방법의 단방향 편향을 제거할 뿐만 아니라, 기존 방법에서 심각한 문제인 오류 축적을 피하기 위해 마스크-교체(mask-and-replace) 확산 전략을 적용할 수 있어 텍스트-이미지 생성 작업에 적합하다는 것을 발견했습니다. 실험 결과, 유사한 매개변수 수를 가진 기존 자기회귀(AR) 모델과 비교할 때 VQ-Diffusion이 훨씬 더 나은 텍스트-이미지 생성 결과를 산출하는 것으로 나타났습니다. 이전 GAN 기반 텍스트-이미지 방법과 비교하면, VQ-Diffusion은 더 복잡한 장면을 처리할 수 있고 합성 이미지 품질을 크게 향상시킵니다. 마지막으로, 재매개변수화(reparameterization)를 통해 제안된 방법의 이미지 생성 계산이 매우 효율적으로 수행될 수 있음을 보여줍니다. 전통적인 AR 방법에서는 텍스트-이미지 생성 시간이 출력 이미지 해상도에 따라 선형으로 증가하여 일반적인 크기의 이미지에서도 상당한 시간이 소요됩니다. VQ-Diffusion은 품질과 속도 사이의 더 나은 트레이드오프를 달성할 수 있게 합니다. 실험 결과, 재매개변수화를 적용한 VQ-Diffusion 모델은 더 나은 이미지 품질을 달성하면서 전통적인 AR 방법보다 15배 빠릅니다.

VQDiffusionScheduler

클래스 diffusers.VQDiffusionScheduler

< >

( num_vec_classes: intnum_train_timesteps: int = 100alpha_cum_start: float = 0.99999alpha_cum_end: float = 9e-06gamma_cum_start: float = 9e-06gamma_cum_end: float = 0.99999 )

매개변수

  • num_vec_classes (int) — 잠재 픽셀의 벡터 임베딩 클래스 수입니다. 마스킹된 잠재 픽셀의 클래스를 포함합니다.
  • num_train_timesteps (int, 기본값 100) — 모델을 학습할 때 사용할 diffusion 단계 수입니다.
  • alpha_cum_start (float, 기본값 0.99999) — 시작 누적 alpha 값입니다.
  • alpha_cum_end (float, 기본값 0.000009) — 끝점 누적 alpha 값입니다.
  • gamma_cum_start (float, 기본값 0.000009) — 시작 누적 감마 값입니다.
  • gamma_cum_end (float, 기본값 0.99999) — 끝 누적 감마 값입니다.

벡터 양자화 확산을 위한 스케줄러입니다.

이 모델은 SchedulerMixin과 ConfigMixin을 상속합니다. 로딩 및 저장과 같은 모든 스케줄러에 대해 라이브러리가 구현하는 일반적 메서드에 대해서는 상위 클래스 문서를 확인하세요.

apply_cumulative_transitions

< >

( q: Tensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

매개변수

  • q (torch.Tensor, shape (batch size, num classes - 1, num latent pixels)) — 마스크되지 않은 잠재 픽셀 클래스에 대한 로그 확률입니다.
  • t (int 또는 torch.Tensor) — 사용할 누적 전이 행렬을 결정하는 시간 단계입니다.

반환값

torch.Tensor, shape (batch size, num classes, num latent pixels)

마스크 클래스 확률이 추가된 전환된 로그 확률입니다.

Apply the cumulative transition matrix at a timestep to log probabilities over non-mask classes.

log_Q_t_transitioning_to_known_class

< >

( t: typing.Union[int, torch.Tensor]x_t: LongTensorlog_onehot_x_t: Tensorcumulative: bool ) → torch.Tensor

매개변수

  • t (int 또는 torch.Tensor) — 사용할 전이 행렬을 결정하는 시간 단계입니다.
  • x_t (torch.LongTensor, shape (batch size, num latent pixels)) — 시간 t 시점의 각 latent pixel의 클래스입니다.
  • log_onehot_x_t (torch.Tensor, shape (batch size, num classes, num latent pixels)) — x_t의 로그 원-핫 벡터입니다.
  • cumulative (bool) — False인 경우 단일 단계 전이 행렬 t-1->t가 사용됩니다. True인 경우 누적 전이 행렬 0->t가 사용됩니다.

반환값

torch.Tensor

반환되는 행렬의 각 열은 완전한 확률 전이 행렬의 로그 확률 행입니다. cumulative가 True인 경우 텐서의 모양은 (batch size, num classes - 1, num latent pixels)이고, 그렇지 않은 경우 (batch size, num classes, num latent pixels)입니다.

누적(cumulative)인 경우, 초기 잠재 픽셀은 마스킹할 수 없으므로 텐서의 행이 하나 적습니다.

여기서:

  • q_n은 n번째 잠재 픽셀의 전방 과정에 대한 확률 분포입니다.
  • C_0 은 잠재 픽셀 임베딩의 클래스입니다
  • C_k 은 마스킹된 잠재 픽셀의 클래스입니다

누적되지 않은 결과 (로그 제외):

q_0(x_t | x_{t-1\} = C_0) ... q_n(x_t | x_{t-1\} = C_0) . . . . . . . . . q_0(x_t | x_{t-1\} = C_k) ... q_n(x_t | x_{t-1\} = C_k)`} lang="" wrap={false} />

누적 결과 (로그 생략):

q_0_cumulative(x_t | x_0 = C_0) ... q_n_cumulative(x_t | x_0 = C_0) . . . . . . . . . q_0_cumulative(x_t | x_0 = C_{k-1\}) ... q_n_cumulative(x_t | x_0 = C_{k-1\})`} lang="" wrap={false} />

x_t의 각 잠재 픽셀에 대해 (누적 또는 비누적) 전이 행렬의 행에 대한 로그 확률을 계산합니다.

q_posterior

< >

( log_p_x_0: Tensorx_t: LongTensort: typing.Union[int, torch.Tensor] ) → torch.Tensor of shape (batch size, num classes, num latent pixels)

매개변수

  • log_p_x_0 (torch.Tensor, shape (batch size, num classes - 1, num latent pixels)) — 초기 잠재 픽셀의 예측된 클래스에 대한 로그 확률입니다. 초기 노이즈가 없는 이미지는 마스킹될 수 없으므로 마스킹된 클래스에 대한 예측은 포함되지 않습니다.
  • x_t (torch.LongTensor, shape (batch size, num latent pixels)) — 시간 t 시점의 각 latent pixel의 클래스입니다.
  • t (int 또는 torch.Tensor) — 사용할 전이 행렬을 결정하는 시간 단계입니다.

반환값

torch.Tensor, shape (batch size, num classes, num latent pixels)

t-1 타임스텝에서 이미지의 예측된 클래스에 대한 로그 확률입니다.

t-1 타임스텝에서 이미지의 예측된 클래스에 대한 로그 확률을 계산합니다:

p(x_{t-1} | x_t) = sum( q(x_t | x_{t-1}) * q(x_{t-1} | x_0) * p(x_0) / q(x_t | x_0) )

set_timesteps

< >

( num_inference_steps: intdevice: typing.Union[str, torch.device, NoneType] = None )

매개변수

  • num_inference_steps (int) — 학습된 모델로 샘플을 생성할 때 사용되는 diffusion 단계 수입니다.
  • device (str 또는 torch.device, 선택 사항) — timesteps와 diffusion process 매개변수(alpha, beta, gamma)를 이동할 대상 device

추론 실행 전에 실행할 diffusion chain에 사용할 이산 timesteps를 설정합니다.

단계

< >

( model_output: Tensortimestep: typing.Union[int, torch.Tensor]sample: LongTensorgenerator: typing.Optional[torch.Generator] = Nonereturn_dict: bool = True ) → VQDiffusionSchedulerOutput or tuple[torch.LongTensor]

매개변수

  • model_output (torch.Tensor, shape (batch size, num classes - 1, num latent pixels)) — 초기 latent 픽셀의 예측된 클래스에 대한 로그 확률입니다. 초기 노이즈가 제거된 이미지는 마스킹할 수 없으므로 마스킹된 클래스에 대한 예측은 포함되지 않습니다.
  • timestep (int 또는 torch.Tensor) — 사용할 전이 행렬을 결정하는 타임스텝입니다.
  • sample (torch.LongTensor, shape (batch size, num latent pixels)) — 현재 timestep에서 각 latent pixel의 클래스입니다.
  • generator (torch.Generator, 선택 사항) — p(x_{t-1} | x_t)에서 샘플링하기 전에 적용되는 노이즈에 사용할 난수 생성기입니다.
  • return_dict (bool, 기본값 True) — tuple 대신 VQDiffusionSchedulerOutput를 반환할지 여부

반환값

VQDiffusionSchedulerOutput 또는 tuple[torch.LongTensor]

return_dict가 True인 경우 VQDiffusionSchedulerOutput이 반환되고, 그렇지 않으면 첫 번째 요소가 샘플 텐서인 튜플이 반환됩니다.

이전 시간 단계의 샘플을 역 전이 분포를 사용하여 예측합니다. 분포가 계산되는 방법에 대한 자세한 내용은 q_posterior()를 참조하세요.

VQDiffusionSchedulerOutput

클래스 diffusers.schedulers.scheduling_vq_diffusion.VQDiffusionSchedulerOutput

< >

( prev_sample: LongTensor )

매개변수

  • prev_sample (torch.LongTensor, shape (batch size, num latent pixels)) — 이전 timestep에서 계산된 샘플입니다. prev_sample은 denoising 루프에서 다음 모델 입력으로 사용해야 합니다.

스케줄러의 step 함수 출력을 위한 출력 클래스.

Update on GitHub