Bootstrap

RFdiffusion EuclideanDiffuser类解读

EuclideanDiffuser 是 RFdiffusion 中的一个关键类,专门设计用于对**三维空间中的点(如蛋白质的原子坐标)**进行扩散处理。它通过逐步向这些点添加噪音来实现扩散过程,从而为扩散模型提供输入数据,并通过逆扩散还原这些数据。

get_beta_schedule函数源代码

def get_beta_schedule(T, b0, bT, schedule_type, schedule_params={}, inference=False):
    """
    Given a noise schedule type, create the beta schedule
    """
    assert schedule_type in ["linear"]

    # Adjust b0 and bT if T is not 200
    # This is a good approximation, with the beta correction below, unless T is very small
    assert T >= 15, "With discrete time and T < 15, the schedule is badly approximated"
    b0 *= 200 / T
    bT *= 200 / T

    # linear noise schedule
    if schedule_type == "linear":
        schedule = torch.linspace(b0, bT, T)

    else:
        raise NotImplementedError(f"Schedule of type {schedule_type} not implemented.")

    # get alphabar_t for convenience
    alpha_schedule = 1 - schedule
    alphabar_t_schedule = torch.cumprod(alpha_schedule, dim=0)

    if inference:
        print(
            f"With this beta schedule ({schedule_type} schedule, beta_0 = {round(b0, 3)}, beta_T = {round(bT,3)}), alpha_bar_T = {alphabar_t_schedule[-1]}"
        )

    return schedule, alpha_schedule, alphabar_t_schedule

函数功能

生成扩散过程中的 β、α 和 α‾调度,用于正向扩散和反向去噪过程。

参数说明:
  1. T: 总的时间步数,即扩散过程持续的步数。
  2. b0 和 bT:
    • 初始噪音强度 β0和最终噪音强度 βT​。
    • 用于确定噪音随时间的线性变化范围。
  3. schedule_type:
    • 扩散调度类型,目前仅支持 "linear"(线性调度)。
  4. schedule_params:
    • 附加参数(暂未使用,但可以扩展为支持其他调度类型)。
  5. inference:
    • 如果为 True,将输出调度的诊断信息,用于调试或检查。
代码解读
1. 调度类型验证
assert schedule_type in ["linear"]

目前只支持 "linear" 调度,否则抛出错误。

2. 时间步数和噪音范围调整
assert T >= 15, "With discrete time and T < 15, the schedule is badly approxim
;