Diffusers 文件

EDMDPMSolverMultistepScheduler

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

EDMDPMSolverMultistepScheduler

EDMDPMSolverMultistepSchedulerKarras 公式DPMSolverMultistepScheduler,它是一個多步排程器,來自 Cheng Lu, Yuhao Zhou, Fan Bao, Jianfei Chen, Chongxuan Li 和 Jun Zhu 的 DPM-Solver: 一個用於擴散機率模型取樣的快速 ODE 求解器,大約 10 步DPM-Solver++: 用於擴散機率模型引導取樣的快速求解器

DPMSolver (以及改進版 DPMSolver++) 是一種快速的專用高階求解器,用於具有收斂階數保證的擴散 ODE。根據經驗,DPMSolver 取樣僅需 20 步即可生成高質量樣本,即使在 10 步內也能生成相當不錯的樣本。

EDMDPMSolverMultistepScheduler

class diffusers.EDMDPMSolverMultistepScheduler

< >

( sigma_min: float = 0.002 sigma_max: float = 80.0 sigma_data: float = 0.5 sigma_schedule: str = 'karras' num_train_timesteps: int = 1000 prediction_type: str = 'epsilon' rho: float = 7.0 solver_order: int = 2 thresholding: bool = False dynamic_thresholding_ratio: float = 0.995 sample_max_value: float = 1.0 algorithm_type: str = 'dpmsolver++' solver_type: str = 'midpoint' lower_order_final: bool = True euler_at_final: bool = False final_sigmas_type: typing.Optional[str] = 'zero' )

