From b3a96523f3bcb5c44c80dbc1843cabfa20ddbab4 Mon Sep 17 00:00:00 2001 From: Haoming Date: Mon, 28 Jul 2025 11:02:52 +0800 Subject: [PATCH] interrogate --- modules/api/api.py | 24 +- modules/api/models.py | 7 - modules/cmd_args.py | 2 - modules/deepbooru.py | 109 ------ modules/deepbooru_model.py | 678 ------------------------------------- modules/devices.py | 1 - modules/interrogate.py | 219 ------------ modules/launch_utils.py | 6 +- modules/paths.py | 2 +- modules/shared.py | 4 +- modules/shared_init.py | 3 - modules/shared_options.py | 17 +- modules/ui.py | 61 +--- modules/ui_toprow.py | 7 - scripts/loopback.py | 14 +- style.css | 10 +- 16 files changed, 13 insertions(+), 1151 deletions(-) delete mode 100644 modules/deepbooru.py delete mode 100644 modules/deepbooru_model.py delete mode 100644 modules/interrogate.py diff --git a/modules/api/api.py b/modules/api/api.py index 9754be03..a9aba03a 100644 --- a/modules/api/api.py +++ b/modules/api/api.py @@ -17,7 +17,7 @@ from fastapi.encoders import jsonable_encoder from secrets import compare_digest import modules.shared as shared -from modules import sd_samplers, deepbooru, images, scripts, ui, postprocessing, errors, restart, shared_items, script_callbacks, infotext_utils, sd_models, sd_schedulers +from modules import sd_samplers, images, scripts, ui, postprocessing, errors, restart, shared_items, script_callbacks, infotext_utils, sd_models, sd_schedulers from modules.api import models from modules.shared import opts from modules.processing import StableDiffusionProcessingTxt2Img, StableDiffusionProcessingImg2Img, process_images, process_extra_images @@ -214,7 +214,6 @@ class Api: self.add_api_route("/sdapi/v1/extra-batch-images", self.extras_batch_images_api, methods=["POST"], response_model=models.ExtrasBatchImagesResponse) self.add_api_route("/sdapi/v1/png-info", self.pnginfoapi, methods=["POST"], response_model=models.PNGInfoResponse) self.add_api_route("/sdapi/v1/progress", self.progressapi, methods=["GET"], response_model=models.ProgressResponse) - self.add_api_route("/sdapi/v1/interrogate", self.interrogateapi, methods=["POST"]) self.add_api_route("/sdapi/v1/interrupt", self.interruptapi, methods=["POST"]) self.add_api_route("/sdapi/v1/skip", self.skip, methods=["POST"]) self.add_api_route("/sdapi/v1/options", self.get_config, methods=["GET"], response_model=models.OptionsModel) @@ -379,7 +378,7 @@ class Api: def get_base_type(annotation): origin = get_origin(annotation) - + if origin is Union: # represents Optional args = get_args(annotation) # filter out NoneType non_none_args = [arg for arg in args if arg is not type(None)] @@ -642,25 +641,6 @@ class Api: return models.ProgressResponse(progress=progress, eta_relative=eta_relative, state=shared.state.dict(), current_image=current_image, textinfo=shared.state.textinfo, current_task=current_task) - def interrogateapi(self, interrogatereq: models.InterrogateRequest): - image_b64 = interrogatereq.image - if image_b64 is None: - raise HTTPException(status_code=404, detail="Image not found") - - img = decode_base64_to_image(image_b64) - img = img.convert('RGB') - - # Override object param - with self.queue_lock: - if interrogatereq.model == "clip": - processed = shared.interrogator.interrogate(img) - elif interrogatereq.model == "deepdanbooru": - processed = deepbooru.model.tag(img) - else: - raise HTTPException(status_code=404, detail="Model not found") - - return models.InterrogateResponse(caption=processed) - def interruptapi(self): shared.state.interrupt() diff --git a/modules/api/models.py b/modules/api/models.py index 9b6a8fe6..816f8acb 100644 --- a/modules/api/models.py +++ b/modules/api/models.py @@ -191,13 +191,6 @@ class ProgressResponse(BaseModel): current_image: str | None = Field(default=None, title="Current image", description="The current image in base64 format. opts.show_progress_every_n_steps is required for this to work.") textinfo: str | None = Field(default=None, title="Info text", description="Info text used by WebUI.") -class InterrogateRequest(BaseModel): - image: str = Field(default="", title="Image", description="Image to work on, must be a Base64 string containing the image's data.") - model: str = Field(default="clip", title="Model", description="The interrogate model used.") - -class InterrogateResponse(BaseModel): - caption: str | None = Field(default=None, title="Caption", description="The generated caption for the image.") - class TrainResponse(BaseModel): info: str = Field(title="Train info", description="Response string from train embedding or hypernetwork task.") diff --git a/modules/cmd_args.py b/modules/cmd_args.py index 54d94e60..a8fc29d6 100644 --- a/modules/cmd_args.py +++ b/modules/cmd_args.py @@ -57,11 +57,9 @@ parser.add_argument("--esrgan-models-path", type=normalized_filepath, help="Path parser.add_argument("--bsrgan-models-path", type=normalized_filepath, help="Path to directory with BSRGAN model file(s).", default=os.path.join(models_path, 'BSRGAN')) parser.add_argument("--realesrgan-models-path", type=normalized_filepath, help="Path to directory with RealESRGAN model file(s).", default=os.path.join(models_path, 'RealESRGAN')) parser.add_argument("--dat-models-path", type=normalized_filepath, help="Path to directory with DAT model file(s).", default=os.path.join(models_path, 'DAT')) -parser.add_argument("--clip-models-path", type=normalized_filepath, help="Path to directory with CLIP model file(s), for Interrogate options.", default=None) parser.add_argument("--xformers", action='store_true', help="enable xformers for cross attention layers") parser.add_argument("--force-enable-xformers", action='store_true', help="enable xformers for cross attention layers regardless of whether the checking code thinks you can run it; do not make bug reports if this fails to work") parser.add_argument("--xformers-flash-attention", action='store_true', help="enable xformers with Flash Attention to improve reproducibility (supported for SD2.x or variant only)") -parser.add_argument("--deepdanbooru", action='store_true', help="does not do anything") parser.add_argument("--opt-split-attention", action='store_true', help="prefer Doggettx's cross-attention layer optimization for automatic choice of optimization") parser.add_argument("--opt-sub-quad-attention", action='store_true', help="prefer memory efficient sub-quadratic cross-attention layer optimization for automatic choice of optimization") parser.add_argument("--sub-quad-q-chunk-size", type=int, help="query chunk size for the sub-quadratic cross-attention layer optimization to use", default=1024) diff --git a/modules/deepbooru.py b/modules/deepbooru.py deleted file mode 100644 index 3d8a94a9..00000000 --- a/modules/deepbooru.py +++ /dev/null @@ -1,109 +0,0 @@ -import os -import re - -import torch -import numpy as np - -from modules import modelloader, paths, deepbooru_model, images, shared -from backend import memory_management -from backend.patcher.base import ModelPatcher - - -re_special = re.compile(r'([\\()])') - - -class DeepDanbooru: - def __init__(self): - self.model = None - self.load_device = memory_management.text_encoder_device() - self.offload_device = memory_management.text_encoder_offload_device() - self.dtype = torch.float32 - - if memory_management.should_use_fp16(device=self.load_device): - self.dtype = torch.float16 - - self.patcher = None - - def load(self): - if self.model is not None: - return - - files = modelloader.load_models( - model_path=os.path.join(paths.models_path, "torch_deepdanbooru"), - model_url='https://github.com/AUTOMATIC1111/TorchDeepDanbooru/releases/download/v1/model-resnet_custom_v3.pt', - ext_filter=[".pt"], - download_name='model-resnet_custom_v3.pt', - ) - - self.model = deepbooru_model.DeepDanbooruModel() - self.model.load_state_dict(torch.load(files[0], map_location="cpu")) - - self.model.eval() - self.model.to(self.offload_device, self.dtype) - - self.patcher = ModelPatcher(self.model, load_device=self.load_device, offload_device=self.offload_device) - - def start(self): - self.load() - memory_management.load_models_gpu([self.patcher]) - - def stop(self): - pass - - def tag(self, pil_image): - self.start() - res = self.tag_multi(pil_image) - self.stop() - - return res - - def tag_multi(self, pil_image, force_disable_ranks=False): - threshold = shared.opts.interrogate_deepbooru_score_threshold - use_spaces = shared.opts.deepbooru_use_spaces - use_escape = shared.opts.deepbooru_escape - alpha_sort = shared.opts.deepbooru_sort_alpha - include_ranks = shared.opts.interrogate_return_ranks and not force_disable_ranks - - pic = images.resize_image(2, pil_image.convert("RGB"), 512, 512) - a = np.expand_dims(np.array(pic, dtype=np.float32), 0) / 255 - - with torch.no_grad(): - x = torch.from_numpy(a).to(self.load_device, self.dtype) - y = self.model(x)[0].detach().cpu().numpy() - - probability_dict = {} - - for tag, probability in zip(self.model.tags, y): - if probability < threshold: - continue - - if tag.startswith("rating:"): - continue - - probability_dict[tag] = probability - - if alpha_sort: - tags = sorted(probability_dict) - else: - tags = [tag for tag, _ in sorted(probability_dict.items(), key=lambda x: -x[1])] - - res = [] - - filtertags = {x.strip().replace(' ', '_') for x in shared.opts.deepbooru_filter_tags.split(",")} - - for tag in [x for x in tags if x not in filtertags]: - probability = probability_dict[tag] - tag_outformat = tag - if use_spaces: - tag_outformat = tag_outformat.replace('_', ' ') - if use_escape: - tag_outformat = re.sub(re_special, r'\\\1', tag_outformat) - if include_ranks: - tag_outformat = f"({tag_outformat}:{probability:.3f})" - - res.append(tag_outformat) - - return ", ".join(res) - - -model = DeepDanbooru() diff --git a/modules/deepbooru_model.py b/modules/deepbooru_model.py deleted file mode 100644 index 83d2ff09..00000000 --- a/modules/deepbooru_model.py +++ /dev/null @@ -1,678 +0,0 @@ -import torch -import torch.nn as nn -import torch.nn.functional as F - -from modules import devices - -# see https://github.com/AUTOMATIC1111/TorchDeepDanbooru for more - - -class DeepDanbooruModel(nn.Module): - def __init__(self): - super(DeepDanbooruModel, self).__init__() - - self.tags = [] - - self.n_Conv_0 = nn.Conv2d(kernel_size=(7, 7), in_channels=3, out_channels=64, stride=(2, 2)) - self.n_MaxPool_0 = nn.MaxPool2d(kernel_size=(3, 3), stride=(2, 2)) - self.n_Conv_1 = nn.Conv2d(kernel_size=(1, 1), in_channels=64, out_channels=256) - self.n_Conv_2 = nn.Conv2d(kernel_size=(1, 1), in_channels=64, out_channels=64) - self.n_Conv_3 = nn.Conv2d(kernel_size=(3, 3), in_channels=64, out_channels=64) - self.n_Conv_4 = nn.Conv2d(kernel_size=(1, 1), in_channels=64, out_channels=256) - self.n_Conv_5 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=64) - self.n_Conv_6 = nn.Conv2d(kernel_size=(3, 3), in_channels=64, out_channels=64) - self.n_Conv_7 = nn.Conv2d(kernel_size=(1, 1), in_channels=64, out_channels=256) - self.n_Conv_8 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=64) - self.n_Conv_9 = nn.Conv2d(kernel_size=(3, 3), in_channels=64, out_channels=64) - self.n_Conv_10 = nn.Conv2d(kernel_size=(1, 1), in_channels=64, out_channels=256) - self.n_Conv_11 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=512, stride=(2, 2)) - self.n_Conv_12 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=128) - self.n_Conv_13 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128, stride=(2, 2)) - self.n_Conv_14 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_15 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_16 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_17 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_18 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_19 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_20 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_21 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_22 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_23 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_24 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_25 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_26 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_27 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_28 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_29 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_30 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_31 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_32 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_33 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=128) - self.n_Conv_34 = nn.Conv2d(kernel_size=(3, 3), in_channels=128, out_channels=128) - self.n_Conv_35 = nn.Conv2d(kernel_size=(1, 1), in_channels=128, out_channels=512) - self.n_Conv_36 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=1024, stride=(2, 2)) - self.n_Conv_37 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=256) - self.n_Conv_38 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256, stride=(2, 2)) - self.n_Conv_39 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_40 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_41 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_42 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_43 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_44 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_45 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_46 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_47 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_48 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_49 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_50 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_51 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_52 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_53 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_54 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_55 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_56 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_57 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_58 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_59 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_60 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_61 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_62 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_63 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_64 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_65 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_66 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_67 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_68 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_69 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_70 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_71 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_72 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_73 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_74 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_75 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_76 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_77 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_78 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_79 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_80 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_81 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_82 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_83 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_84 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_85 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_86 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_87 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_88 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_89 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_90 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_91 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_92 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_93 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_94 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_95 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_96 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_97 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_98 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256, stride=(2, 2)) - self.n_Conv_99 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_100 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=1024, stride=(2, 2)) - self.n_Conv_101 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_102 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_103 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_104 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_105 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_106 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_107 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_108 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_109 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_110 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_111 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_112 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_113 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_114 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_115 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_116 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_117 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_118 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_119 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_120 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_121 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_122 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_123 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_124 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_125 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_126 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_127 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_128 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_129 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_130 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_131 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_132 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_133 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_134 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_135 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_136 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_137 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_138 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_139 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_140 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_141 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_142 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_143 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_144 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_145 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_146 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_147 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_148 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_149 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_150 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_151 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_152 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_153 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_154 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_155 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=256) - self.n_Conv_156 = nn.Conv2d(kernel_size=(3, 3), in_channels=256, out_channels=256) - self.n_Conv_157 = nn.Conv2d(kernel_size=(1, 1), in_channels=256, out_channels=1024) - self.n_Conv_158 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=2048, stride=(2, 2)) - self.n_Conv_159 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=512) - self.n_Conv_160 = nn.Conv2d(kernel_size=(3, 3), in_channels=512, out_channels=512, stride=(2, 2)) - self.n_Conv_161 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=2048) - self.n_Conv_162 = nn.Conv2d(kernel_size=(1, 1), in_channels=2048, out_channels=512) - self.n_Conv_163 = nn.Conv2d(kernel_size=(3, 3), in_channels=512, out_channels=512) - self.n_Conv_164 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=2048) - self.n_Conv_165 = nn.Conv2d(kernel_size=(1, 1), in_channels=2048, out_channels=512) - self.n_Conv_166 = nn.Conv2d(kernel_size=(3, 3), in_channels=512, out_channels=512) - self.n_Conv_167 = nn.Conv2d(kernel_size=(1, 1), in_channels=512, out_channels=2048) - self.n_Conv_168 = nn.Conv2d(kernel_size=(1, 1), in_channels=2048, out_channels=4096, stride=(2, 2)) - self.n_Conv_169 = nn.Conv2d(kernel_size=(1, 1), in_channels=2048, out_channels=1024) - self.n_Conv_170 = nn.Conv2d(kernel_size=(3, 3), in_channels=1024, out_channels=1024, stride=(2, 2)) - self.n_Conv_171 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=4096) - self.n_Conv_172 = nn.Conv2d(kernel_size=(1, 1), in_channels=4096, out_channels=1024) - self.n_Conv_173 = nn.Conv2d(kernel_size=(3, 3), in_channels=1024, out_channels=1024) - self.n_Conv_174 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=4096) - self.n_Conv_175 = nn.Conv2d(kernel_size=(1, 1), in_channels=4096, out_channels=1024) - self.n_Conv_176 = nn.Conv2d(kernel_size=(3, 3), in_channels=1024, out_channels=1024) - self.n_Conv_177 = nn.Conv2d(kernel_size=(1, 1), in_channels=1024, out_channels=4096) - self.n_Conv_178 = nn.Conv2d(kernel_size=(1, 1), in_channels=4096, out_channels=9176, bias=False) - - def forward(self, *inputs): - t_358, = inputs - t_359 = t_358.permute(*[0, 3, 1, 2]) - t_359_padded = F.pad(t_359, [2, 3, 2, 3], value=0) - t_360 = self.n_Conv_0(t_359_padded.to(self.n_Conv_0.bias.dtype) if devices.unet_needs_upcast else t_359_padded) - t_361 = F.relu(t_360) - t_361 = F.pad(t_361, [0, 1, 0, 1], value=float('-inf')) - t_362 = self.n_MaxPool_0(t_361) - t_363 = self.n_Conv_1(t_362) - t_364 = self.n_Conv_2(t_362) - t_365 = F.relu(t_364) - t_365_padded = F.pad(t_365, [1, 1, 1, 1], value=0) - t_366 = self.n_Conv_3(t_365_padded) - t_367 = F.relu(t_366) - t_368 = self.n_Conv_4(t_367) - t_369 = torch.add(t_368, t_363) - t_370 = F.relu(t_369) - t_371 = self.n_Conv_5(t_370) - t_372 = F.relu(t_371) - t_372_padded = F.pad(t_372, [1, 1, 1, 1], value=0) - t_373 = self.n_Conv_6(t_372_padded) - t_374 = F.relu(t_373) - t_375 = self.n_Conv_7(t_374) - t_376 = torch.add(t_375, t_370) - t_377 = F.relu(t_376) - t_378 = self.n_Conv_8(t_377) - t_379 = F.relu(t_378) - t_379_padded = F.pad(t_379, [1, 1, 1, 1], value=0) - t_380 = self.n_Conv_9(t_379_padded) - t_381 = F.relu(t_380) - t_382 = self.n_Conv_10(t_381) - t_383 = torch.add(t_382, t_377) - t_384 = F.relu(t_383) - t_385 = self.n_Conv_11(t_384) - t_386 = self.n_Conv_12(t_384) - t_387 = F.relu(t_386) - t_387_padded = F.pad(t_387, [0, 1, 0, 1], value=0) - t_388 = self.n_Conv_13(t_387_padded) - t_389 = F.relu(t_388) - t_390 = self.n_Conv_14(t_389) - t_391 = torch.add(t_390, t_385) - t_392 = F.relu(t_391) - t_393 = self.n_Conv_15(t_392) - t_394 = F.relu(t_393) - t_394_padded = F.pad(t_394, [1, 1, 1, 1], value=0) - t_395 = self.n_Conv_16(t_394_padded) - t_396 = F.relu(t_395) - t_397 = self.n_Conv_17(t_396) - t_398 = torch.add(t_397, t_392) - t_399 = F.relu(t_398) - t_400 = self.n_Conv_18(t_399) - t_401 = F.relu(t_400) - t_401_padded = F.pad(t_401, [1, 1, 1, 1], value=0) - t_402 = self.n_Conv_19(t_401_padded) - t_403 = F.relu(t_402) - t_404 = self.n_Conv_20(t_403) - t_405 = torch.add(t_404, t_399) - t_406 = F.relu(t_405) - t_407 = self.n_Conv_21(t_406) - t_408 = F.relu(t_407) - t_408_padded = F.pad(t_408, [1, 1, 1, 1], value=0) - t_409 = self.n_Conv_22(t_408_padded) - t_410 = F.relu(t_409) - t_411 = self.n_Conv_23(t_410) - t_412 = torch.add(t_411, t_406) - t_413 = F.relu(t_412) - t_414 = self.n_Conv_24(t_413) - t_415 = F.relu(t_414) - t_415_padded = F.pad(t_415, [1, 1, 1, 1], value=0) - t_416 = self.n_Conv_25(t_415_padded) - t_417 = F.relu(t_416) - t_418 = self.n_Conv_26(t_417) - t_419 = torch.add(t_418, t_413) - t_420 = F.relu(t_419) - t_421 = self.n_Conv_27(t_420) - t_422 = F.relu(t_421) - t_422_padded = F.pad(t_422, [1, 1, 1, 1], value=0) - t_423 = self.n_Conv_28(t_422_padded) - t_424 = F.relu(t_423) - t_425 = self.n_Conv_29(t_424) - t_426 = torch.add(t_425, t_420) - t_427 = F.relu(t_426) - t_428 = self.n_Conv_30(t_427) - t_429 = F.relu(t_428) - t_429_padded = F.pad(t_429, [1, 1, 1, 1], value=0) - t_430 = self.n_Conv_31(t_429_padded) - t_431 = F.relu(t_430) - t_432 = self.n_Conv_32(t_431) - t_433 = torch.add(t_432, t_427) - t_434 = F.relu(t_433) - t_435 = self.n_Conv_33(t_434) - t_436 = F.relu(t_435) - t_436_padded = F.pad(t_436, [1, 1, 1, 1], value=0) - t_437 = self.n_Conv_34(t_436_padded) - t_438 = F.relu(t_437) - t_439 = self.n_Conv_35(t_438) - t_440 = torch.add(t_439, t_434) - t_441 = F.relu(t_440) - t_442 = self.n_Conv_36(t_441) - t_443 = self.n_Conv_37(t_441) - t_444 = F.relu(t_443) - t_444_padded = F.pad(t_444, [0, 1, 0, 1], value=0) - t_445 = self.n_Conv_38(t_444_padded) - t_446 = F.relu(t_445) - t_447 = self.n_Conv_39(t_446) - t_448 = torch.add(t_447, t_442) - t_449 = F.relu(t_448) - t_450 = self.n_Conv_40(t_449) - t_451 = F.relu(t_450) - t_451_padded = F.pad(t_451, [1, 1, 1, 1], value=0) - t_452 = self.n_Conv_41(t_451_padded) - t_453 = F.relu(t_452) - t_454 = self.n_Conv_42(t_453) - t_455 = torch.add(t_454, t_449) - t_456 = F.relu(t_455) - t_457 = self.n_Conv_43(t_456) - t_458 = F.relu(t_457) - t_458_padded = F.pad(t_458, [1, 1, 1, 1], value=0) - t_459 = self.n_Conv_44(t_458_padded) - t_460 = F.relu(t_459) - t_461 = self.n_Conv_45(t_460) - t_462 = torch.add(t_461, t_456) - t_463 = F.relu(t_462) - t_464 = self.n_Conv_46(t_463) - t_465 = F.relu(t_464) - t_465_padded = F.pad(t_465, [1, 1, 1, 1], value=0) - t_466 = self.n_Conv_47(t_465_padded) - t_467 = F.relu(t_466) - t_468 = self.n_Conv_48(t_467) - t_469 = torch.add(t_468, t_463) - t_470 = F.relu(t_469) - t_471 = self.n_Conv_49(t_470) - t_472 = F.relu(t_471) - t_472_padded = F.pad(t_472, [1, 1, 1, 1], value=0) - t_473 = self.n_Conv_50(t_472_padded) - t_474 = F.relu(t_473) - t_475 = self.n_Conv_51(t_474) - t_476 = torch.add(t_475, t_470) - t_477 = F.relu(t_476) - t_478 = self.n_Conv_52(t_477) - t_479 = F.relu(t_478) - t_479_padded = F.pad(t_479, [1, 1, 1, 1], value=0) - t_480 = self.n_Conv_53(t_479_padded) - t_481 = F.relu(t_480) - t_482 = self.n_Conv_54(t_481) - t_483 = torch.add(t_482, t_477) - t_484 = F.relu(t_483) - t_485 = self.n_Conv_55(t_484) - t_486 = F.relu(t_485) - t_486_padded = F.pad(t_486, [1, 1, 1, 1], value=0) - t_487 = self.n_Conv_56(t_486_padded) - t_488 = F.relu(t_487) - t_489 = self.n_Conv_57(t_488) - t_490 = torch.add(t_489, t_484) - t_491 = F.relu(t_490) - t_492 = self.n_Conv_58(t_491) - t_493 = F.relu(t_492) - t_493_padded = F.pad(t_493, [1, 1, 1, 1], value=0) - t_494 = self.n_Conv_59(t_493_padded) - t_495 = F.relu(t_494) - t_496 = self.n_Conv_60(t_495) - t_497 = torch.add(t_496, t_491) - t_498 = F.relu(t_497) - t_499 = self.n_Conv_61(t_498) - t_500 = F.relu(t_499) - t_500_padded = F.pad(t_500, [1, 1, 1, 1], value=0) - t_501 = self.n_Conv_62(t_500_padded) - t_502 = F.relu(t_501) - t_503 = self.n_Conv_63(t_502) - t_504 = torch.add(t_503, t_498) - t_505 = F.relu(t_504) - t_506 = self.n_Conv_64(t_505) - t_507 = F.relu(t_506) - t_507_padded = F.pad(t_507, [1, 1, 1, 1], value=0) - t_508 = self.n_Conv_65(t_507_padded) - t_509 = F.relu(t_508) - t_510 = self.n_Conv_66(t_509) - t_511 = torch.add(t_510, t_505) - t_512 = F.relu(t_511) - t_513 = self.n_Conv_67(t_512) - t_514 = F.relu(t_513) - t_514_padded = F.pad(t_514, [1, 1, 1, 1], value=0) - t_515 = self.n_Conv_68(t_514_padded) - t_516 = F.relu(t_515) - t_517 = self.n_Conv_69(t_516) - t_518 = torch.add(t_517, t_512) - t_519 = F.relu(t_518) - t_520 = self.n_Conv_70(t_519) - t_521 = F.relu(t_520) - t_521_padded = F.pad(t_521, [1, 1, 1, 1], value=0) - t_522 = self.n_Conv_71(t_521_padded) - t_523 = F.relu(t_522) - t_524 = self.n_Conv_72(t_523) - t_525 = torch.add(t_524, t_519) - t_526 = F.relu(t_525) - t_527 = self.n_Conv_73(t_526) - t_528 = F.relu(t_527) - t_528_padded = F.pad(t_528, [1, 1, 1, 1], value=0) - t_529 = self.n_Conv_74(t_528_padded) - t_530 = F.relu(t_529) - t_531 = self.n_Conv_75(t_530) - t_532 = torch.add(t_531, t_526) - t_533 = F.relu(t_532) - t_534 = self.n_Conv_76(t_533) - t_535 = F.relu(t_534) - t_535_padded = F.pad(t_535, [1, 1, 1, 1], value=0) - t_536 = self.n_Conv_77(t_535_padded) - t_537 = F.relu(t_536) - t_538 = self.n_Conv_78(t_537) - t_539 = torch.add(t_538, t_533) - t_540 = F.relu(t_539) - t_541 = self.n_Conv_79(t_540) - t_542 = F.relu(t_541) - t_542_padded = F.pad(t_542, [1, 1, 1, 1], value=0) - t_543 = self.n_Conv_80(t_542_padded) - t_544 = F.relu(t_543) - t_545 = self.n_Conv_81(t_544) - t_546 = torch.add(t_545, t_540) - t_547 = F.relu(t_546) - t_548 = self.n_Conv_82(t_547) - t_549 = F.relu(t_548) - t_549_padded = F.pad(t_549, [1, 1, 1, 1], value=0) - t_550 = self.n_Conv_83(t_549_padded) - t_551 = F.relu(t_550) - t_552 = self.n_Conv_84(t_551) - t_553 = torch.add(t_552, t_547) - t_554 = F.relu(t_553) - t_555 = self.n_Conv_85(t_554) - t_556 = F.relu(t_555) - t_556_padded = F.pad(t_556, [1, 1, 1, 1], value=0) - t_557 = self.n_Conv_86(t_556_padded) - t_558 = F.relu(t_557) - t_559 = self.n_Conv_87(t_558) - t_560 = torch.add(t_559, t_554) - t_561 = F.relu(t_560) - t_562 = self.n_Conv_88(t_561) - t_563 = F.relu(t_562) - t_563_padded = F.pad(t_563, [1, 1, 1, 1], value=0) - t_564 = self.n_Conv_89(t_563_padded) - t_565 = F.relu(t_564) - t_566 = self.n_Conv_90(t_565) - t_567 = torch.add(t_566, t_561) - t_568 = F.relu(t_567) - t_569 = self.n_Conv_91(t_568) - t_570 = F.relu(t_569) - t_570_padded = F.pad(t_570, [1, 1, 1, 1], value=0) - t_571 = self.n_Conv_92(t_570_padded) - t_572 = F.relu(t_571) - t_573 = self.n_Conv_93(t_572) - t_574 = torch.add(t_573, t_568) - t_575 = F.relu(t_574) - t_576 = self.n_Conv_94(t_575) - t_577 = F.relu(t_576) - t_577_padded = F.pad(t_577, [1, 1, 1, 1], value=0) - t_578 = self.n_Conv_95(t_577_padded) - t_579 = F.relu(t_578) - t_580 = self.n_Conv_96(t_579) - t_581 = torch.add(t_580, t_575) - t_582 = F.relu(t_581) - t_583 = self.n_Conv_97(t_582) - t_584 = F.relu(t_583) - t_584_padded = F.pad(t_584, [0, 1, 0, 1], value=0) - t_585 = self.n_Conv_98(t_584_padded) - t_586 = F.relu(t_585) - t_587 = self.n_Conv_99(t_586) - t_588 = self.n_Conv_100(t_582) - t_589 = torch.add(t_587, t_588) - t_590 = F.relu(t_589) - t_591 = self.n_Conv_101(t_590) - t_592 = F.relu(t_591) - t_592_padded = F.pad(t_592, [1, 1, 1, 1], value=0) - t_593 = self.n_Conv_102(t_592_padded) - t_594 = F.relu(t_593) - t_595 = self.n_Conv_103(t_594) - t_596 = torch.add(t_595, t_590) - t_597 = F.relu(t_596) - t_598 = self.n_Conv_104(t_597) - t_599 = F.relu(t_598) - t_599_padded = F.pad(t_599, [1, 1, 1, 1], value=0) - t_600 = self.n_Conv_105(t_599_padded) - t_601 = F.relu(t_600) - t_602 = self.n_Conv_106(t_601) - t_603 = torch.add(t_602, t_597) - t_604 = F.relu(t_603) - t_605 = self.n_Conv_107(t_604) - t_606 = F.relu(t_605) - t_606_padded = F.pad(t_606, [1, 1, 1, 1], value=0) - t_607 = self.n_Conv_108(t_606_padded) - t_608 = F.relu(t_607) - t_609 = self.n_Conv_109(t_608) - t_610 = torch.add(t_609, t_604) - t_611 = F.relu(t_610) - t_612 = self.n_Conv_110(t_611) - t_613 = F.relu(t_612) - t_613_padded = F.pad(t_613, [1, 1, 1, 1], value=0) - t_614 = self.n_Conv_111(t_613_padded) - t_615 = F.relu(t_614) - t_616 = self.n_Conv_112(t_615) - t_617 = torch.add(t_616, t_611) - t_618 = F.relu(t_617) - t_619 = self.n_Conv_113(t_618) - t_620 = F.relu(t_619) - t_620_padded = F.pad(t_620, [1, 1, 1, 1], value=0) - t_621 = self.n_Conv_114(t_620_padded) - t_622 = F.relu(t_621) - t_623 = self.n_Conv_115(t_622) - t_624 = torch.add(t_623, t_618) - t_625 = F.relu(t_624) - t_626 = self.n_Conv_116(t_625) - t_627 = F.relu(t_626) - t_627_padded = F.pad(t_627, [1, 1, 1, 1], value=0) - t_628 = self.n_Conv_117(t_627_padded) - t_629 = F.relu(t_628) - t_630 = self.n_Conv_118(t_629) - t_631 = torch.add(t_630, t_625) - t_632 = F.relu(t_631) - t_633 = self.n_Conv_119(t_632) - t_634 = F.relu(t_633) - t_634_padded = F.pad(t_634, [1, 1, 1, 1], value=0) - t_635 = self.n_Conv_120(t_634_padded) - t_636 = F.relu(t_635) - t_637 = self.n_Conv_121(t_636) - t_638 = torch.add(t_637, t_632) - t_639 = F.relu(t_638) - t_640 = self.n_Conv_122(t_639) - t_641 = F.relu(t_640) - t_641_padded = F.pad(t_641, [1, 1, 1, 1], value=0) - t_642 = self.n_Conv_123(t_641_padded) - t_643 = F.relu(t_642) - t_644 = self.n_Conv_124(t_643) - t_645 = torch.add(t_644, t_639) - t_646 = F.relu(t_645) - t_647 = self.n_Conv_125(t_646) - t_648 = F.relu(t_647) - t_648_padded = F.pad(t_648, [1, 1, 1, 1], value=0) - t_649 = self.n_Conv_126(t_648_padded) - t_650 = F.relu(t_649) - t_651 = self.n_Conv_127(t_650) - t_652 = torch.add(t_651, t_646) - t_653 = F.relu(t_652) - t_654 = self.n_Conv_128(t_653) - t_655 = F.relu(t_654) - t_655_padded = F.pad(t_655, [1, 1, 1, 1], value=0) - t_656 = self.n_Conv_129(t_655_padded) - t_657 = F.relu(t_656) - t_658 = self.n_Conv_130(t_657) - t_659 = torch.add(t_658, t_653) - t_660 = F.relu(t_659) - t_661 = self.n_Conv_131(t_660) - t_662 = F.relu(t_661) - t_662_padded = F.pad(t_662, [1, 1, 1, 1], value=0) - t_663 = self.n_Conv_132(t_662_padded) - t_664 = F.relu(t_663) - t_665 = self.n_Conv_133(t_664) - t_666 = torch.add(t_665, t_660) - t_667 = F.relu(t_666) - t_668 = self.n_Conv_134(t_667) - t_669 = F.relu(t_668) - t_669_padded = F.pad(t_669, [1, 1, 1, 1], value=0) - t_670 = self.n_Conv_135(t_669_padded) - t_671 = F.relu(t_670) - t_672 = self.n_Conv_136(t_671) - t_673 = torch.add(t_672, t_667) - t_674 = F.relu(t_673) - t_675 = self.n_Conv_137(t_674) - t_676 = F.relu(t_675) - t_676_padded = F.pad(t_676, [1, 1, 1, 1], value=0) - t_677 = self.n_Conv_138(t_676_padded) - t_678 = F.relu(t_677) - t_679 = self.n_Conv_139(t_678) - t_680 = torch.add(t_679, t_674) - t_681 = F.relu(t_680) - t_682 = self.n_Conv_140(t_681) - t_683 = F.relu(t_682) - t_683_padded = F.pad(t_683, [1, 1, 1, 1], value=0) - t_684 = self.n_Conv_141(t_683_padded) - t_685 = F.relu(t_684) - t_686 = self.n_Conv_142(t_685) - t_687 = torch.add(t_686, t_681) - t_688 = F.relu(t_687) - t_689 = self.n_Conv_143(t_688) - t_690 = F.relu(t_689) - t_690_padded = F.pad(t_690, [1, 1, 1, 1], value=0) - t_691 = self.n_Conv_144(t_690_padded) - t_692 = F.relu(t_691) - t_693 = self.n_Conv_145(t_692) - t_694 = torch.add(t_693, t_688) - t_695 = F.relu(t_694) - t_696 = self.n_Conv_146(t_695) - t_697 = F.relu(t_696) - t_697_padded = F.pad(t_697, [1, 1, 1, 1], value=0) - t_698 = self.n_Conv_147(t_697_padded) - t_699 = F.relu(t_698) - t_700 = self.n_Conv_148(t_699) - t_701 = torch.add(t_700, t_695) - t_702 = F.relu(t_701) - t_703 = self.n_Conv_149(t_702) - t_704 = F.relu(t_703) - t_704_padded = F.pad(t_704, [1, 1, 1, 1], value=0) - t_705 = self.n_Conv_150(t_704_padded) - t_706 = F.relu(t_705) - t_707 = self.n_Conv_151(t_706) - t_708 = torch.add(t_707, t_702) - t_709 = F.relu(t_708) - t_710 = self.n_Conv_152(t_709) - t_711 = F.relu(t_710) - t_711_padded = F.pad(t_711, [1, 1, 1, 1], value=0) - t_712 = self.n_Conv_153(t_711_padded) - t_713 = F.relu(t_712) - t_714 = self.n_Conv_154(t_713) - t_715 = torch.add(t_714, t_709) - t_716 = F.relu(t_715) - t_717 = self.n_Conv_155(t_716) - t_718 = F.relu(t_717) - t_718_padded = F.pad(t_718, [1, 1, 1, 1], value=0) - t_719 = self.n_Conv_156(t_718_padded) - t_720 = F.relu(t_719) - t_721 = self.n_Conv_157(t_720) - t_722 = torch.add(t_721, t_716) - t_723 = F.relu(t_722) - t_724 = self.n_Conv_158(t_723) - t_725 = self.n_Conv_159(t_723) - t_726 = F.relu(t_725) - t_726_padded = F.pad(t_726, [0, 1, 0, 1], value=0) - t_727 = self.n_Conv_160(t_726_padded) - t_728 = F.relu(t_727) - t_729 = self.n_Conv_161(t_728) - t_730 = torch.add(t_729, t_724) - t_731 = F.relu(t_730) - t_732 = self.n_Conv_162(t_731) - t_733 = F.relu(t_732) - t_733_padded = F.pad(t_733, [1, 1, 1, 1], value=0) - t_734 = self.n_Conv_163(t_733_padded) - t_735 = F.relu(t_734) - t_736 = self.n_Conv_164(t_735) - t_737 = torch.add(t_736, t_731) - t_738 = F.relu(t_737) - t_739 = self.n_Conv_165(t_738) - t_740 = F.relu(t_739) - t_740_padded = F.pad(t_740, [1, 1, 1, 1], value=0) - t_741 = self.n_Conv_166(t_740_padded) - t_742 = F.relu(t_741) - t_743 = self.n_Conv_167(t_742) - t_744 = torch.add(t_743, t_738) - t_745 = F.relu(t_744) - t_746 = self.n_Conv_168(t_745) - t_747 = self.n_Conv_169(t_745) - t_748 = F.relu(t_747) - t_748_padded = F.pad(t_748, [0, 1, 0, 1], value=0) - t_749 = self.n_Conv_170(t_748_padded) - t_750 = F.relu(t_749) - t_751 = self.n_Conv_171(t_750) - t_752 = torch.add(t_751, t_746) - t_753 = F.relu(t_752) - t_754 = self.n_Conv_172(t_753) - t_755 = F.relu(t_754) - t_755_padded = F.pad(t_755, [1, 1, 1, 1], value=0) - t_756 = self.n_Conv_173(t_755_padded) - t_757 = F.relu(t_756) - t_758 = self.n_Conv_174(t_757) - t_759 = torch.add(t_758, t_753) - t_760 = F.relu(t_759) - t_761 = self.n_Conv_175(t_760) - t_762 = F.relu(t_761) - t_762_padded = F.pad(t_762, [1, 1, 1, 1], value=0) - t_763 = self.n_Conv_176(t_762_padded) - t_764 = F.relu(t_763) - t_765 = self.n_Conv_177(t_764) - t_766 = torch.add(t_765, t_760) - t_767 = F.relu(t_766) - t_768 = self.n_Conv_178(t_767) - t_769 = F.avg_pool2d(t_768, kernel_size=t_768.shape[-2:]) - t_770 = torch.squeeze(t_769, 3) - t_770 = torch.squeeze(t_770, 2) - t_771 = torch.sigmoid(t_770) - return t_771 - - def load_state_dict(self, state_dict, **kwargs): - self.tags = state_dict.get('tags', []) - - super(DeepDanbooruModel, self).load_state_dict({k: v for k, v in state_dict.items() if k != 'tags'}) - diff --git a/modules/devices.py b/modules/devices.py index f8daafc0..3227094c 100644 --- a/modules/devices.py +++ b/modules/devices.py @@ -50,7 +50,6 @@ def enable_tf32(): cpu: torch.device = torch.device("cpu") fp8: bool = False device: torch.device = memory_management.get_torch_device() -device_interrogate: torch.device = memory_management.text_encoder_device() # for backward compatibility, not used now device_gfpgan: torch.device = memory_management.get_torch_device() # will be managed by memory management system device_esrgan: torch.device = memory_management.get_torch_device() # will be managed by memory management system device_codeformer: torch.device = memory_management.get_torch_device() # will be managed by memory management system diff --git a/modules/interrogate.py b/modules/interrogate.py deleted file mode 100644 index 87ca6aef..00000000 --- a/modules/interrogate.py +++ /dev/null @@ -1,219 +0,0 @@ -import os -import sys -from collections import namedtuple -from pathlib import Path -import re - -import torch -import torch.hub - -from torchvision import transforms -from torchvision.transforms.functional import InterpolationMode - -from modules import devices, paths, shared, modelloader, errors -from backend import memory_management -from backend.patcher.base import ModelPatcher - - -blip_image_eval_size = 384 -clip_model_name = 'ViT-L/14' - -Category = namedtuple("Category", ["name", "topn", "items"]) - -re_topn = re.compile(r"\.top(\d+)$") - -def category_types(): - return [f.stem for f in Path(shared.interrogator.content_dir).glob('*.txt')] - - -def download_default_clip_interrogate_categories(content_dir): - print("Downloading CLIP categories...") - - tmpdir = f"{content_dir}_tmp" - category_types = ["artists", "flavors", "mediums", "movements"] - - try: - os.makedirs(tmpdir, exist_ok=True) - for category_type in category_types: - torch.hub.download_url_to_file(f"https://raw.githubusercontent.com/pharmapsychotic/clip-interrogator/main/clip_interrogator/data/{category_type}.txt", os.path.join(tmpdir, f"{category_type}.txt")) - os.rename(tmpdir, content_dir) - - except Exception as e: - errors.display(e, "downloading default CLIP interrogate categories") - finally: - if os.path.exists(tmpdir): - os.removedirs(tmpdir) - - -class InterrogateModels: - blip_model = None - clip_model = None - clip_preprocess = None - dtype = None - running_on_cpu = None - - def __init__(self, content_dir): - self.loaded_categories = None - self.skip_categories = [] - self.content_dir = content_dir - - self.load_device = memory_management.text_encoder_device() - self.offload_device = memory_management.text_encoder_offload_device() - self.dtype = torch.float32 - - if memory_management.should_use_fp16(device=self.load_device): - self.dtype = torch.float16 - - self.blip_patcher = None - self.clip_patcher = None - - def categories(self): - if not os.path.exists(self.content_dir): - download_default_clip_interrogate_categories(self.content_dir) - - if self.loaded_categories is not None and self.skip_categories == shared.opts.interrogate_clip_skip_categories: - return self.loaded_categories - - self.loaded_categories = [] - - if os.path.exists(self.content_dir): - self.skip_categories = shared.opts.interrogate_clip_skip_categories - category_types = [] - for filename in Path(self.content_dir).glob('*.txt'): - category_types.append(filename.stem) - if filename.stem in self.skip_categories: - continue - m = re_topn.search(filename.stem) - topn = 1 if m is None else int(m.group(1)) - with open(filename, "r", encoding="utf8") as file: - lines = [x.strip() for x in file.readlines()] - - self.loaded_categories.append(Category(name=filename.stem, topn=topn, items=lines)) - - return self.loaded_categories - - def create_fake_fairscale(self): - class FakeFairscale: - def checkpoint_wrapper(self): - pass - - sys.modules["fairscale.nn.checkpoint.checkpoint_activations"] = FakeFairscale - - def load_blip_model(self): - self.create_fake_fairscale() - import models.blip - - files = modelloader.load_models( - model_path=os.path.join(paths.models_path, "BLIP"), - model_url='https://storage.googleapis.com/sfr-vision-language-research/BLIP/models/model_base_caption_capfilt_large.pth', - ext_filter=[".pth"], - download_name='model_base_caption_capfilt_large.pth', - ) - - blip_model = models.blip.blip_decoder(pretrained=files[0], image_size=blip_image_eval_size, vit='base', med_config=os.path.join(paths.paths["BLIP"], "configs", "med_config.json")) - blip_model.eval() - - return blip_model - - def load_clip_model(self): - import clip - import clip.model - - clip.model.LayerNorm = torch.nn.LayerNorm - - model, preprocess = clip.load(clip_model_name, device="cpu", download_root=shared.cmd_opts.clip_models_path) - model.eval() - - return model, preprocess - - def load(self): - if self.blip_model is None: - self.blip_model = self.load_blip_model() - self.blip_model = self.blip_model.to(device=self.offload_device, dtype=self.dtype) - self.blip_patcher = ModelPatcher(self.blip_model, load_device=self.load_device, offload_device=self.offload_device) - - if self.clip_model is None: - self.clip_model, self.clip_preprocess = self.load_clip_model() - self.clip_model = self.clip_model.to(device=self.offload_device, dtype=self.dtype) - self.clip_patcher = ModelPatcher(self.clip_model, load_device=self.load_device, offload_device=self.offload_device) - - memory_management.load_models_gpu([self.blip_patcher, self.clip_patcher]) - return - - def send_clip_to_ram(self): - pass - - def send_blip_to_ram(self): - pass - - def unload(self): - pass - - def rank(self, image_features, text_array, top_count=1): - import clip - - devices.torch_gc() - - if shared.opts.interrogate_clip_dict_limit != 0: - text_array = text_array[0:int(shared.opts.interrogate_clip_dict_limit)] - - top_count = min(top_count, len(text_array)) - text_tokens = clip.tokenize(list(text_array), truncate=True).to(self.load_device) - text_features = self.clip_model.encode_text(text_tokens).type(self.dtype) - text_features /= text_features.norm(dim=-1, keepdim=True) - - similarity = torch.zeros((1, len(text_array))).to(self.load_device) - for i in range(image_features.shape[0]): - similarity += (100.0 * image_features[i].unsqueeze(0) @ text_features.T).softmax(dim=-1) - similarity /= image_features.shape[0] - - top_probs, top_labels = similarity.cpu().topk(top_count, dim=-1) - return [(text_array[top_labels[0][i].numpy()], (top_probs[0][i].numpy()*100)) for i in range(top_count)] - - def generate_caption(self, pil_image): - gpu_image = transforms.Compose([ - transforms.Resize((blip_image_eval_size, blip_image_eval_size), interpolation=InterpolationMode.BICUBIC), - transforms.ToTensor(), - transforms.Normalize((0.48145466, 0.4578275, 0.40821073), (0.26862954, 0.26130258, 0.27577711)) - ])(pil_image).unsqueeze(0).type(self.dtype).to(self.load_device) - - with torch.no_grad(): - caption = self.blip_model.generate(gpu_image, sample=False, num_beams=int(shared.opts.interrogate_clip_num_beams), min_length=int(shared.opts.interrogate_clip_min_length), max_length=shared.opts.interrogate_clip_max_length) - - return caption[0] - - def interrogate(self, pil_image): - res = "" - shared.state.begin(job="interrogate") - try: - self.load() - - caption = self.generate_caption(pil_image) - self.send_blip_to_ram() - devices.torch_gc() - - res = caption - - clip_image = self.clip_preprocess(pil_image).unsqueeze(0).type(self.dtype).to(self.load_device) - - with torch.no_grad(), devices.autocast(): - image_features = self.clip_model.encode_image(clip_image).type(self.dtype) - - image_features /= image_features.norm(dim=-1, keepdim=True) - - for cat in self.categories(): - matches = self.rank(image_features, cat.items, top_count=cat.topn) - for match, score in matches: - if shared.opts.interrogate_return_ranks: - res += f", ({match}:{score/100:.3f})" - else: - res += f", {match}" - - except Exception: - errors.report("Error interrogating", exc_info=True) - res += "" - - self.unload() - shared.state.end() - - return res diff --git a/modules/launch_utils.py b/modules/launch_utils.py index 2191555b..c1719360 100644 --- a/modules/launch_utils.py +++ b/modules/launch_utils.py @@ -385,14 +385,14 @@ def prepare_environment(): # stable_diffusion_xl_repo = os.environ.get('STABLE_DIFFUSION_XL_REPO', "https://github.com/Stability-AI/generative-models.git") # k_diffusion_repo = os.environ.get('K_DIFFUSION_REPO', 'https://github.com/crowsonkb/k-diffusion.git') # huggingface_guess_repo = os.environ.get('HUGGINGFACE_GUESS_REPO', 'https://github.com/lllyasviel/huggingface_guess.git') - blip_repo = os.environ.get('BLIP_REPO', 'https://github.com/salesforce/BLIP.git') + # blip_repo = os.environ.get('BLIP_REPO', 'https://github.com/salesforce/BLIP.git') # assets_commit_hash = os.environ.get('ASSETS_COMMIT_HASH', "6f7db241d2f8ba7457bac5ca9753331f0c266917") # stable_diffusion_commit_hash = os.environ.get('STABLE_DIFFUSION_COMMIT_HASH', "cf1d67a6fd5ea1aa600c4df58e5b47da45f6bdbf") # stable_diffusion_xl_commit_hash = os.environ.get('STABLE_DIFFUSION_XL_COMMIT_HASH', "45c443b316737a4ab6e40413d7794a7f5657c19f") # k_diffusion_commit_hash = os.environ.get('K_DIFFUSION_COMMIT_HASH', "ab527a9a6d347f364e3d185ba6d714e22d80cb3c") # huggingface_guess_commit_hash = os.environ.get('HUGGINGFACE_GUESS_HASH', "84826248b49bb7ca754c73293299c4d4e23a548d") - blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9") + # blip_commit_hash = os.environ.get('BLIP_COMMIT_HASH', "48211a1594f1321b00f14c9f7a5b4813144b2fb9") try: # the existence of this file is a signal to webui.sh/bat that webui needs to be restarted when it stops execution @@ -452,7 +452,7 @@ def prepare_environment(): # git_clone(stable_diffusion_xl_repo, repo_dir('generative-models'), "Stable Diffusion XL", stable_diffusion_xl_commit_hash) # git_clone(k_diffusion_repo, repo_dir('k-diffusion'), "K-diffusion", k_diffusion_commit_hash) # git_clone(huggingface_guess_repo, repo_dir('huggingface_guess'), "huggingface_guess", huggingface_guess_commit_hash) - git_clone(blip_repo, repo_dir('BLIP'), "BLIP", blip_commit_hash) + # git_clone(blip_repo, repo_dir('BLIP'), "BLIP", blip_commit_hash) startup_timer.record("clone repositores") diff --git a/modules/paths.py b/modules/paths.py index 877f7469..5992d8ed 100644 --- a/modules/paths.py +++ b/modules/paths.py @@ -8,7 +8,7 @@ sys.path.insert(0, script_path) sd_path = os.path.dirname(__file__) path_dirs = [ - (os.path.join(sd_path, '../repositories/BLIP'), 'models/blip.py', 'BLIP', []), + # (os.path.join(sd_path, '../repositories/BLIP'), 'models/blip.py', 'BLIP', []), # (os.path.join(sd_path, '../packages_3rdparty'), 'gguf/quants.py', 'packages_3rdparty', []), # (os.path.join(sd_path, '../repositories/k-diffusion'), 'k_diffusion/sampling.py', 'k_diffusion', ["atstart"]), # (os.path.join(sd_path, '../repositories/huggingface_guess'), 'huggingface_guess/detection.py', 'huggingface_guess', []), diff --git a/modules/shared.py b/modules/shared.py index 564f613e..ab6e412f 100644 --- a/modules/shared.py +++ b/modules/shared.py @@ -10,7 +10,7 @@ from typing import TYPE_CHECKING from backend import memory_management if TYPE_CHECKING: - from modules import shared_state, styles, interrogate, shared_total_tqdm, memmon + from modules import shared_state, styles, shared_total_tqdm, memmon cmd_opts = shared_cmd_options.cmd_opts parser = shared_cmd_options.parser @@ -37,8 +37,6 @@ state: 'shared_state.State' = None prompt_styles: 'styles.StyleDatabase' = None -interrogator: 'interrogate.InterrogateModels' = None - face_restorers = [] options_templates: dict = None diff --git a/modules/shared_init.py b/modules/shared_init.py index a1cd09af..38f1c324 100644 --- a/modules/shared_init.py +++ b/modules/shared_init.py @@ -33,9 +33,6 @@ def initialize(): from modules import styles shared.prompt_styles = styles.StyleDatabase(shared.styles_filename) - from modules import interrogate - shared.interrogator = interrogate.InterrogateModels("interrogate") - from modules import shared_total_tqdm shared.total_tqdm = shared_total_tqdm.TotalTQDM() diff --git a/modules/shared_options.py b/modules/shared_options.py index 51741126..f287a8ec 100644 --- a/modules/shared_options.py +++ b/modules/shared_options.py @@ -1,7 +1,7 @@ import os import gradio as gr -from modules import localization, ui_components, shared_items, shared, interrogate, shared_gradio_themes, util, sd_emphasis +from modules import localization, ui_components, shared_items, shared, shared_gradio_themes, util, sd_emphasis from modules.paths_internal import models_path, script_path, data_path, sd_configs_path, sd_default_config, sd_model_file, default_sd_model_file, extensions_dir, extensions_builtin_dir, default_output_dir # noqa: F401 from modules.shared_cmd_options import cmd_opts from modules.options import options_section, OptionInfo, OptionHTML, categories @@ -262,21 +262,6 @@ options_templates.update(options_section(('compatibility', "Compatibility", "sd" "refiner_switch_by_sample_steps": OptionInfo(False, "Switch to refiner by sampling steps instead of model timesteps. Old behavior for refiner.", infotext="Refiner switch by sampling steps") })) -options_templates.update(options_section(('interrogate', "Interrogate"), { - "interrogate_keep_models_in_memory": OptionInfo(False, "Keep models in VRAM"), - "interrogate_return_ranks": OptionInfo(False, "Include ranks of model tags matches in results.").info("booru only"), - "interrogate_clip_num_beams": OptionInfo(1, "BLIP: num_beams", gr.Slider, {"minimum": 1, "maximum": 16, "step": 1}), - "interrogate_clip_min_length": OptionInfo(24, "BLIP: minimum description length", gr.Slider, {"minimum": 1, "maximum": 128, "step": 1}), - "interrogate_clip_max_length": OptionInfo(48, "BLIP: maximum description length", gr.Slider, {"minimum": 1, "maximum": 256, "step": 1}), - "interrogate_clip_dict_limit": OptionInfo(1500, "CLIP: maximum number of lines in text file").info("0 = No limit"), - "interrogate_clip_skip_categories": OptionInfo([], "CLIP: skip inquire categories", gr.CheckboxGroup, lambda: {"choices": interrogate.category_types()}, refresh=interrogate.category_types), - "interrogate_deepbooru_score_threshold": OptionInfo(0.5, "deepbooru: score threshold", gr.Slider, {"minimum": 0, "maximum": 1, "step": 0.01}), - "deepbooru_sort_alpha": OptionInfo(True, "deepbooru: sort tags alphabetically").info("if not: sort by score"), - "deepbooru_use_spaces": OptionInfo(True, "deepbooru: use spaces in tags").info("if not: use underscores"), - "deepbooru_escape": OptionInfo(True, "deepbooru: escape (\\) brackets").info("so they are used as literal brackets and not for emphasis"), - "deepbooru_filter_tags": OptionInfo("", "deepbooru: filter out those tags").info("separate by comma"), -})) - options_templates.update(options_section(('extra_networks', "Extra Networks", "sd"), { "extra_networks_show_hidden_directories": OptionInfo(True, "Show hidden directories").info("directory is hidden if its name starts with \".\"."), "extra_networks_dir_button_function": OptionInfo(False, "Add a '/' to the beginning of directory buttons").info("Buttons will display the contents of the selected directory without acting as a search filter."), diff --git a/modules/ui.py b/modules/ui.py index bc22896c..713e0150 100644 --- a/modules/ui.py +++ b/modules/ui.py @@ -13,7 +13,7 @@ from PIL import Image, PngImagePlugin # noqa: F401 from modules.call_queue import wrap_gradio_gpu_call, wrap_queued_call, wrap_gradio_call, wrap_gradio_call_no_job # noqa: F401 from modules import gradio_extensions, sd_schedulers # noqa: F401 -from modules import sd_hijack, sd_models, script_callbacks, paths_internal, ui_extensions, deepbooru, extra_networks, ui_common, ui_postprocessing, progress, ui_loadsave, shared_items, ui_settings, timer, sysinfo, ui_checkpoint_merger, scripts, sd_samplers, processing, ui_extra_networks, ui_toprow, launch_utils +from modules import sd_hijack, sd_models, script_callbacks, paths_internal, ui_extensions, extra_networks, ui_common, ui_postprocessing, progress, ui_loadsave, shared_items, ui_settings, timer, sysinfo, ui_checkpoint_merger, scripts, sd_samplers, processing, ui_extra_networks, ui_toprow, launch_utils from modules.ui_components import FormRow, FormGroup, ToolButton, FormHTML, InputAccordion, ResizeHandleRow from modules.paths import script_path from modules.ui_common import create_refresh_button @@ -119,40 +119,6 @@ def resize_from_to_html(width, height, scale_by): return f"resize: from {width}x{height} to {target_width}x{target_height}" -def process_interrogate(interrogation_function, mode, ii_input_dir, ii_output_dir, *ii_singles): - mode = int(mode) - if mode in (0, 1, 3, 4): - return [interrogation_function(ii_singles[mode]), None] - elif mode == 2: - return [interrogation_function(ii_singles[mode]), None] - elif mode == 5: - assert not shared.cmd_opts.hide_ui_dir_config, "Launched with --hide-ui-dir-config, batch img2img disabled" - images = shared.listfiles(ii_input_dir) - print(f"Will process {len(images)} images.") - if ii_output_dir != "": - os.makedirs(ii_output_dir, exist_ok=True) - else: - ii_output_dir = ii_input_dir - - for image in images: - img = Image.open(image) - filename = os.path.basename(image) - left, _ = os.path.splitext(filename) - print(interrogation_function(img), file=open(os.path.join(ii_output_dir, f"{left}.txt"), 'a', encoding='utf-8')) - - return [gr.update(), None] - - -def interrogate(image): - prompt = shared.interrogator.interrogate(image.convert("RGB")) - return gr.update() if prompt is None else prompt - - -def interrogate_deepbooru(image): - prompt = deepbooru.model.tag(image) - return gr.update() if prompt is None else prompt - - def connect_clear_prompt(button): """Given clear button, prompt, and token_counter objects, setup clear prompt button click event""" button.click( @@ -829,21 +795,6 @@ def create_ui(): show_progress=False, ) - interrogate_args = dict( - _js="get_img2img_tab_index", - inputs=[ - dummy_component, - img2img_batch_input_dir, - img2img_batch_output_dir, - init_img.background, - sketch.background, - init_img_with_mask.background, - inpaint_color_sketch.background, - init_img_inpaint, - ], - outputs=[toprow.prompt, dummy_component], - ) - toprow.prompt.submit(**img2img_args) toprow.submit.click(**img2img_args) @@ -870,16 +821,6 @@ def create_ui(): show_progress=False, ) - toprow.button_interrogate.click( - fn=lambda *args: process_interrogate(interrogate, *args), - **interrogate_args, - ) - - toprow.button_deepbooru.click( - fn=lambda *args: process_interrogate(interrogate_deepbooru, *args), - **interrogate_args, - ) - steps = scripts.scripts_img2img.script('Sampler').steps toprow.ui_styles.dropdown.change(fn=wrap_queued_call(update_token_counter), inputs=[toprow.prompt, steps, toprow.ui_styles.dropdown], outputs=[toprow.token_counter]) diff --git a/modules/ui_toprow.py b/modules/ui_toprow.py index 11cef1bf..6a9055a4 100644 --- a/modules/ui_toprow.py +++ b/modules/ui_toprow.py @@ -13,9 +13,6 @@ class Toprow: prompt_img = None negative_prompt = None - button_interrogate = None - button_deepbooru = None - interrupt = None interrupting = None skip = None @@ -121,10 +118,6 @@ class Toprow: self.clear_prompt_button = ToolButton(value=clear_prompt_symbol, elem_id=f"{self.id_part}_clear_prompt", tooltip="Clear prompt") self.apply_styles = ToolButton(value=ui_prompt_styles.styles_materialize_symbol, elem_id=f"{self.id_part}_style_apply", tooltip="Apply all selected styles to prompts. Strips comments, if enabled.") - if self.is_img2img: - self.button_interrogate = ToolButton('📎', tooltip='Interrogate CLIP - use CLIP neural network to create a text describing the image, and put it into the prompt field', elem_id="interrogate") - self.button_deepbooru = ToolButton('📦', tooltip='Interrogate DeepBooru - use DeepBooru neural network to create a text describing the image, and put it into the prompt field', elem_id="deepbooru") - self.restore_progress_button = ToolButton(value=restore_progress_symbol, elem_id=f"{self.id_part}_restore_progress", visible=False, tooltip="Restore progress") self.token_counter = gr.HTML(value="0/75", elem_id=f"{self.id_part}_token_counter", elem_classes=["token-counter"], visible=False) diff --git a/scripts/loopback.py b/scripts/loopback.py index 800ee882..5ffe2c98 100644 --- a/scripts/loopback.py +++ b/scripts/loopback.py @@ -2,7 +2,7 @@ import math import gradio as gr import modules.scripts as scripts -from modules import deepbooru, images, processing, shared +from modules import images, processing, shared from modules.processing import Processed from modules.shared import opts, state @@ -18,11 +18,10 @@ class Script(scripts.Script): loops = gr.Slider(minimum=1, maximum=32, step=1, label='Loops', value=4, elem_id=self.elem_id("loops")) final_denoising_strength = gr.Slider(minimum=0, maximum=1, step=0.01, label='Final denoising strength', value=0.5, elem_id=self.elem_id("final_denoising_strength")) denoising_curve = gr.Dropdown(label="Denoising strength curve", choices=["Aggressive", "Linear", "Lazy"], value="Linear") - append_interrogation = gr.Dropdown(label="Append interrogated prompt at each iteration", choices=["None", "CLIP", "DeepBooru"], value="None") - return [loops, final_denoising_strength, denoising_curve, append_interrogation] + return [loops, final_denoising_strength, denoising_curve] - def run(self, p, loops, final_denoising_strength, denoising_curve, append_interrogation): + def run(self, p, loops, final_denoising_strength, denoising_curve): processing.fix_seed(p) batch_count = p.n_iter p.extra_generation_params = { @@ -83,13 +82,6 @@ class Script(scripts.Script): if opts.img2img_color_correction: p.color_corrections = initial_color_corrections - if append_interrogation != "None": - p.prompt = f"{original_prompt}, " if original_prompt else "" - if append_interrogation == "CLIP": - p.prompt += shared.interrogator.interrogate(p.init_images[0]) - elif append_interrogation == "DeepBooru": - p.prompt += deepbooru.model.tag(p.init_images[0]) - state.job = f"Iteration {i + 1}/{loops}, batch {n + 1}/{batch_count}" processed = processing.process_images(p) diff --git a/style.css b/style.css index 4bcaa110..859e6753 100644 --- a/style.css +++ b/style.css @@ -331,14 +331,6 @@ input[type="checkbox"].input-accordion-checkbox{ gap: 0.4em; } -.interrogate-col{ - min-width: 0 !important; - max-width: fit-content; - gap: 0.5em; -} -.interrogate-col > button{ - flex: 1; -} .generate-box{ position: relative; @@ -1396,7 +1388,7 @@ body.resizing .resize-handle { flex-basis: 100%; } /* Buttons for directories. */ -.extra-network-tree .tree-list-content-dir {} +.extra-network-tree .tree-list-content-dir {} /* Buttons for files. */ .extra-network-tree .tree-list-item--has-subitem .tree-list--subgroup > li:first-child {