Diffusers 文档
ScoreSdeVe调度器
并获取增强的文档体验
开始使用
ScoreSdeVeScheduler
ScoreSdeVeScheduler
是一个方差爆炸随机微分方程 (SDE) 调度器。它在 Yang Song、Jascha Sohl-Dickstein、Diederik P. Kingma、Abhishek Kumar、Stefano Ermon、Ben Poole 的 Score-Based Generative Modeling through Stochastic Differential Equations 论文中被提出。
论文摘要如下
从数据中创造噪声很容易;从噪声中创造数据是生成建模。我们提出了一个随机微分方程 (SDE),它通过缓慢注入噪声将复杂的数据分布平滑地转换为已知的先验分布,以及一个相应的逆时 SDE,它通过缓慢移除噪声将先验分布转换回数据分布。至关重要的是,逆时 SDE 仅取决于扰动数据分布的时间相关梯度场(又名,score)。通过利用基于 score 的生成建模的进展,我们可以使用神经网络准确估计这些 score,并使用数值 SDE 求解器生成样本。我们表明,这个框架概括了先前在基于 score 的生成建模和扩散概率建模中的方法,从而实现了新的采样程序和新的建模能力。特别是,我们引入了一个预测器-校正器框架来纠正离散化逆时 SDE 演化中的误差。我们还推导出一个等效的神经 ODE,它从与 SDE 相同的分布中采样,但另外实现了精确的似然计算和改进的采样效率。此外,我们提供了一种使用基于 score 的模型解决逆问题的新方法,正如在类条件生成、图像修复和着色实验中所证明的那样。结合多项架构改进,我们在 CIFAR-10 上实现了无条件图像生成的破纪录性能,Inception score 为 9.89,FID 为 2.20,竞争性的似然度为 2.99 bits/dim,并首次展示了来自基于 score 的生成模型的高保真度 1024 x 1024 图像生成。
ScoreSdeVeScheduler
类 diffusers.ScoreSdeVeScheduler
< source >( num_train_timesteps: int = 2000 snr: float = 0.15 sigma_min: float = 0.01 sigma_max: float = 1348.0 sampling_eps: float = 1e-05 correct_steps: int = 1 )
参数
- num_train_timesteps (
int
, 默认为 1000) — 训练模型所需的扩散步骤数。 - snr (
float
, 默认为 0.15) — 一个系数,用于衡量从model_output
样本(来自网络)到随机噪声的步长权重。 - sigma_min (
float
, 默认为 0.01) — 采样过程中 sigma 序列的初始噪声尺度。最小 sigma 应反映数据的分布。 - sigma_max (
float
, 默认为 1348.0) — 传递到模型中的连续时间步长范围的最大值。 - sampling_eps (
float
, 默认为 1e-5) — 采样的结束值,时间步长从 1 逐渐减小到 epsilon。 - correct_steps (
int
, 默认为 1) — 对生成的样本执行的校正步骤数。
ScoreSdeVeScheduler
是一种方差爆炸随机微分方程 (SDE) 调度器。
此模型继承自 SchedulerMixin 和 ConfigMixin。查看超类文档,了解库为所有调度器实现的通用方法,例如加载和保存。
scale_model_input
< source >( sample: Tensor timestep: typing.Optional[int] = None ) → torch.Tensor
确保与需要根据当前时间步长缩放去噪模型输入的调度器具有互换性。
set_sigmas
< source >( num_inference_steps: int sigma_min: float = None sigma_max: float = None sampling_eps: float = None )
设置用于扩散链的噪声尺度(在推理之前运行)。 sigma 控制样本更新的 drift
和 diffusion
分量的权重。
set_timesteps
< source >( num_inference_steps: int sampling_eps: float = None device: typing.Union[str, torch.device] = None )
设置用于扩散链的连续时间步长(在推理之前运行)。
step_correct
< source >( model_output: Tensor sample: Tensor generator: typing.Optional[torch._C.Generator] = None return_dict: bool = True ) → SdeVeOutput 或 tuple
参数
- model_output (
torch.Tensor
) — 来自学习扩散模型的直接输出。 - sample (
torch.Tensor
) — 由扩散过程创建的样本的当前实例。 - generator (
torch.Generator
, 可选) — 随机数生成器。 - return_dict (
bool
, 可选, 默认为True
) — 是否返回 SdeVeOutput 或tuple
。
返回值
SdeVeOutput 或 tuple
如果 return_dict 为 True
,则返回 SdeVeOutput,否则返回一个元组,其中第一个元素是样本张量。
根据网络的 model_output
校正预测的样本。这通常在对先前时间步长进行预测后重复运行。
step_pred
< source >( model_output: Tensor timestep: int sample: Tensor generator: typing.Optional[torch._C.Generator] = None return_dict: bool = True ) → SdeVeOutput 或 tuple
参数
- model_output (
torch.Tensor
) — 来自已学习的扩散模型的直接输出。 - timestep (
int
) — 扩散链中当前的离散时间步长。 - sample (
torch.Tensor
) — 由扩散过程创建的当前样本实例。 - generator (
torch.Generator
, 可选) — 随机数生成器。 - return_dict (
bool
, 可选,默认为True
) — 是否返回 SdeVeOutput 或tuple
。
返回值
SdeVeOutput 或 tuple
如果 return_dict 为 True
,则返回 SdeVeOutput,否则返回一个元组,其中第一个元素是样本张量。
通过反转 SDE,从上一个时间步长预测样本。此函数通过已学习的模型输出(通常是预测的噪声)传播扩散过程。
SdeVeOutput
class diffusers.schedulers.scheduling_sde_ve.SdeVeOutput
< source >( prev_sample: Tensor prev_sample_mean: Tensor )
调度器的 step
函数输出的输出类。