mirror of
https://github.com/brycedrennan/imaginAIry
synced 2024-10-31 03:20:40 +00:00
316114e660
Wrote an openai script and custom prompt to generate them.
47 lines
1.1 KiB
Python
47 lines
1.1 KiB
Python
"""Functions for diffusion sampling calculations"""
|
|
|
|
import torch
|
|
from scipy import integrate
|
|
|
|
from imaginairy.vendored.k_diffusion.utils import append_dims
|
|
|
|
|
|
def linear_multistep_coeff(order, t, i, j, epsrel=1e-4):
|
|
if order - 1 > i:
|
|
msg = f"Order {order} too high for step {i}"
|
|
raise ValueError(msg)
|
|
|
|
def fn(tau):
|
|
prod = 1.0
|
|
for k in range(order):
|
|
if j == k:
|
|
continue
|
|
prod *= (tau - t[i - k]) / (t[i - j] - t[i - k])
|
|
return prod
|
|
|
|
return integrate.quad(fn, t[i], t[i + 1], epsrel=epsrel)[0]
|
|
|
|
|
|
def get_ancestral_step(sigma_from, sigma_to, eta=1.0):
|
|
if not eta:
|
|
return sigma_to, 0.0
|
|
sigma_up = torch.minimum(
|
|
sigma_to,
|
|
eta
|
|
* (sigma_to**2 * (sigma_from**2 - sigma_to**2) / sigma_from**2) ** 0.5,
|
|
)
|
|
sigma_down = (sigma_to**2 - sigma_up**2) ** 0.5
|
|
return sigma_down, sigma_up
|
|
|
|
|
|
def to_d(x, sigma, denoised):
|
|
return (x - denoised) / append_dims(sigma, x.ndim)
|
|
|
|
|
|
def to_neg_log_sigma(sigma):
|
|
return sigma.log().neg()
|
|
|
|
|
|
def to_sigma(neg_log_sigma):
|
|
return neg_log_sigma.neg().exp()
|