引數

  • sigma_min (float, 可選, 預設為 0.002) — sigma 排程中的最小噪聲幅度。在 EDM 論文 [1] 中設定為 0.002;合理範圍是 [0, 10]。
  • sigma_max (float, 可選, 預設為 80.0) — sigma 排程中的最大噪聲幅度。在 EDM 論文 [1] 中設定為 80.0;合理範圍是 [0.2, 80.0]。
  • sigma_data (float, 可選, 預設為 0.5) — 資料分佈的標準差。在 EDM 論文 [1] 中設定為 0.5。
  • sigma_schedule (str, 可選, 預設為 karras) — 用於計算 sigmas 的 sigma 排程。預設情況下,我們使用 EDM 論文中引入的排程 (https://huggingface.co/papers/2206.00364)。其他可接受的值是“exponential”。指數排程已包含在此模型中:https://huggingface.co/stabilityai/cosxl
  • num_train_timesteps (int, 預設為 1000) — 訓練模型的擴散步數。
  • solver_order (int, 預設為 2) — DPMSolver 階數,可以是 123。建議對引導取樣使用 solver_order=2,對無條件取樣使用 solver_order=3
  • 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=Truealgorithm_type="dpmsolver++" 時有效。
  • algorithm_type (str, 預設為 dpmsolver++) — 求解器的演算法型別;可以是 dpmsolver++sde-dpmsolver++dpmsolver++ 型別實現了 DPMSolver++ 論文中的演算法。建議對 Stable Diffusion 等引導取樣使用 dpmsolver++sde-dpmsolver++solver_order=2
  • solver_type (str, 預設為 midpoint) — 二階求解器的求解器型別;可以是 midpointheun。求解器型別會稍微影響樣本質量,特別是對於少量步數。建議使用 midpoint 求解器。
  • lower_order_final (bool, 預設為 True) — 是否在最後幾步使用低階求解器。僅對 < 15 推理步數有效。這可以穩定 DPMSolver 的取樣,使其步數 < 15,特別是步數 <= 10。
  • euler_at_final (bool, 預設為 False) — 是否在最後一步使用尤拉方法。這是數值穩定性和細節豐富度之間的權衡。這可以穩定 DPMSolver 的 SDE 變體在少量推理步驟下的取樣,但有時可能導致模糊。
  • final_sigmas_type (str, 預設為 "zero") — 取樣過程中噪聲排程的最終 sigma 值。如果為 "sigma_min",則最終 sigma 與訓練排程中的最後一個 sigma 相同。如果為 zero,則最終 sigma 設定為 0。

實現了 Karras 等人於 2022 年 [1] 提出的 EDM 公式中的 DPMSolverMultistepScheduler。EDMDPMSolverMultistepScheduler 是一種用於擴散 ODE 的快速專用高階求解器。

[1] Karras, Tero, et al. “闡明基於擴散的生成模型的設計空間。” https://huggingface.co/papers/2206.00364

此模型繼承自 SchedulerMixinConfigMixin。有關庫為所有排程器實現的通用方法(例如載入和儲存),請檢視超類文件。

convert_model_output

< >

( model_output: Tensor sample: Tensor = None ) torch.Tensor

引數

  • model_output (torch.Tensor) — 從學習到的擴散模型直接輸出。
  • sample (torch.Tensor) — 擴散過程建立的樣本當前例項。

返回

torch.Tensor

轉換後的模型輸出。

將模型輸出轉換為 DPMSolver/DPMSolver++ 演算法所需的相應型別。DPM-Solver 旨在離散化噪聲預測模型的積分,而 DPM-Solver++ 旨在離散化資料預測模型的積分。

演算法和模型型別是解耦的。噪聲預測模型和資料預測模型都可以使用DPMSolver或DPMSolver++。

dpm_solver_first_order_update

< >

( model_output: Tensor sample: Tensor = None noise: typing.Optional[torch.Tensor] = None ) torch.Tensor

引數

  • model_output (torch.Tensor) — 從學習到的擴散模型直接輸出。
  • sample (torch.Tensor) — 擴散過程建立的樣本當前例項。

返回

torch.Tensor

上一個時間步的樣本張量。

一階DPMSolver(等同於DDIM)的一個步驟。

multistep_dpm_solver_second_order_update

< >

( model_output_list: typing.List[torch.Tensor] sample: Tensor = None noise: typing.Optional[torch.Tensor] = None ) torch.Tensor

引數

  • model_output_list (List[torch.Tensor]) — 當前和後續時間步從學習到的擴散模型直接輸出。
  • sample (torch.Tensor) — 擴散過程建立的樣本當前例項。

返回

torch.Tensor

上一個時間步的樣本張量。

二階多步DPMSolver的一個步驟。

multistep_dpm_solver_third_order_update

< >

( model_output_list: typing.List[torch.Tensor] sample: Tensor = None ) torch.Tensor

引數

  • model_output_list (List[torch.Tensor]) — 從學習到的擴散模型在當前和後續時間步的直接輸出。
  • sample (torch.Tensor) — 擴散過程建立的樣本的當前例項。

返回

torch.Tensor

上一個時間步的樣本張量。

三階多步DPMSolver的一個步驟。

scale_model_input

< >

( sample: Tensor timestep: typing.Union[float, torch.Tensor] ) torch.Tensor

引數

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

返回

torch.Tensor

一個縮放後的輸入樣本。

確保與需要根據當前時間步縮放去噪模型輸入的排程器可互換。透過 (sigma**2 + 1) ** 0.5 縮放去噪模型輸入以匹配尤拉演算法。

set_begin_index

< >

( begin_index: int = 0 )

引數

  • begin_index (int) — 排程器的起始索引。

設定排程器的起始索引。此函式應在推理之前從管道中執行。

set_timesteps

< >

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

引數

  • num_inference_steps (int) — 使用預訓練模型生成樣本時使用的擴散步數。
  • device (strtorch.device, 可選) — 時間步應移動到的裝置。如果為 None,則時間步不會移動。

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

步驟

< >

( model_output: Tensor timestep: typing.Union[int, torch.Tensor] sample: Tensor generator = None return_dict: bool = True ) SchedulerOutputtuple

引數

  • model_output (torch.Tensor) — 從學習到的擴散模型直接輸出。
  • timestep (int) — 擴散鏈中的當前離散時間步。
  • sample (torch.Tensor) — 擴散過程建立的樣本的當前例項。
  • generator (torch.Generator, 可選) — 隨機數生成器。
  • return_dict (bool) — 是否返回 SchedulerOutputtuple

返回

排程器輸出tuple

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

透過反轉 SDE 預測前一個時間步的樣本。此函式使用多步 DPMSolver 傳播樣本。

排程器輸出

class diffusers.schedulers.scheduling_utils.SchedulerOutput

< >

( prev_sample: Tensor )

引數

  • prev_sample (torch.Tensor,影像形狀為 (batch_size, num_channels, height, width)) — 上一個時間步計算出的樣本 (x_{t-1})prev_sample 應作為去噪迴圈中的下一個模型輸入。

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

< > 在 GitHub 上更新

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