Merge branch 'main' into main

This commit is contained in:
Millun Atluri 2023-10-28 20:35:41 +11:00 committed by GitHub
commit 0fde82a24b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 178 additions and 4 deletions

View File

@ -0,0 +1 @@
from .model_manager_default import ModelManagerService

View File

@ -460,6 +460,12 @@ class ModelInstall(object):
possible_conf = path.with_suffix(".yaml") possible_conf = path.with_suffix(".yaml")
if possible_conf.exists(): if possible_conf.exists():
legacy_conf = str(self.relative_to_root(possible_conf)) legacy_conf = str(self.relative_to_root(possible_conf))
else:
legacy_conf = Path(
self.config.root_path,
"configs/controlnet",
("cldm_v15.yaml" if info.base_type == BaseModelType("sd-1") else "cldm_v21.yaml"),
)
if legacy_conf: if legacy_conf:
attributes.update(dict(config=str(legacy_conf))) attributes.update(dict(config=str(legacy_conf)))

View File

@ -132,13 +132,14 @@ def _convert_controlnet_ckpt_and_cache(
model_path: str, model_path: str,
output_path: str, output_path: str,
base_model: BaseModelType, base_model: BaseModelType,
model_config: ControlNetModel.CheckpointConfig, model_config: str,
) -> str: ) -> str:
""" """
Convert the controlnet from checkpoint format to diffusers format, Convert the controlnet from checkpoint format to diffusers format,
cache it to disk, and return Path to converted cache it to disk, and return Path to converted
file. If already on disk then just returns Path. file. If already on disk then just returns Path.
""" """
print(f"DEBUG: controlnet config = {model_config}")
app_config = InvokeAIAppConfig.get_config() app_config = InvokeAIAppConfig.get_config()
weights = app_config.root_path / model_path weights = app_config.root_path / model_path
output_path = Path(output_path) output_path = Path(output_path)

View File

@ -41,7 +41,7 @@ from transformers import CLIPTextModel, CLIPTokenizer
# invokeai stuff # invokeai stuff
from invokeai.app.services.config import InvokeAIAppConfig, PagingArgumentParser from invokeai.app.services.config import InvokeAIAppConfig, PagingArgumentParser
from invokeai.app.services.model_manager_service import ModelManagerService from invokeai.app.services.model_manager import ModelManagerService
from invokeai.backend.model_management.models import SubModelType from invokeai.backend.model_management.models import SubModelType
if version.parse(version.parse(PIL.__version__).base_version) >= version.parse("9.1.0"): if version.parse(version.parse(PIL.__version__).base_version) >= version.parse("9.1.0"):

View File

@ -0,0 +1,79 @@
model:
target: cldm.cldm.ControlLDM
params:
linear_start: 0.00085
linear_end: 0.0120
num_timesteps_cond: 1
log_every_t: 200
timesteps: 1000
first_stage_key: "jpg"
cond_stage_key: "txt"
control_key: "hint"
image_size: 64
channels: 4
cond_stage_trainable: false
conditioning_key: crossattn
monitor: val/loss_simple_ema
scale_factor: 0.18215
use_ema: False
only_mid_control: False
control_stage_config:
target: cldm.cldm.ControlNet
params:
image_size: 32 # unused
in_channels: 4
hint_channels: 3
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_heads: 8
use_spatial_transformer: True
transformer_depth: 1
context_dim: 768
use_checkpoint: True
legacy: False
unet_config:
target: cldm.cldm.ControlledUnetModel
params:
image_size: 32 # unused
in_channels: 4
out_channels: 4
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_heads: 8
use_spatial_transformer: True
transformer_depth: 1
context_dim: 768
use_checkpoint: True
legacy: False
first_stage_config:
target: ldm.models.autoencoder.AutoencoderKL
params:
embed_dim: 4
monitor: val/rec_loss
ddconfig:
double_z: true
z_channels: 4
resolution: 256
in_channels: 3
out_ch: 3
ch: 128
ch_mult:
- 1
- 2
- 4
- 4
num_res_blocks: 2
attn_resolutions: []
dropout: 0.0
lossconfig:
target: torch.nn.Identity
cond_stage_config:
target: ldm.modules.encoders.modules.FrozenCLIPEmbedder

View File

@ -0,0 +1,85 @@
model:
target: cldm.cldm.ControlLDM
params:
linear_start: 0.00085
linear_end: 0.0120
num_timesteps_cond: 1
log_every_t: 200
timesteps: 1000
first_stage_key: "jpg"
cond_stage_key: "txt"
control_key: "hint"
image_size: 64
channels: 4
cond_stage_trainable: false
conditioning_key: crossattn
monitor: val/loss_simple_ema
scale_factor: 0.18215
use_ema: False
only_mid_control: False
control_stage_config:
target: cldm.cldm.ControlNet
params:
use_checkpoint: True
image_size: 32 # unused
in_channels: 4
hint_channels: 3
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_head_channels: 64 # need to fix for flash-attn
use_spatial_transformer: True
use_linear_in_transformer: True
transformer_depth: 1
context_dim: 1024
legacy: False
unet_config:
target: cldm.cldm.ControlledUnetModel
params:
use_checkpoint: True
image_size: 32 # unused
in_channels: 4
out_channels: 4
model_channels: 320
attention_resolutions: [ 4, 2, 1 ]
num_res_blocks: 2
channel_mult: [ 1, 2, 4, 4 ]
num_head_channels: 64 # need to fix for flash-attn
use_spatial_transformer: True
use_linear_in_transformer: True
transformer_depth: 1
context_dim: 1024
legacy: False
first_stage_config:
target: ldm.models.autoencoder.AutoencoderKL
params:
embed_dim: 4
monitor: val/rec_loss
ddconfig:
#attn_type: "vanilla-xformers"
double_z: true
z_channels: 4
resolution: 256
in_channels: 3
out_ch: 3
ch: 128
ch_mult:
- 1
- 2
- 4
- 4
num_res_blocks: 2
attn_resolutions: []
dropout: 0.0
lossconfig:
target: torch.nn.Identity
cond_stage_config:
target: ldm.modules.encoders.modules.FrozenOpenCLIPEmbedder
params:
freeze: True
layer: "penultimate"

View File

@ -131,6 +131,7 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
values=[ values=[
"Models Built on SD-1.x", "Models Built on SD-1.x",
"Models Built on SD-2.x", "Models Built on SD-2.x",
"Models Built on SDXL",
], ],
value=[self.current_base], value=[self.current_base],
columns=4, columns=4,
@ -309,7 +310,7 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
else: else:
return True return True
def get_model_names(self, base_model: Optional[BaseModelType] = None) -> List[str]: def get_model_names(self, base_model: BaseModelType = BaseModelType.StableDiffusion1) -> List[str]:
model_names = [ model_names = [
info["model_name"] info["model_name"]
for info in self.model_manager.list_models(model_type=ModelType.Main, base_model=base_model) for info in self.model_manager.list_models(model_type=ModelType.Main, base_model=base_model)
@ -318,7 +319,8 @@ class mergeModelsForm(npyscreen.FormMultiPageAction):
return sorted(model_names) return sorted(model_names)
def _populate_models(self, value=None): def _populate_models(self, value=None):
base_model = tuple(BaseModelType)[value[0]] bases = ["sd-1", "sd-2", "sdxl"]
base_model = BaseModelType(bases[value[0]])
self.model_names = self.get_model_names(base_model) self.model_names = self.get_model_names(base_model)
models_plus_none = self.model_names.copy() models_plus_none = self.model_names.copy()