|
|
|
@ -3,13 +3,13 @@ import torch
|
|
|
|
|
import os |
|
|
|
|
|
|
|
|
|
class SDXLClipG(sd1_clip.SD1ClipModel): |
|
|
|
|
def __init__(self, device="cpu", max_length=77, freeze=True, layer="penultimate", layer_idx=None, textmodel_path=None): |
|
|
|
|
def __init__(self, device="cpu", max_length=77, freeze=True, layer="penultimate", layer_idx=None, textmodel_path=None, dtype=None): |
|
|
|
|
if layer == "penultimate": |
|
|
|
|
layer="hidden" |
|
|
|
|
layer_idx=-2 |
|
|
|
|
|
|
|
|
|
textmodel_json_config = os.path.join(os.path.dirname(os.path.realpath(__file__)), "clip_config_bigg.json") |
|
|
|
|
super().__init__(device=device, freeze=freeze, layer=layer, layer_idx=layer_idx, textmodel_json_config=textmodel_json_config, textmodel_path=textmodel_path) |
|
|
|
|
super().__init__(device=device, freeze=freeze, layer=layer, layer_idx=layer_idx, textmodel_json_config=textmodel_json_config, textmodel_path=textmodel_path, dtype=dtype) |
|
|
|
|
self.empty_tokens = [[49406] + [49407] + [0] * 75] |
|
|
|
|
self.text_projection = torch.nn.Parameter(torch.empty(1280, 1280)) |
|
|
|
|
self.logit_scale = torch.nn.Parameter(torch.tensor(4.6055)) |
|
|
|
@ -42,11 +42,11 @@ class SDXLTokenizer(sd1_clip.SD1Tokenizer):
|
|
|
|
|
return self.clip_g.untokenize(token_weight_pair) |
|
|
|
|
|
|
|
|
|
class SDXLClipModel(torch.nn.Module): |
|
|
|
|
def __init__(self, device="cpu"): |
|
|
|
|
def __init__(self, device="cpu", dtype=None): |
|
|
|
|
super().__init__() |
|
|
|
|
self.clip_l = sd1_clip.SD1ClipModel(layer="hidden", layer_idx=11, device=device) |
|
|
|
|
self.clip_l = sd1_clip.SD1ClipModel(layer="hidden", layer_idx=11, device=device, dtype=dtype) |
|
|
|
|
self.clip_l.layer_norm_hidden_state = False |
|
|
|
|
self.clip_g = SDXLClipG(device=device) |
|
|
|
|
self.clip_g = SDXLClipG(device=device, dtype=dtype) |
|
|
|
|
|
|
|
|
|
def clip_layer(self, layer_idx): |
|
|
|
|
self.clip_l.clip_layer(layer_idx) |
|
|
|
@ -70,9 +70,9 @@ class SDXLClipModel(torch.nn.Module):
|
|
|
|
|
return self.clip_l.load_sd(sd) |
|
|
|
|
|
|
|
|
|
class SDXLRefinerClipModel(torch.nn.Module): |
|
|
|
|
def __init__(self, device="cpu"): |
|
|
|
|
def __init__(self, device="cpu", dtype=None): |
|
|
|
|
super().__init__() |
|
|
|
|
self.clip_g = SDXLClipG(device=device) |
|
|
|
|
self.clip_g = SDXLClipG(device=device, dtype=dtype) |
|
|
|
|
|
|
|
|
|
def clip_layer(self, layer_idx): |
|
|
|
|
self.clip_g.clip_layer(layer_idx) |
|
|
|
|