diff --git a/extensions_built_in/sd_trainer/SDTrainer.py b/extensions_built_in/sd_trainer/SDTrainer.py index 2233e073..2b504e21 100644 --- a/extensions_built_in/sd_trainer/SDTrainer.py +++ b/extensions_built_in/sd_trainer/SDTrainer.py @@ -708,7 +708,11 @@ class SDTrainer(BaseSDTrainProcess): unconditional_target = unconditional_target * alpha target = unconditional_target + guidance_scale * (target - unconditional_target) - + + if self.train_config.do_differential_guidance: + with torch.no_grad(): + guidance_scale = self.train_config.differential_guidance_scale + target = noise_pred + guidance_scale * (target - noise_pred) if target is None: target = noise diff --git a/toolkit/config_modules.py b/toolkit/config_modules.py index 22a78189..96617620 100644 --- a/toolkit/config_modules.py +++ b/toolkit/config_modules.py @@ -545,7 +545,10 @@ class TrainConfig: self.unconditional_prompt: str = kwargs.get('unconditional_prompt', '') if isinstance(self.guidance_loss_target, tuple): self.guidance_loss_target = list(self.guidance_loss_target) - + + self.do_differential_guidance = kwargs.get('do_differential_guidance', False) + self.differential_guidance_scale = kwargs.get('differential_guidance_scale', 3.0) + # for multi stage models, how often to switch the boundary self.switch_boundary_every: int = kwargs.get('switch_boundary_every', 1) diff --git a/toolkit/stable_diffusion_model.py b/toolkit/stable_diffusion_model.py index 11bae8b1..ab9a57f5 100644 --- a/toolkit/stable_diffusion_model.py +++ b/toolkit/stable_diffusion_model.py @@ -2907,7 +2907,7 @@ class StableDiffusion: try: te_has_grad = encoder.text_model.final_layer_norm.weight.requires_grad except: - te_has_grad = encoder.encoder.block[0].layer[0].SelfAttention.q.weight.requires_grad + te_has_grad = False self.device_state['text_encoder'].append({ 'training': encoder.training, 'device': encoder.device, diff --git a/ui/public/imgs/diff_guidance.png b/ui/public/imgs/diff_guidance.png new file mode 100644 index 00000000..9697c978 Binary files /dev/null and b/ui/public/imgs/diff_guidance.png differ diff --git a/ui/src/app/jobs/new/SimpleJob.tsx b/ui/src/app/jobs/new/SimpleJob.tsx index fa9d532a..093481ed 100644 --- a/ui/src/app/jobs/new/SimpleJob.tsx +++ b/ui/src/app/jobs/new/SimpleJob.tsx @@ -669,6 +669,45 @@ export default function SimpleJob({ +
+ >
+ ),
+ },
};
export const getDoc = (key: string | null | undefined): ConfigDoc | null => {
diff --git a/ui/src/types.ts b/ui/src/types.ts
index d01bd89f..80f0b782 100644
--- a/ui/src/types.ts
+++ b/ui/src/types.ts
@@ -139,6 +139,8 @@ export interface TrainConfig {
blank_prompt_preservation_multiplier?: number;
switch_boundary_every: number;
loss_type: 'mse' | 'mae' | 'wavelet' | 'stepped';
+ do_differential_guidance?: boolean;
+ differential_guidance_scale?: number;
}
export interface QuantizeKwargsConfig {
diff --git a/version.py b/version.py
index 48879f5b..9b8720f5 100644
--- a/version.py
+++ b/version.py
@@ -1 +1 @@
-VERSION = "0.7.3"
\ No newline at end of file
+VERSION = "0.7.4"
\ No newline at end of file