Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit dc0882c

Browse files
feat: add exponential scheduler (leejet#346)
* feat: added exponential scheduler * updated README * improved exponential formatting --------- Co-authored-by: leejet <[email protected]>
1 parent d00c948 commit dc0882c

File tree

5 files changed

+29
-2
lines changed

5 files changed

+29
-2
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ arguments:
223223
--rng {std_default, cuda} RNG (default: cuda)
224224
-s SEED, --seed SEED RNG seed (default: 42, use random seed for < 0)
225225
-b, --batch-count COUNT number of images to generate.
226-
--schedule {discrete, karras, ays, gits} Denoiser sigma schedule (default: discrete)
226+
--schedule {discrete, karras, exponential, ays, gits} Denoiser sigma schedule (default: discrete)
227227
--clip-skip N ignore last layers of CLIP network; 1 ignores none, 2 ignores one layer (default: -1)
228228
<= 0 represents unspecified, will be 1 for SD1.x, 2 for SD2.x
229229
--vae-tiling process vae in tiles to reduce memory usage

denoiser.hpp

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,27 @@ struct DiscreteSchedule : SigmaSchedule {
4242
}
4343
};
4444

45+
struct ExponentialSchedule : SigmaSchedule {
46+
std::vector<float> get_sigmas(uint32_t n, float sigma_min, float sigma_max, t_to_sigma_t t_to_sigma) {
47+
std::vector<float> sigmas;
48+
49+
// Calculate step size
50+
float log_sigma_min = std::log(sigma_min);
51+
float log_sigma_max = std::log(sigma_max);
52+
float step = (log_sigma_max - log_sigma_min) / (n - 1);
53+
54+
// Fill sigmas with exponential values
55+
for (uint32_t i = 0; i < n; ++i) {
56+
float sigma = std::exp(log_sigma_max - step * i);
57+
sigmas.push_back(sigma);
58+
}
59+
60+
sigmas.push_back(0.0f);
61+
62+
return sigmas;
63+
}
64+
};
65+
4566
/* interp and linear_interp adapted from dpilger26's NumCpp library:
4667
* https://github.com/dpilger26/NumCpp/tree/5e40aab74d14e257d65d3dc385c9ff9e2120c60e */
4768
constexpr double interp(double left, double right, double perc) noexcept {

examples/cli/main.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ const char* schedule_str[] = {
4646
"default",
4747
"discrete",
4848
"karras",
49+
"exponential",
4950
"ays",
5051
"gits",
5152
};
@@ -203,7 +204,7 @@ void print_usage(int argc, const char* argv[]) {
203204
printf(" --rng {std_default, cuda} RNG (default: cuda)\n");
204205
printf(" -s SEED, --seed SEED RNG seed (default: 42, use random seed for < 0)\n");
205206
printf(" -b, --batch-count COUNT number of images to generate.\n");
206-
printf(" --schedule {discrete, karras, ays, gits} Denoiser sigma schedule (default: discrete)\n");
207+
printf(" --schedule {discrete, karras, exponential, ays, gits} Denoiser sigma schedule (default: discrete)\n");
207208
printf(" --clip-skip N ignore last layers of CLIP network; 1 ignores none, 2 ignores one layer (default: -1)\n");
208209
printf(" <= 0 represents unspecified, will be 1 for SD1.x, 2 for SD2.x\n");
209210
printf(" --vae-tiling process vae in tiles to reduce memory usage\n");

stable-diffusion.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -538,6 +538,10 @@ class StableDiffusionGGML {
538538
LOG_INFO("running with Karras schedule");
539539
denoiser->schedule = std::make_shared<KarrasSchedule>();
540540
break;
541+
case EXPONENTIAL:
542+
LOG_INFO("running exponential schedule");
543+
denoiser->schedule = std::make_shared<ExponentialSchedule>();
544+
break;
541545
case AYS:
542546
LOG_INFO("Running with Align-Your-Steps schedule");
543547
denoiser->schedule = std::make_shared<AYSSchedule>();

stable-diffusion.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ enum schedule_t {
5151
DEFAULT,
5252
DISCRETE,
5353
KARRAS,
54+
EXPONENTIAL,
5455
AYS,
5556
GITS,
5657
N_SCHEDULES

0 commit comments

Comments
 (0)