Diffusers 文件

DDIMScheduler

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

DDIMScheduler

去噪擴散隱式模型 (DDIM),作者:Jiaming Song, Chenlin Meng 和 Stefano Ermon。

論文摘要如下:

去噪擴散機率模型(DDPM)在無對抗訓練的情況下實現了高質量影像生成,但它們需要模擬馬爾可夫鏈多步才能生成樣本。為了加速取樣,我們提出了去噪擴散隱式模型(DDIM),一種更高效的迭代隱式機率模型,其訓練過程與DDPM相同。在DDPM中,生成過程被定義為馬爾可夫擴散過程的逆過程。我們構建了一類非馬爾可夫擴散過程,它們具有相同的訓練目標,但其逆過程可以更快地取樣。我們透過實驗證明,DDIM在實際時間上比DDPM快10倍到50倍,並且允許我們在計算和樣本質量之間進行權衡,可以直接在潛在空間中執行語義上有意義的影像插值。

該論文的原始程式碼庫可在ermongroup/ddim找到,您可以透過tsong.me聯絡作者。

提示

論文《常見擴散噪聲排程和取樣步驟存在缺陷》聲稱,訓練和推理設定之間的不匹配導致 Stable Diffusion 的推理生成結果不理想。為了解決這個問題,作者提出了:

🧪 這是一個實驗性功能!

  1. 重新調整噪聲排程以強制零終端信噪比 (SNR)
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, rescale_betas_zero_snr=True)
  1. 使用 v_prediction 訓練模型(將以下引數新增到 train_text_to_image.pytrain_text_to_image_lora.py 指令碼中)
--prediction_type="v_prediction"
  1. 更改取樣器,使其始終從最後一個時間步開始
pipe.scheduler = DDIMScheduler.from_config(pipe.scheduler.config, timestep_spacing="trailing")
  1. 重新調整分類器自由指導以防止過曝
image = pipe(prompt, guidance_rescale=0.7).images[0]

例如:

from diffusers import DiffusionPipeline, DDIMScheduler
import torch

pipe = DiffusionPipeline.from_pretrained("ptx0/pseudo-journey-v2", torch_dtype=torch.float16)
pipe.scheduler = DDIMScheduler.from_config(
    pipe.scheduler.config, rescale_betas_zero_snr=True, timestep_spacing="trailing"
)
pipe.to("cuda")

prompt = "A lion in galaxies, spirals, nebulae, stars, smoke, iridescent, intricate detail, octane render, 8k"
image = pipe(prompt, guidance_rescale=0.7).images[0]
image

DDIMScheduler

class diffusers.DDIMScheduler

< >

( num_train_timesteps: int = 1000 beta_start: float = 0.0001 beta_end: float = 0.02 beta_schedule: str = 'linear' trained_betas: typing.Union[numpy.ndarray, typing.List[float], NoneType] = None clip_sample: bool = True set_alpha_to_one: bool = True steps_offset: int = 0 prediction_type: str = 'epsilon' thresholding: bool = False dynamic_thresholding_ratio: float = 0.995 clip_sample_range: float = 1.0 sample_max_value: float = 1.0 timestep_spacing: str = 'leading' rescale_betas_zero_snr: bool = False )

引數

  • num_train_timesteps (int, 預設為 1000) — 用於訓練模型的擴散步數。
  • beta_start (float, 預設為 0.0001) — 推理的起始 beta 值。
  • beta_end (float, 預設為 0.02) — 最終的 beta 值。
  • beta_schedule (str, 預設為 "linear") — beta 排程,一個將 beta 範圍對映到用於模型步進的 beta 序列。可選擇 linearscaled_linearsquaredcos_cap_v2
  • trained_betas (np.ndarray, 可選) — 直接向建構函式傳遞一個 beta 陣列,以繞過 beta_startbeta_end
  • clip_sample (bool, 預設為 True) — 裁剪預測樣本以保持數值穩定性。
  • clip_sample_range (float, 預設為 1.0) — 樣本裁剪的最大幅度。僅當 clip_sample=True 時有效。
  • set_alpha_to_one (bool, 預設為 True) — 每個擴散步驟都使用該步驟和前一步驟的 alpha 乘積值。對於最後一步,沒有前一個 alpha。當此選項為 True 時,前一個 alpha 乘積固定為 1,否則它使用步驟 0 的 alpha 值。
  • steps_offset (int, 預設為 0) — 某些模型系列所需的推理步驟偏移量。
  • prediction_type (str, 預設為 epsilon, 可選) — 排程器函式的預測型別;可以是 epsilon(預測擴散過程的噪聲)、sample(直接預測帶噪聲的樣本)或 v_prediction(參見 Imagen Video 論文的 2.4 節)。
  • thresholding (bool, 預設為 False) — 是否使用“動態閾值”方法。這不適用於 Stable Diffusion 等潛在空間擴散模型。
  • dynamic_thresholding_ratio (float, 預設為 0.995) — 動態閾值方法的比率。僅當 thresholding=True 時有效。
  • sample_max_value (float, 預設為 1.0) — 動態閾值的閾值。僅當 thresholding=True 時有效。
  • timestep_spacing (str, 預設為 "leading") — 時間步的縮放方式。更多資訊請參閱《常見擴散噪聲排程和取樣步驟存在缺陷》的表 2。
  • rescale_betas_zero_snr (bool, 預設為 False) — 是否重新縮放 beta 值以使其終端信噪比為零。這使得模型能夠生成非常亮和非常暗的樣本,而不是將其限制在亮度適中的樣本。與--offset_noise鬆散相關。

