Skip to content

Commit dfff9b7

Browse files
authored
fix: adjust clip skip default value from 1 to 2 (#3011)
* Revert "Revert "feat: add clip skip handling (#2999)" (#3008)" This reverts commit 989a1ad. * feat: use clip skip 2 as default
1 parent 989a1ad commit dfff9b7

File tree

7 files changed

+44
-12
lines changed

7 files changed

+44
-12
lines changed

language/en.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -320,6 +320,8 @@
320320
"vae": "vae",
321321
"CFG Mimicking from TSNR": "CFG Mimicking from TSNR",
322322
"Enabling Fooocus's implementation of CFG mimicking for TSNR (effective when real CFG > mimicked CFG).": "Enabling Fooocus's implementation of CFG mimicking for TSNR (effective when real CFG > mimicked CFG).",
323+
"CLIP Skip": "CLIP Skip",
324+
"Bypass CLIP layers to avoid overfitting (use 1 to not skip any layers, 2 is recommended).": "Bypass CLIP layers to avoid overfitting (use 1 to not skip any layers, 2 is recommended).",
323325
"Sampler": "Sampler",
324326
"dpmpp_2m_sde_gpu": "dpmpp_2m_sde_gpu",
325327
"Only effective in non-inpaint mode.": "Only effective in non-inpaint mode.",

modules/async_worker.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ def handler(async_task):
174174
adm_scaler_negative = args.pop()
175175
adm_scaler_end = args.pop()
176176
adaptive_cfg = args.pop()
177+
clip_skip = args.pop()
177178
sampler_name = args.pop()
178179
scheduler_name = args.pop()
179180
vae_name = args.pop()
@@ -297,6 +298,7 @@ def handler(async_task):
297298
adm_scaler_end = 0.0
298299

299300
print(f'[Parameters] Adaptive CFG = {adaptive_cfg}')
301+
print(f'[Parameters] CLIP Skip = {clip_skip}')
300302
print(f'[Parameters] Sharpness = {sharpness}')
301303
print(f'[Parameters] ControlNet Softness = {controlnet_softness}')
302304
print(f'[Parameters] ADM Scale = '
@@ -466,6 +468,8 @@ def handler(async_task):
466468
loras=loras, base_model_additional_loras=base_model_additional_loras,
467469
use_synthetic_refiner=use_synthetic_refiner, vae_name=vae_name)
468470

471+
pipeline.set_clip_skip(clip_skip)
472+
469473
progressbar(async_task, 3, 'Processing prompts ...')
470474
tasks = []
471475

@@ -924,6 +928,8 @@ def callback(step, x0, x, total_steps, y):
924928
d.append(
925929
('CFG Mimicking from TSNR', 'adaptive_cfg', modules.patch.patch_settings[pid].adaptive_cfg))
926930

931+
if clip_skip > 1:
932+
d.append(('CLIP Skip', 'clip_skip', clip_skip))
927933
d.append(('Sampler', 'sampler', sampler_name))
928934
d.append(('Scheduler', 'scheduler', scheduler_name))
929935
d.append(('VAE', 'vae', vae_name))

modules/config.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -434,6 +434,11 @@ def init_temp_path(path: str | None, default_path: str) -> str:
434434
default_value=7.0,
435435
validator=lambda x: isinstance(x, numbers.Number)
436436
)
437+
default_clip_skip = get_config_item_or_set_default(
438+
key='default_clip_skip',
439+
default_value=2,
440+
validator=lambda x: isinstance(x, int) and 1 <= x <= modules.flags.clip_skip_max
441+
)
437442
default_overwrite_step = get_config_item_or_set_default(
438443
key='default_overwrite_step',
439444
default_value=-1,
@@ -488,6 +493,7 @@ def init_temp_path(path: str | None, default_path: str) -> str:
488493
"default_cfg_scale": "guidance_scale",
489494
"default_sample_sharpness": "sharpness",
490495
"default_cfg_tsnr": "adaptive_cfg",
496+
"default_clip_skip": "clip_skip",
491497
"default_sampler": "sampler",
492498
"default_scheduler": "scheduler",
493499
"default_overwrite_step": "steps",

modules/default_pipeline.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -201,6 +201,17 @@ def clip_encode(texts, pool_top_k=1):
201201
return [[torch.cat(cond_list, dim=1), {"pooled_output": pooled_acc}]]
202202

203203

204+
@torch.no_grad()
205+
@torch.inference_mode()
206+
def set_clip_skip(clip_skip: int):
207+
global final_clip
208+
209+
if final_clip is None:
210+
return
211+
212+
final_clip.clip_layer(-abs(clip_skip))
213+
return
214+
204215
@torch.no_grad()
205216
@torch.inference_mode()
206217
def clear_all_caches():

modules/flags.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@
5454
sampler_list = SAMPLER_NAMES
5555
scheduler_list = SCHEDULER_NAMES
5656

57+
clip_skip_max = 12
58+
5759
default_vae = 'Default (model)'
5860

5961
refiner_swap_method = 'joint'

modules/meta_parser.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,17 @@ def load_parameter_button_click(raw_metadata: dict | str, is_generating: bool):
3434
get_list('styles', 'Styles', loaded_parameter_dict, results)
3535
get_str('performance', 'Performance', loaded_parameter_dict, results)
3636
get_steps('steps', 'Steps', loaded_parameter_dict, results)
37-
get_float('overwrite_switch', 'Overwrite Switch', loaded_parameter_dict, results)
37+
get_number('overwrite_switch', 'Overwrite Switch', loaded_parameter_dict, results)
3838
get_resolution('resolution', 'Resolution', loaded_parameter_dict, results)
39-
get_float('guidance_scale', 'Guidance Scale', loaded_parameter_dict, results)
40-
get_float('sharpness', 'Sharpness', loaded_parameter_dict, results)
39+
get_number('guidance_scale', 'Guidance Scale', loaded_parameter_dict, results)
40+
get_number('sharpness', 'Sharpness', loaded_parameter_dict, results)
4141
get_adm_guidance('adm_guidance', 'ADM Guidance', loaded_parameter_dict, results)
4242
get_str('refiner_swap_method', 'Refiner Swap Method', loaded_parameter_dict, results)
43-
get_float('adaptive_cfg', 'CFG Mimicking from TSNR', loaded_parameter_dict, results)
43+
get_number('adaptive_cfg', 'CFG Mimicking from TSNR', loaded_parameter_dict, results)
44+
get_number('clip_skip', 'CLIP Skip', loaded_parameter_dict, results, cast_type=int)
4445
get_str('base_model', 'Base Model', loaded_parameter_dict, results)
4546
get_str('refiner_model', 'Refiner Model', loaded_parameter_dict, results)
46-
get_float('refiner_switch', 'Refiner Switch', loaded_parameter_dict, results)
47+
get_number('refiner_switch', 'Refiner Switch', loaded_parameter_dict, results)
4748
get_str('sampler', 'Sampler', loaded_parameter_dict, results)
4849
get_str('scheduler', 'Scheduler', loaded_parameter_dict, results)
4950
get_str('vae', 'VAE', loaded_parameter_dict, results)
@@ -83,11 +84,11 @@ def get_list(key: str, fallback: str | None, source_dict: dict, results: list, d
8384
results.append(gr.update())
8485

8586

86-
def get_float(key: str, fallback: str | None, source_dict: dict, results: list, default=None):
87+
def get_number(key: str, fallback: str | None, source_dict: dict, results: list, default=None, cast_type=float):
8788
try:
8889
h = source_dict.get(key, source_dict.get(fallback, default))
8990
assert h is not None
90-
h = float(h)
91+
h = cast_type(h)
9192
results.append(h)
9293
except:
9394
results.append(gr.update())
@@ -314,6 +315,7 @@ def get_scheme(self) -> MetadataScheme:
314315
'adm_guidance': 'ADM Guidance',
315316
'refiner_swap_method': 'Refiner Swap Method',
316317
'adaptive_cfg': 'Adaptive CFG',
318+
'clip_skip': 'Clip skip',
317319
'overwrite_switch': 'Overwrite Switch',
318320
'freeu': 'FreeU',
319321
'base_model': 'Model',
@@ -458,7 +460,7 @@ def parse_string(self, metadata: dict) -> str:
458460
self.fooocus_to_a1111['refiner_model_hash']: self.refiner_model_hash
459461
}
460462

461-
for key in ['adaptive_cfg', 'overwrite_switch', 'refiner_swap_method', 'freeu']:
463+
for key in ['adaptive_cfg', 'clip_skip', 'overwrite_switch', 'refiner_swap_method', 'freeu']:
462464
if key in data:
463465
generation_params[self.fooocus_to_a1111[key]] = data[key]
464466

webui.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,9 @@ def update_history_link():
421421
value=modules.config.default_cfg_tsnr,
422422
info='Enabling Fooocus\'s implementation of CFG mimicking for TSNR '
423423
'(effective when real CFG > mimicked CFG).')
424+
clip_skip = gr.Slider(label='CLIP Skip', minimum=1, maximum=flags.clip_skip_max, step=1,
425+
value=modules.config.default_clip_skip,
426+
info='Bypass CLIP layers to avoid overfitting (use 1 to not skip any layers, 2 is recommended).')
424427
sampler_name = gr.Dropdown(label='Sampler', choices=flags.sampler_list,
425428
value=modules.config.default_sampler)
426429
scheduler_name = gr.Dropdown(label='Scheduler', choices=flags.scheduler_list,
@@ -585,9 +588,9 @@ def refresh_files_clicked():
585588
load_data_outputs = [advanced_checkbox, image_number, prompt, negative_prompt, style_selections,
586589
performance_selection, overwrite_step, overwrite_switch, aspect_ratios_selection,
587590
overwrite_width, overwrite_height, guidance_scale, sharpness, adm_scaler_positive,
588-
adm_scaler_negative, adm_scaler_end, refiner_swap_method, adaptive_cfg, base_model,
589-
refiner_model, refiner_switch, sampler_name, scheduler_name, vae_name, seed_random,
590-
image_seed, generate_button, load_parameter_button] + freeu_ctrls + lora_ctrls
591+
adm_scaler_negative, adm_scaler_end, refiner_swap_method, adaptive_cfg, clip_skip,
592+
base_model, refiner_model, refiner_switch, sampler_name, scheduler_name, vae_name,
593+
seed_random, image_seed, generate_button, load_parameter_button] + freeu_ctrls + lora_ctrls
591594

592595
if not args_manager.args.disable_preset_selection:
593596
def preset_selection_change(preset, is_generating):
@@ -672,7 +675,7 @@ def inpaint_mode_change(mode):
672675
ctrls += [uov_method, uov_input_image]
673676
ctrls += [outpaint_selections, inpaint_input_image, inpaint_additional_prompt, inpaint_mask_image]
674677
ctrls += [disable_preview, disable_intermediate_results, disable_seed_increment, black_out_nsfw]
675-
ctrls += [adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg]
678+
ctrls += [adm_scaler_positive, adm_scaler_negative, adm_scaler_end, adaptive_cfg, clip_skip]
676679
ctrls += [sampler_name, scheduler_name, vae_name]
677680
ctrls += [overwrite_step, overwrite_switch, overwrite_width, overwrite_height, overwrite_vary_strength]
678681
ctrls += [overwrite_upscale_strength, mixing_image_prompt_and_vary_upscale, mixing_image_prompt_and_inpaint]

0 commit comments

Comments
 (0)