@@ -352,7 +352,7 @@ struct EDMVDenoiser : public CompVisVDenoiser {
352352 }
353353
354354 float t_to_sigma (float t) {
355- return std::exp (t * 4 / (float )TIMESTEPS);
355+ return std::exp (t * 4 / (float )TIMESTEPS);
356356 }
357357
358358 float sigma_to_t (float s) {
@@ -491,7 +491,7 @@ struct FluxFlowDenoiser : public Denoiser {
491491typedef std::function<ggml_tensor*(ggml_tensor*, float , int )> denoise_cb_t ;
492492
493493// k diffusion reverse ODE: dx = (x - D(x;\sigma)) / \sigma dt; \sigma(t) = t
494- static void sample_k_diffusion (sample_method_t method,
494+ static bool sample_k_diffusion (sample_method_t method,
495495 denoise_cb_t model,
496496 ggml_context* work_ctx,
497497 ggml_tensor* x,
@@ -510,6 +510,9 @@ static void sample_k_diffusion(sample_method_t method,
510510
511511 // denoise
512512 ggml_tensor* denoised = model (x, sigma, i + 1 );
513+ if (denoised == NULL ) {
514+ return false ;
515+ }
513516
514517 // d = (x - denoised) / sigma
515518 {
@@ -563,6 +566,9 @@ static void sample_k_diffusion(sample_method_t method,
563566
564567 // denoise
565568 ggml_tensor* denoised = model (x, sigma, i + 1 );
569+ if (denoised == NULL ) {
570+ return false ;
571+ }
566572
567573 // d = (x - denoised) / sigma
568574 {
@@ -594,6 +600,9 @@ static void sample_k_diffusion(sample_method_t method,
594600 for (int i = 0 ; i < steps; i++) {
595601 // denoise
596602 ggml_tensor* denoised = model (x, sigmas[i], -(i + 1 ));
603+ if (denoised == NULL ) {
604+ return false ;
605+ }
597606
598607 // d = (x - denoised) / sigma
599608 {
@@ -628,7 +637,10 @@ static void sample_k_diffusion(sample_method_t method,
628637 }
629638
630639 ggml_tensor* denoised = model (x2, sigmas[i + 1 ], i + 1 );
631- float * vec_denoised = (float *)denoised->data ;
640+ if (denoised == NULL ) {
641+ return false ;
642+ }
643+ float * vec_denoised = (float *)denoised->data ;
632644 for (int j = 0 ; j < ggml_nelements (x); j++) {
633645 float d2 = (vec_x2[j] - vec_denoised[j]) / sigmas[i + 1 ];
634646 vec_d[j] = (vec_d[j] + d2) / 2 ;
@@ -644,6 +656,9 @@ static void sample_k_diffusion(sample_method_t method,
644656 for (int i = 0 ; i < steps; i++) {
645657 // denoise
646658 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
659+ if (denoised == NULL ) {
660+ return false ;
661+ }
647662
648663 // d = (x - denoised) / sigma
649664 {
@@ -680,7 +695,10 @@ static void sample_k_diffusion(sample_method_t method,
680695 }
681696
682697 ggml_tensor* denoised = model (x2, sigma_mid, i + 1 );
683- float * vec_denoised = (float *)denoised->data ;
698+ if (denoised == NULL ) {
699+ return false ;
700+ }
701+ float * vec_denoised = (float *)denoised->data ;
684702 for (int j = 0 ; j < ggml_nelements (x); j++) {
685703 float d2 = (vec_x2[j] - vec_denoised[j]) / sigma_mid;
686704 vec_x[j] = vec_x[j] + d2 * dt_2;
@@ -697,6 +715,9 @@ static void sample_k_diffusion(sample_method_t method,
697715 for (int i = 0 ; i < steps; i++) {
698716 // denoise
699717 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
718+ if (denoised == NULL ) {
719+ return false ;
720+ }
700721
701722 // get_ancestral_step
702723 float sigma_up = std::min (sigmas[i + 1 ],
@@ -741,6 +762,9 @@ static void sample_k_diffusion(sample_method_t method,
741762 }
742763
743764 ggml_tensor* denoised = model (x2, sigmas[i + 1 ], i + 1 );
765+ if (denoised == NULL ) {
766+ return false ;
767+ }
744768
745769 // Second half-step
746770 for (int j = 0 ; j < ggml_nelements (x); j++) {
@@ -771,6 +795,9 @@ static void sample_k_diffusion(sample_method_t method,
771795 for (int i = 0 ; i < steps; i++) {
772796 // denoise
773797 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
798+ if (denoised == NULL ) {
799+ return false ;
800+ }
774801
775802 float t = t_fn (sigmas[i]);
776803 float t_next = t_fn (sigmas[i + 1 ]);
@@ -810,6 +837,9 @@ static void sample_k_diffusion(sample_method_t method,
810837 for (int i = 0 ; i < steps; i++) {
811838 // denoise
812839 ggml_tensor* denoised = model (x, sigmas[i], i + 1 );
840+ if (denoised == NULL ) {
841+ return false ;
842+ }
813843
814844 float t = t_fn (sigmas[i]);
815845 float t_next = t_fn (sigmas[i + 1 ]);
@@ -860,7 +890,10 @@ static void sample_k_diffusion(sample_method_t method,
860890
861891 // Denoising step
862892 ggml_tensor* denoised = model (x_cur, sigma, i + 1 );
863- float * vec_denoised = (float *)denoised->data ;
893+ if (denoised == NULL ) {
894+ return false ;
895+ }
896+ float * vec_denoised = (float *)denoised->data ;
864897 // d_cur = (x_cur - denoised) / sigma
865898 struct ggml_tensor * d_cur = ggml_dup_tensor (work_ctx, x_cur);
866899 float * vec_d_cur = (float *)d_cur->data ;
@@ -1003,6 +1036,9 @@ static void sample_k_diffusion(sample_method_t method,
10031036
10041037 // denoise
10051038 ggml_tensor* denoised = model (x, sigma, i + 1 );
1039+ if (denoised == NULL ) {
1040+ return false ;
1041+ }
10061042
10071043 // x = denoised
10081044 {
@@ -1129,6 +1165,9 @@ static void sample_k_diffusion(sample_method_t method,
11291165 // p. 8 (7), compare also p. 38 (226) therein.
11301166 struct ggml_tensor * model_output =
11311167 model (x, sigma, i + 1 );
1168+ if (model_output == NULL ) {
1169+ return false ;
1170+ }
11321171 // Here model_output is still the k-diffusion denoiser
11331172 // output, not the U-net output F_theta(c_in(sigma) x;
11341173 // ...) in Karras et al. (2022), whereas Diffusers'
@@ -1288,6 +1327,9 @@ static void sample_k_diffusion(sample_method_t method,
12881327 }
12891328 struct ggml_tensor * model_output =
12901329 model (x, sigma, i + 1 );
1330+ if (model_output == NULL ) {
1331+ return false ;
1332+ }
12911333 {
12921334 float * vec_x = (float *)x->data ;
12931335 float * vec_model_output =
@@ -1395,8 +1437,9 @@ static void sample_k_diffusion(sample_method_t method,
13951437
13961438 default :
13971439 LOG_ERROR (" Attempting to sample with nonexisting sample method %i" , method);
1398- abort () ;
1440+ return false ;
13991441 }
1442+ return true ;
14001443}
14011444
14021445#endif // __DENOISER_HPP__
0 commit comments