mirror of
https://github.com/invoke-ai/InvokeAI
synced 2024-08-30 20:32:17 +00:00
Merge branch 'main' into webui-model-merging
This commit is contained in:
commit
2267057e2b
@ -79,8 +79,8 @@ def merge_diffusion_models_and_commit(
|
|||||||
merged_model_name = name for new model
|
merged_model_name = name for new model
|
||||||
alpha - The interpolation parameter. Ranges from 0 to 1. It affects the ratio in which the checkpoints are merged. A 0.8 alpha
|
alpha - The interpolation parameter. Ranges from 0 to 1. It affects the ratio in which the checkpoints are merged. A 0.8 alpha
|
||||||
would mean that the first model checkpoints would affect the final result far less than an alpha of 0.2
|
would mean that the first model checkpoints would affect the final result far less than an alpha of 0.2
|
||||||
interp - The interpolation method to use for the merging. Supports "sigmoid", "inv_sigmoid", "add_difference" and None.
|
interp - The interpolation method to use for the merging. Supports "weighted_average", "sigmoid", "inv_sigmoid", "add_difference" and None.
|
||||||
Passing None uses the default interpolation which is weighted sum interpolation. For merging three checkpoints, only "add_difference" is supported.
|
Passing None uses the default interpolation which is weighted sum interpolation. For merging three checkpoints, only "add_difference" is supported. Add_difference is A+(B-C).
|
||||||
force - Whether to ignore mismatch in model_config.json for the current models. Defaults to False.
|
force - Whether to ignore mismatch in model_config.json for the current models. Defaults to False.
|
||||||
|
|
||||||
**kwargs - the default DiffusionPipeline.get_config_dict kwargs:
|
**kwargs - the default DiffusionPipeline.get_config_dict kwargs:
|
||||||
@ -173,7 +173,6 @@ def _parse_args() -> Namespace:
|
|||||||
|
|
||||||
# ------------------------- GUI HERE -------------------------
|
# ------------------------- GUI HERE -------------------------
|
||||||
class FloatSlider(npyscreen.Slider):
|
class FloatSlider(npyscreen.Slider):
|
||||||
# this is supposed to adjust display precision, but doesn't
|
|
||||||
def translate_value(self):
|
def translate_value(self):
|
||||||
stri = "%3.2f / %3.2f" % (self.value, self.out_of)
|
stri = "%3.2f / %3.2f" % (self.value, self.out_of)
|
||||||
l = (len(str(self.out_of))) * 2 + 4
|
l = (len(str(self.out_of))) * 2 + 4
|
||||||
@ -186,7 +185,7 @@ class FloatTitleSlider(npyscreen.TitleText):
|
|||||||
|
|
||||||
|
|
||||||
class mergeModelsForm(npyscreen.FormMultiPageAction):
|
class mergeModelsForm(npyscreen.FormMultiPageAction):
|
||||||
interpolations = ["weighted_sum", "sigmoid", "inv_sigmoid", "add_difference"]
|
interpolations = ["weighted_sum", "sigmoid", "inv_sigmoid"]
|
||||||
|
|
||||||
def __init__(self, parentApp, name):
|
def __init__(self, parentApp, name):
|
||||||
self.parentApp = parentApp
|
self.parentApp = parentApp
|
||||||
@ -305,8 +304,8 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
|||||||
self.alpha = self.add_widget_intelligent(
|
self.alpha = self.add_widget_intelligent(
|
||||||
FloatTitleSlider,
|
FloatTitleSlider,
|
||||||
name="Weight (alpha) to assign to second and third models:",
|
name="Weight (alpha) to assign to second and third models:",
|
||||||
out_of=1,
|
out_of=1.0,
|
||||||
step=0.05,
|
step=0.01,
|
||||||
lowest=0,
|
lowest=0,
|
||||||
value=0.5,
|
value=0.5,
|
||||||
labelColor="CONTROL",
|
labelColor="CONTROL",
|
||||||
@ -323,7 +322,7 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
|||||||
self.merged_model_name.value = merged_model_name
|
self.merged_model_name.value = merged_model_name
|
||||||
|
|
||||||
if selected_model3 > 0:
|
if selected_model3 > 0:
|
||||||
self.merge_method.values = (["add_difference"],)
|
self.merge_method.values = ['add_difference ( A+(B-C) )']
|
||||||
self.merged_model_name.value += f"+{models[selected_model3]}"
|
self.merged_model_name.value += f"+{models[selected_model3]}"
|
||||||
else:
|
else:
|
||||||
self.merge_method.values = self.interpolations
|
self.merge_method.values = self.interpolations
|
||||||
@ -349,11 +348,14 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
|
|||||||
]
|
]
|
||||||
if self.model3.value[0] > 0:
|
if self.model3.value[0] > 0:
|
||||||
models.append(model_names[self.model3.value[0] - 1])
|
models.append(model_names[self.model3.value[0] - 1])
|
||||||
|
interp='add_difference'
|
||||||
|
else:
|
||||||
|
interp=self.interpolations[self.merge_method.value[0]]
|
||||||
|
|
||||||
args = dict(
|
args = dict(
|
||||||
models=models,
|
models=models,
|
||||||
alpha=self.alpha.value,
|
alpha=self.alpha.value,
|
||||||
interp=self.interpolations[self.merge_method.value[0]],
|
interp=interp,
|
||||||
force=self.force.value,
|
force=self.force.value,
|
||||||
merged_model_name=self.merged_model_name.value,
|
merged_model_name=self.merged_model_name.value,
|
||||||
)
|
)
|
||||||
@ -417,7 +419,8 @@ def run_gui(args: Namespace):
|
|||||||
mergeapp.run()
|
mergeapp.run()
|
||||||
|
|
||||||
args = mergeapp.merge_arguments
|
args = mergeapp.merge_arguments
|
||||||
merge_diffusion_models_and_commit(**args)
|
print(f'DEBUG: {args}')
|
||||||
|
#merge_diffusion_models_and_commit(**args)
|
||||||
print(f'>> Models merged into new model: "{args["merged_model_name"]}".')
|
print(f'>> Models merged into new model: "{args["merged_model_name"]}".')
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user