fix: sample_k_diffusion should be static
This commit is contained in:
parent
8d2050a5cf
commit
f9f0d4685b
17
denoiser.hpp
17
denoiser.hpp
@ -263,14 +263,13 @@ struct CompVisVDenoiser : public Denoiser {
|
|||||||
|
|
||||||
typedef std::function<ggml_tensor*(ggml_tensor*, float, int)> denoise_cb_t;
|
typedef std::function<ggml_tensor*(ggml_tensor*, float, int)> denoise_cb_t;
|
||||||
|
|
||||||
|
|
||||||
// k diffusion reverse ODE: dx = (x - D(x;\sigma)) / \sigma dt; \sigma(t) = t
|
// k diffusion reverse ODE: dx = (x - D(x;\sigma)) / \sigma dt; \sigma(t) = t
|
||||||
void sample_k_diffusion(sample_method_t method,
|
static void sample_k_diffusion(sample_method_t method,
|
||||||
denoise_cb_t model,
|
denoise_cb_t model,
|
||||||
ggml_context* work_ctx,
|
ggml_context* work_ctx,
|
||||||
ggml_tensor* x,
|
ggml_tensor* x,
|
||||||
std::vector<float> sigmas,
|
std::vector<float> sigmas,
|
||||||
std::shared_ptr<RNG> rng) {
|
std::shared_ptr<RNG> rng) {
|
||||||
size_t steps = sigmas.size() - 1;
|
size_t steps = sigmas.size() - 1;
|
||||||
// sample_euler_ancestral
|
// sample_euler_ancestral
|
||||||
switch (method) {
|
switch (method) {
|
||||||
@ -401,7 +400,7 @@ void sample_k_diffusion(sample_method_t method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ggml_tensor* denoised = model(x2, sigmas[i + 1], i + 1);
|
ggml_tensor* denoised = model(x2, sigmas[i + 1], i + 1);
|
||||||
float* vec_denoised = (float*)denoised->data;
|
float* vec_denoised = (float*)denoised->data;
|
||||||
for (int j = 0; j < ggml_nelements(x); j++) {
|
for (int j = 0; j < ggml_nelements(x); j++) {
|
||||||
float d2 = (vec_x2[j] - vec_denoised[j]) / sigmas[i + 1];
|
float d2 = (vec_x2[j] - vec_denoised[j]) / sigmas[i + 1];
|
||||||
vec_d[j] = (vec_d[j] + d2) / 2;
|
vec_d[j] = (vec_d[j] + d2) / 2;
|
||||||
@ -453,7 +452,7 @@ void sample_k_diffusion(sample_method_t method,
|
|||||||
}
|
}
|
||||||
|
|
||||||
ggml_tensor* denoised = model(x2, sigma_mid, i + 1);
|
ggml_tensor* denoised = model(x2, sigma_mid, i + 1);
|
||||||
float* vec_denoised = (float*)denoised->data;
|
float* vec_denoised = (float*)denoised->data;
|
||||||
for (int j = 0; j < ggml_nelements(x); j++) {
|
for (int j = 0; j < ggml_nelements(x); j++) {
|
||||||
float d2 = (vec_x2[j] - vec_denoised[j]) / sigma_mid;
|
float d2 = (vec_x2[j] - vec_denoised[j]) / sigma_mid;
|
||||||
vec_x[j] = vec_x[j] + d2 * dt_2;
|
vec_x[j] = vec_x[j] + d2 * dt_2;
|
||||||
|
Loading…
Reference in New Issue
Block a user