2 #ifndef _NNDEPLOY_MODEL_STABLE_DIFFUSION_SCHEDULER_H_
3 #define _NNDEPLOY_MODEL_STABLE_DIFFUSION_SCHEDULER_H_
28 namespace stable_diffusion {
39 if (
this == ¶m)
return *
this;
54 std::string version_ =
"v1.5";
55 int num_train_timesteps_ = 1000;
56 bool clip_sample_ =
false;
57 int num_inference_steps_ = 50;
58 int unet_channels_ = 4;
59 int image_height_ = 512;
60 int image_width_ = 512;
61 float guidance_scale_ = 7.5;
62 float vae_scale_factor_ = 0.18215;
63 float init_noise_sigma_ = 1.0f;
67 rapidjson::Document::AllocatorType &allocator);
135 template <
typename T>
145 std::map<SchedulerType, std::shared_ptr<SchedulerCreator>> &
153 template <
typename T>
178 device ::Tensor *latents);
virtual ~SchedulerCreator()
virtual Scheduler * createScheduler(SchedulerType type)=0
SchedulerParam & operator=(const SchedulerParam ¶m)
virtual base::Status deserialize(rapidjson::Value &json)
virtual base::Status serialize(rapidjson::Value &json, rapidjson::Document::AllocatorType &allocator)
PARAM_COPY_TO(SchedulerParam)
PARAM_COPY(SchedulerParam)
virtual ~SchedulerParam()
virtual base::Status deinit()=0
virtual base::Status scaleModelInput(device::Tensor *sample, int index)=0
virtual base::Status step(device::Tensor *sample, device::Tensor *timestep, device::Tensor *latents, device::Tensor *pre_sample)=0
virtual std::vector< int > & getTimesteps()=0
Get the Timestep object.
virtual base::Status setTimesteps()=0
Set the Timesteps object.
Scheduler(SchedulerType type)
SchedulerParam * scheduler_param_
virtual base::Status init(SchedulerParam *param)=0
TypeSchedulerRegister(SchedulerType type)
#define NNDEPLOY_CC_API
api
@ kSchedulerTypeNotSupport
base::Status initializeLatents(std::mt19937 &generator, float init_noise_sigma, device ::Tensor *latents)
std::map< SchedulerType, std::shared_ptr< SchedulerCreator > > & getGlobalSchedulerCreatorMap()
Get the Global Scheduler Creator Map object.
Scheduler * createScheduler(SchedulerType type)
Create a Scheduler object.