Inverse the sample `x` from time `t_start` to `t_end` by DPM-Solver. For discrete-time DPMs, we use `t_start=1/N`, where `N` is the total time steps during training.
(self, x, steps=20, t_start=None, t_end=None, order=2, skip_type='time_uniform',
method='multistep', lower_order_final=True, denoise_to_zero=False, solver_type='dpmsolver',
atol=0.0078, rtol=0.05, return_intermediate=False,
)
| 1038 | return xt |
| 1039 | |
| 1040 | def inverse(self, x, steps=20, t_start=None, t_end=None, order=2, skip_type='time_uniform', |
| 1041 | method='multistep', lower_order_final=True, denoise_to_zero=False, solver_type='dpmsolver', |
| 1042 | atol=0.0078, rtol=0.05, return_intermediate=False, |
| 1043 | ): |
| 1044 | """ |
| 1045 | Inverse the sample `x` from time `t_start` to `t_end` by DPM-Solver. |
| 1046 | For discrete-time DPMs, we use `t_start=1/N`, where `N` is the total time steps during training. |
| 1047 | """ |
| 1048 | t_0 = 1. / self.noise_schedule.total_N if t_start is None else t_start |
| 1049 | t_T = self.noise_schedule.T if t_end is None else t_end |
| 1050 | assert t_0 > 0 and t_T > 0, "Time range needs to be greater than 0. For discrete-time DPMs, it needs to be in [1 / N, 1], where N is the length of betas array" |
| 1051 | return self.sample(x, steps=steps, t_start=t_0, t_end=t_T, order=order, skip_type=skip_type, |
| 1052 | method=method, lower_order_final=lower_order_final, denoise_to_zero=denoise_to_zero, solver_type=solver_type, |
| 1053 | atol=atol, rtol=rtol, return_intermediate=return_intermediate) |
| 1054 | |
| 1055 | def sample(self, x, steps=20, t_start=None, t_end=None, order=2, skip_type='time_uniform', |
| 1056 | method='multistep', lower_order_final=True, denoise_to_zero=False, solver_type='dpmsolver', |