DDIMScheduler 擴充套件了去噪擴散機率模型(DDPM)中引入的去噪過程,並加入了非馬爾可夫引導。

該模型繼承自SchedulerMixinConfigMixin。檢視超類文件以瞭解庫為所有排程器實現的通用方法,例如載入和儲存。

scale_model_input

< >

( sample: Tensor timestep: typing.Optional[int] = None ) torch.Tensor

引數

  • sample (torch.Tensor) — 輸入樣本。
  • timestep (int, 可選) — 擴散鏈中的當前時間步。

返回

torch.Tensor

一個縮放後的輸入樣本。

確保與需要根據當前時間步縮放去噪模型輸入的排程器互換使用。

set_timesteps

< >

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

引數

  • num_inference_steps (int) — 使用預訓練模型生成樣本時使用的擴散步數。

設定用於擴散鏈的離散時間步(在推理之前執行)。

步驟

< >

( model_output: Tensor timestep: int sample: Tensor eta: float = 0.0 use_clipped_model_output: bool = False generator = None variance_noise: typing.Optional[torch.Tensor] = None return_dict: bool = True ) DDIMSchedulerOutput or tuple

引數

  • model_output (torch.Tensor) — 從學習到的擴散模型直接輸出。
  • timestep (float) — 擴散鏈中的當前離散時間步。
  • sample (torch.Tensor) — 擴散過程建立的樣本的當前例項。
  • eta (float) — 擴散步驟中新增噪聲的噪聲權重。
  • use_clipped_model_output (bool, 預設為 False) — 如果為 True,則從裁剪後的預測原始樣本計算“校正”的 model_output。這是必要的,因為當 self.config.clip_sampleTrue 時,預測的原始樣本會被裁剪到 [-1, 1]。如果沒有發生裁剪,“校正”的 model_output 將與作為輸入提供的 model_output 一致,並且 use_clipped_model_output 不會產生任何影響。
  • generator (torch.Generator, 可選) — 隨機數生成器。
  • variance_noise (torch.Tensor) — 透過直接提供方差本身的噪聲來替代使用 generator 生成噪聲。適用於 CycleDiffusion 等方法。
  • return_dict (bool, 可選, 預設為 True) — 是否返回 DDIMSchedulerOutputtuple

返回

DDIMSchedulerOutputtuple

如果 return_dict 為 True,則返回 DDIMSchedulerOutput,否則返回一個元組,其中第一個元素是樣本張量。

透過逆轉 SDE 預測前一個時間步的樣本。此函式從學習到的模型輸出(通常是預測的噪聲)傳播擴散過程。

DDIMSchedulerOutput

class diffusers.schedulers.scheduling_ddim.DDIMSchedulerOutput

< >

( prev_sample: Tensor pred_original_sample: typing.Optional[torch.Tensor] = None )

引數

  • prev_sample (torch.Tensor,形狀為影像的 (batch_size, num_channels, height, width)) — 上一個時間步計算出的樣本 (x_{t-1})prev_sample 應作為去噪迴圈中的下一個模型輸入。
  • pred_original_sample (torch.Tensor,形狀為影像的 (batch_size, num_channels, height, width)) — 根據當前時間步的模型輸出預測的去噪樣本 (x_{0})pred_original_sample 可用於預覽進度或進行指導。

排程器 step 函式輸出的輸出類。

< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.