@@ -53,7 +53,7 @@ struct ExponentialSchedule : SigmaSchedule {
53
53
// Calculate step size
54
54
float log_sigma_min = std::log (sigma_min);
55
55
float log_sigma_max = std::log (sigma_max);
56
- float step = (log_sigma_max - log_sigma_min) / (n - 1 );
56
+ float step = (log_sigma_max - log_sigma_min) / (n - 1 );
57
57
58
58
// Fill sigmas with exponential values
59
59
for (uint32_t i = 0 ; i < n; ++i) {
@@ -209,7 +209,7 @@ struct AYSSchedule : SigmaSchedule {
209
209
210
210
/*
211
211
* GITS Scheduler: https://github.com/zju-pi/diff-sampler/tree/main/gits-main
212
- */
212
+ */
213
213
struct GITSSchedule : SigmaSchedule {
214
214
std::vector<float > get_sigmas (uint32_t n, float sigma_min, float sigma_max, t_to_sigma_t t_to_sigma) {
215
215
if (sigma_max <= 0 .0f ) {
@@ -225,7 +225,7 @@ struct GITSSchedule : SigmaSchedule {
225
225
// Calculate the index based on the coefficient
226
226
int index = static_cast <int >((coeff - 0 .80f ) / 0 .05f );
227
227
// Ensure the index is within bounds
228
- index = std::max (0 , std::min (index, static_cast <int >(GITS_NOISE.size () - 1 )));
228
+ index = std::max (0 , std::min (index, static_cast <int >(GITS_NOISE.size () - 1 )));
229
229
const std::vector<std::vector<float >>& selected_noise = *GITS_NOISE[index];
230
230
231
231
if (n <= 20 ) {
@@ -841,7 +841,7 @@ static void sample_k_diffusion(sample_method_t method,
841
841
} break ;
842
842
case IPNDM: // iPNDM sampler from https://github.com/zju-pi/diff-sampler/tree/main/diff-solvers-main
843
843
{
844
- int max_order = 4 ;
844
+ int max_order = 4 ;
845
845
ggml_tensor* x_next = x;
846
846
std::vector<ggml_tensor*> buffer_model;
847
847
@@ -852,15 +852,15 @@ static void sample_k_diffusion(sample_method_t method,
852
852
float sigma_next = sigmas[i + 1 ];
853
853
854
854
ggml_tensor* x_cur = x_next;
855
- float * vec_x_cur = (float *)x_cur->data ;
856
- float * vec_x_next = (float *)x_next->data ;
855
+ float * vec_x_cur = (float *)x_cur->data ;
856
+ float * vec_x_next = (float *)x_next->data ;
857
857
858
858
// Denoising step
859
859
ggml_tensor* denoised = model (x_cur, sigma, i + 1 );
860
- float * vec_denoised = (float *)denoised->data ;
860
+ float * vec_denoised = (float *)denoised->data ;
861
861
// d_cur = (x_cur - denoised) / sigma
862
862
struct ggml_tensor * d_cur = ggml_dup_tensor (work_ctx, x_cur);
863
- float * vec_d_cur = (float *)d_cur->data ;
863
+ float * vec_d_cur = (float *)d_cur->data ;
864
864
865
865
for (int j = 0 ; j < ggml_nelements (d_cur); j++) {
866
866
vec_d_cur[j] = (vec_x_cur[j] - vec_denoised[j]) / sigma;
@@ -877,34 +877,31 @@ static void sample_k_diffusion(sample_method_t method,
877
877
break ;
878
878
879
879
case 2 : // Use one history point
880
- {
881
- float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
882
- for (int j = 0 ; j < ggml_nelements (x_next); j++) {
883
- vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (3 * vec_d_cur[j] - vec_d_prev1[j]) / 2 ;
884
- }
880
+ {
881
+ float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
882
+ for (int j = 0 ; j < ggml_nelements (x_next); j++) {
883
+ vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (3 * vec_d_cur[j] - vec_d_prev1[j]) / 2 ;
885
884
}
886
- break ;
885
+ } break ;
887
886
888
887
case 3 : // Use two history points
889
- {
890
- float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
891
- float * vec_d_prev2 = (float *)buffer_model[buffer_model.size () - 2 ]->data ;
892
- for (int j = 0 ; j < ggml_nelements (x_next); j++) {
893
- vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (23 * vec_d_cur[j] - 16 * vec_d_prev1[j] + 5 * vec_d_prev2[j]) / 12 ;
894
- }
888
+ {
889
+ float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
890
+ float * vec_d_prev2 = (float *)buffer_model[buffer_model.size () - 2 ]->data ;
891
+ for (int j = 0 ; j < ggml_nelements (x_next); j++) {
892
+ vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (23 * vec_d_cur[j] - 16 * vec_d_prev1[j] + 5 * vec_d_prev2[j]) / 12 ;
895
893
}
896
- break ;
894
+ } break ;
897
895
898
896
case 4 : // Use three history points
899
- {
900
- float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
901
- float * vec_d_prev2 = (float *)buffer_model[buffer_model.size () - 2 ]->data ;
902
- float * vec_d_prev3 = (float *)buffer_model[buffer_model.size () - 3 ]->data ;
903
- for (int j = 0 ; j < ggml_nelements (x_next); j++) {
904
- vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (55 * vec_d_cur[j] - 59 * vec_d_prev1[j] + 37 * vec_d_prev2[j] - 9 * vec_d_prev3[j]) / 24 ;
905
- }
897
+ {
898
+ float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
899
+ float * vec_d_prev2 = (float *)buffer_model[buffer_model.size () - 2 ]->data ;
900
+ float * vec_d_prev3 = (float *)buffer_model[buffer_model.size () - 3 ]->data ;
901
+ for (int j = 0 ; j < ggml_nelements (x_next); j++) {
902
+ vec_x_next[j] = vec_x_cur[j] + (sigma_next - sigma) * (55 * vec_d_cur[j] - 59 * vec_d_prev1[j] + 37 * vec_d_prev2[j] - 9 * vec_d_prev3[j]) / 24 ;
906
903
}
907
- break ;
904
+ } break ;
908
905
}
909
906
910
907
// Manage buffer_model
@@ -932,23 +929,23 @@ static void sample_k_diffusion(sample_method_t method,
932
929
float t_next = sigmas[i + 1 ];
933
930
934
931
// Denoising step
935
- ggml_tensor* denoised = model (x, sigma, i + 1 );
936
- float * vec_denoised = (float *)denoised->data ;
932
+ ggml_tensor* denoised = model (x, sigma, i + 1 );
933
+ float * vec_denoised = (float *)denoised->data ;
937
934
struct ggml_tensor * d_cur = ggml_dup_tensor (work_ctx, x);
938
- float * vec_d_cur = (float *)d_cur->data ;
939
- float * vec_x = (float *)x->data ;
935
+ float * vec_d_cur = (float *)d_cur->data ;
936
+ float * vec_x = (float *)x->data ;
940
937
941
938
// d_cur = (x - denoised) / sigma
942
939
for (int j = 0 ; j < ggml_nelements (d_cur); j++) {
943
940
vec_d_cur[j] = (vec_x[j] - vec_denoised[j]) / sigma;
944
941
}
945
942
946
- int order = std::min (max_order, i + 1 );
947
- float h_n = t_next - sigma;
943
+ int order = std::min (max_order, i + 1 );
944
+ float h_n = t_next - sigma;
948
945
float h_n_1 = (i > 0 ) ? (sigma - sigmas[i - 1 ]) : h_n;
949
946
950
947
switch (order) {
951
- case 1 : // First Euler step
948
+ case 1 : // First Euler step
952
949
for (int j = 0 ; j < ggml_nelements (x_next); j++) {
953
950
vec_x[j] += vec_d_cur[j] * h_n;
954
951
}
@@ -963,7 +960,7 @@ static void sample_k_diffusion(sample_method_t method,
963
960
}
964
961
965
962
case 3 : {
966
- float h_n_2 = (i > 1 ) ? (sigmas[i - 1 ] - sigmas[i - 2 ]) : h_n_1;
963
+ float h_n_2 = (i > 1 ) ? (sigmas[i - 1 ] - sigmas[i - 2 ]) : h_n_1;
967
964
float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
968
965
float * vec_d_prev2 = (buffer_model.size () > 1 ) ? (float *)buffer_model[buffer_model.size () - 2 ]->data : vec_d_prev1;
969
966
for (int j = 0 ; j < ggml_nelements (x_next); j++) {
@@ -973,8 +970,8 @@ static void sample_k_diffusion(sample_method_t method,
973
970
}
974
971
975
972
case 4 : {
976
- float h_n_2 = (i > 1 ) ? (sigmas[i - 1 ] - sigmas[i - 2 ]) : h_n_1;
977
- float h_n_3 = (i > 2 ) ? (sigmas[i - 2 ] - sigmas[i - 3 ]) : h_n_2;
973
+ float h_n_2 = (i > 1 ) ? (sigmas[i - 1 ] - sigmas[i - 2 ]) : h_n_1;
974
+ float h_n_3 = (i > 2 ) ? (sigmas[i - 2 ] - sigmas[i - 3 ]) : h_n_2;
978
975
float * vec_d_prev1 = (float *)buffer_model.back ()->data ;
979
976
float * vec_d_prev2 = (buffer_model.size () > 1 ) ? (float *)buffer_model[buffer_model.size () - 2 ]->data : vec_d_prev1;
980
977
float * vec_d_prev3 = (buffer_model.size () > 2 ) ? (float *)buffer_model[buffer_model.size () - 3 ]->data : vec_d_prev2;
0 commit comments