stable-diffusion-webui 的模型更新
shared.py和sd_models.py中
shared.py:
options_templates.update(options_section(('sd', "Stable Diffusion"), {"sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Dropdown, lambda: {"choices": list_checkpoint_tiles()}, refresh=refresh_checkpoints),"sd_checkpoint_cache": OptionInfo(0, "Checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}),"sd_vae_checkpoint_cache": OptionInfo(0, "VAE Checkpoints to cache in RAM", gr.Slider, {"minimum": 0, "maximum": 10, "step": 1}),"sd_vae": OptionInfo("Automatic", "SD VAE", gr.Dropdown, lambda: {"choices": shared_items.sd_vae_items()}, refresh=shared_items.refresh_vae_list).info("choose VAE model: Automatic = use one with same filename as checkpoint; None = use VAE from checkpoint"),"sd_vae_as_default": OptionInfo(True, "Ignore selected VAE for stable diffusion checkpoints that have their own .vae.pt next to them"),"sd_unet": OptionInfo("Automatic", "SD Unet", gr.Dropdown, lambda: {"choices": shared_items.sd_unet_items()}, refresh=shared_items.refresh_unet_list).info("choose Unet model: Automatic = use one with same filename as checkpoint; None = use Unet from checkpoint"),"inpainting_mask_weight": OptionInfo(1.0, "Inpainting conditioning mask strength", gr.Slider, {"minimum": 0.0, "maximum": 1.0, "step": 0.01}),"initial_noise_multiplier": OptionInfo(1.0, "Noise multiplier for img2img", gr.Slider, {"minimum": 0.5, "maximum": 1.5, "step": 0.01}),"img2img_color_correction": OptionInfo(False, "Apply color correction to img2img results to match original colors."),"img2img_fix_steps": OptionInfo(False, "With img2img, do exactly the amount of steps the slider specifies.").info("normally you'd do less with less denoising"),"img2img_background_color": OptionInfo("#ffffff", "With img2img, fill image's transparent parts with this color.", ui_components.FormColorPicker, {}),"enable_quantization": OptionInfo(False, "Enable quantization in K samplers for sharper and cleaner results. This may change existing seeds. Requires restart to apply."),"enable_emphasis": OptionInfo(True, "Enable emphasis").info("use (text) to make model pay more attention to text and [text] to make it pay less attention"),"enable_batch_seeds": OptionInfo(True, "Make K-diffusion samplers produce same images in a batch as when making a single image"),"comma_padding_backtrack": OptionInfo(20, "Prompt word wrap length limit", gr.Slider, {"minimum": 0, "maximum": 74, "step": 1}).info("in tokens - for texts shorter than specified, if they don't fit into 75 token limit, move them to the next 75 token chunk"),"CLIP_stop_at_last_layers": OptionInfo(1, "Clip skip", gr.Slider, {"minimum": 1, "maximum": 12, "step": 1}).link("wiki", "https://github.com/AUTOMATIC1111/stable-diffusion-webui/wiki/Features#clip-skip").info("ignore last layers of CLIP network; 1 ignores none, 2 ignores one layer"),"upcast_attn": OptionInfo(False, "Upcast cross attention layer to float32"),"randn_source": OptionInfo("GPU", "Random number generator source.", gr.Radio, {"choices": ["GPU", "CPU"]}).info("changes seeds drastically; use CPU to produce the same picture across different videocard vendors"),
}))
模型的列表在list_checkpoint_tiles()中,更新在refresh_checkpoints中,282行
def list_checkpoint_tiles():import modules.sd_modelsreturn modules.sd_models.checkpoint_tiles()def refresh_checkpoints():import modules.sd_modelsreturn modules.sd_models.list_models()
点击选中更改,sd_model.py的519行:
def reload_model_weights(sd_model=None, info=None):from modules import lowvram, devices, sd_hijackcheckpoint_info = info or select_checkpoint()if not sd_model:sd_model = model_data.sd_modelif sd_model is None: # previous model load failedcurrent_checkpoint_info = Noneelse:current_checkpoint_info = sd_model.sd_checkpoint_infoif sd_model.sd_model_checkpoint == checkpoint_info.filename:returnsd_unet.apply_unet("None")if shared.cmd_opts.lowvram or shared.cmd_opts.medvram:lowvram.send_everything_to_cpu()else:sd_model.to(devices.cpu)sd_hijack.model_hijack.undo_hijack(sd_model)timer = Timer()state_dict = get_checkpoint_state_dict(checkpoint_info, timer)checkpoint_config = sd_models_config.find_checkpoint_config(state_dict, checkpoint_info)timer.record("find config")if sd_model is None or checkpoint_config != sd_model.used_config:del sd_modelload_model(checkpoint_info, already_loaded_state_dict=state_dict)return model_data.sd_modeltry:load_model_weights(sd_model, checkpoint_info, state_dict, timer)except Exception:print("Failed to load checkpoint, restoring previous")load_model_weights(sd_model, current_checkpoint_info, None, timer)raisefinally:sd_hijack.model_hijack.hijack(sd_model)timer.record("hijack")script_callbacks.model_loaded_callback(sd_model)timer.record("script callbacks")if not shared.cmd_opts.lowvram and not shared.cmd_opts.medvram:sd_model.to(devices.device)timer.record("move model to device")print(f"Weights loaded in {timer.summary()}.")return sd_model
其中sd_model.py的165行中的select_checkpoint
def select_checkpoint():"""Raises `FileNotFoundError` if no checkpoints are found."""model_checkpoint = shared.opts.sd_model_checkpointcheckpoint_info = checkpoint_alisases.get(model_checkpoint, None)if checkpoint_info is not None:return checkpoint_infoif len(checkpoints_list) == 0:error_message = "No checkpoints found. When searching for checkpoints, looked at:"if shared.cmd_opts.ckpt is not None:error_message += f"\n - file {os.path.abspath(shared.cmd_opts.ckpt)}"error_message += f"\n - directory {model_path}"if shared.cmd_opts.ckpt_dir is not None:error_message += f"\n - directory {os.path.abspath(shared.cmd_opts.ckpt_dir)}"error_message += "Can't run without a checkpoint. Find and place a .ckpt or .safetensors file into any of those locations."raise FileNotFoundError(error_message)checkpoint_info = next(iter(checkpoints_list.values()))if model_checkpoint is not None:print(f"Checkpoint {model_checkpoint} not found; loading fallback {checkpoint_info.title}", file=sys.stderr)return checkpoint_info
实际如果在代码中想要更改权重:
reload_model_weights(model_checkpoint=input_json.get('model', "chilloutmix_NiPrunedFp32Fix.safetensors"))
即可。
初始化在webui.py的270行
modules.sd_models.list_models()
中,主要Stable-diffusion下的模型都是提前初始化,在整个工程启动前,sd_model.py的113行
def list_models():checkpoints_list.clear()checkpoint_alisases.clear()cmd_ckpt = shared.cmd_opts.ckptif shared.cmd_opts.no_download_sd_model or cmd_ckpt != shared.sd_model_file or os.path.exists(cmd_ckpt):model_url = Noneelse:model_url = "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors"model_list = modelloader.load_models(model_path=model_path, model_url=model_url, command_path=shared.cmd_opts.ckpt_dir, ext_filter=[".ckpt", ".safetensors"], download_name="v1-5-pruned-emaonly.safetensors", ext_blacklist=[".vae.ckpt", ".vae.safetensors"])if os.path.exists(cmd_ckpt):checkpoint_info = CheckpointInfo(cmd_ckpt)checkpoint_info.register()shared.opts.data['sd_model_checkpoint'] = checkpoint_info.titleelif cmd_ckpt is not None and cmd_ckpt != shared.default_sd_model_file:print(f"Checkpoint in --ckpt argument not found (Possible it was moved to {model_path}: {cmd_ckpt}", file=sys.stderr)for filename in sorted(model_list, key=str.lower):checkpoint_info = CheckpointInfo(filename)checkpoint_info.register()
被注册在checkpoint_info中
webui.py的311行,加载模型:
def load_model():"""Accesses shared.sd_model property to load model.After it's available, if it has been loaded before this access by some extension,its optimization may be None because the list of optimizaers has neet been filledby that time, so we apply optimization again."""shared.sd_model # noqa: B018if modules.sd_hijack.current_optimizer is None:modules.sd_hijack.apply_optimizations()Thread(target=load_model).start()
在shared.py的714行中
class Shared(sys.modules[__name__].__class__):"""this class is here to provide sd_model field as a property, so that it can be created and loaded on demand rather thanat program startup."""sd_model_val = None@propertydef sd_model(self):import modules.sd_modelsreturn modules.sd_models.model_data.get_sd_model()@sd_model.setterdef sd_model(self, value):import modules.sd_modelsmodules.sd_models.model_data.set_sd_model(value)sd_model: LatentDiffusion = None # this var is here just for IDE's type checking; it cannot be accessed because the class field above will be accessed instead
sys.modules[__name__].__class__ = Shared
sd_model的getter/setter属性,在sd_model.py的406行
class SdModelData:def __init__(self):self.sd_model = Noneself.was_loaded_at_least_once = Falseself.lock = threading.Lock()def get_sd_model(self):if self.was_loaded_at_least_once:return self.sd_modelif self.sd_model is None:with self.lock:if self.sd_model is not None or self.was_loaded_at_least_once:return self.sd_modeltry:load_model()except Exception as e:errors.display(e, "loading stable diffusion model", full_traceback=True)print("", file=sys.stderr)print("Stable diffusion model failed to load", file=sys.stderr)self.sd_model = Nonereturn self.sd_modeldef set_sd_model(self, v):self.sd_model = v
在sd_model.py的438行,加载模型:
def load_model(checkpoint_info=None, already_loaded_state_dict=None):from modules import lowvram, sd_hijackcheckpoint_info = checkpoint_info or select_checkpoint()if model_data.sd_model:sd_hijack.model_hijack.undo_hijack(model_data.sd_model)model_data.sd_model = Nonegc.collect()devices.torch_gc()do_inpainting_hijack()timer = Timer()if already_loaded_state_dict is not None:state_dict = already_loaded_state_dictelse:state_dict = get_checkpoint_state_dict(checkpoint_info, timer)checkpoint_config = sd_models_config.find_checkpoint_config(state_dict, checkpoint_info)clip_is_included_into_sd = sd1_clip_weight in state_dict or sd2_clip_weight in state_dicttimer.record("find config")sd_config = OmegaConf.load(checkpoint_config)repair_config(sd_config)timer.record("load config")print(f"Creating model from config: {checkpoint_config}")sd_model = Nonetry:with sd_disable_initialization.DisableInitialization(disable_clip=clip_is_included_into_sd):sd_model = instantiate_from_config(sd_config.model)except Exception:passif sd_model is None:print('Failed to create model quickly; will retry using slow method.', file=sys.stderr)sd_model = instantiate_from_config(sd_config.model)sd_model.used_config = checkpoint_configtimer.record("create model")load_model_weights(sd_model, checkpoint_info, state_dict, timer)if shared.cmd_opts.lowvram or shared.cmd_opts.medvram:lowvram.setup_for_low_vram(sd_model, shared.cmd_opts.medvram)else:sd_model.to(shared.device)timer.record("move model to device")sd_hijack.model_hijack.hijack(sd_model)timer.record("hijack")sd_model.eval()model_data.sd_model = sd_modelmodel_data.was_loaded_at_least_once = Truesd_hijack.model_hijack.embedding_db.load_textual_inversion_embeddings(force_reload=True) # Reload embeddings after model load as they may or may not fit the modeltimer.record("load textual inversion embeddings")script_callbacks.model_loaded_callback(sd_model)timer.record("scripts callbacks")with devices.autocast(), torch.no_grad():sd_model.cond_stage_model_empty_prompt = sd_model.cond_stage_model([""])timer.record("calculate empty prompt")print(f"Model loaded in {timer.summary()}.")return sd_model
相关文章:
stable-diffusion-webui 的模型更新
shared.py和sd_models.py中 shared.py: options_templates.update(options_section((sd, "Stable Diffusion"), {"sd_model_checkpoint": OptionInfo(None, "Stable Diffusion checkpoint", gr.Dropdown, lambda: {"choices": list_…...
Gin模板语法
Gin模板语法 文章目录 <center> Gin模板语法前提提醒Gin框架启动服务器模板解析模板渲染遇到不同目录下相同的文件如何加载和渲染自定义函数加载静态文件 前提提醒 由于有了前面template包的基础,所以该笔记不再过多详细分析 Gin框架启动服务器 语法: r:gin.Default()/…...
Go http.Handle和http.HandleFunc的路由问题
Golang的net/http包提供了原生的http服务,其中http.Handle和http.HandleFunc是两个重要的路由函数。 1. 函数介绍 http.HandleFunc和http.Handle的函数原型如下,其中DefaultServeMux是http包提供的一个默认的路由选择器。 func HandleFunc(pattern st…...
如何使用Kali Linux进行渗透测试?
1. 渗透测试简介 渗透测试是通过模拟恶意攻击,评估系统、应用或网络的安全性的过程。Kali Linux为渗透测试人员提供了丰富的工具和资源,用于发现漏洞、弱点和安全风险。 2. 使用Kali Linux进行渗透测试的步骤 以下是使用Kali Linux进行渗透测试的基本…...
简单易用且高效的跨平台开发工具:Xojo 2023 for Mac
Xojo for Mac是Mac平台上一个跨平台的针对桌面、Web、移动和Raspberry Pi的快速应用程序开发软件。与其他多平台开发工具相比,Xojo for Mac为开发人员提供了显着的生产率提高。 Xojo for Mac具有拖放功能,使您能够快速创建用户界面设计,然后…...
HIVE SQL实现分组字符串拼接concat
在Mysql中可以通过group_concat()函数实现分组字符串拼接,在HIVE SQL中可以使用concat_ws()collect_set()/collect_list()函数实现相同的效果。 实例: abc2014B92015A82014A102015B72014B6 1.concat_wscollect_list 非去重拼接 select a ,concat_ws(-…...
【问心篇】渴望、热情和选择
加班太严重完全没有时间学习,怎么办? 我真的不算聪明的人,但是,我对学习真的是有渴望的。说得好听一点,我希望自己在不停地成长,不辜负生活在这个信息化大变革的时代。说得不好的一点,就是我从…...
【贪心】CF1841 D
Codeforces 题意: 思路: 首先模拟一下样例 并没有发现什么 那么就去考虑特殊情况,看看有没有什么启发 考虑一个大区间包含所有小区间的情形,这种情况就是在这么多区间中找出两个区间 换句话说,这么多区间组成一个…...
移动端预览指定链接的pdf文件流
场景 直接展示外部系统返回的获取文件流时出现了跨域问题: 解决办法 1. 外部系统返回的请求头中调整(但是其他系统不会给你改的) 2. 我们系统后台获取文件流并转为新的文件流提供给前端 /** 获取传入url文件流 */ GetMapping("/get…...
【Go 基础篇】Go语言字符类型:解析字符的本质与应用
介绍 字符类型是计算机编程中用于表示文本和字符的数据类型,是构建字符串的基本单位。在Go语言(Golang)中,字符类型具有独特的特点和表示方式,包括Unicode编码、字符字面值以及字符操作。本篇博客将深入探讨Go语言中的…...
Java基础(十二)面向对象编程 OOP
一、抽象数据类型 1.面向对象基本概念 1. 面向对象 面向对象程序设计(OOP)是一种基于对象概念的软件开发方法,是目前软件开发的主流方式。 常见面向对象的语言:C 、Python 、Java 常见面向过程的语言:C 面向对象的三…...
在阿里云服务器上安装Microsoft SharePoint 2016流程
本教程阿里云百科分享如何在阿里云ECS上搭建Microsoft SharePoint 2016。Microsoft SharePoint是Microsoft SharePoint Portal Server的简称。SharePoint Portal Server是一个门户站点,使得企业能够开发出智能的门户站点。 目录 背景信息 步骤一:添加…...
Ubuntu设置定时重启
1.安装/更新 cron 安装crontab sudo apt-get install cron更新命令 sudo apt-get update2.配置cron定时任务 sudo nano /etc/crontab* * * * * root reboot(从左到右,五个 * 依次是 分,时 ,天,月,星期)下列命令表示…...
sqlloader学习笔记
INFILE的用法 1)模糊导入多个数据的文件。 可以在文件名中使用通配符。 星号 (*) 表示复数字符,问号 (?) 表示单个字符。 INFILE emp*.dat INFILE m?emp.dat 2)如果不需要导入数据…...
内网ip与外网ip
一、关于IP地址 我们平时直接接触最多的是内网IP。而且还可以自己手动修改ip地址。而外网ip,我们很少直接接触,都是间接接触、因为外网ip一般都是运营商管理,而且是全球唯一的,一般我们自己是无法修改的。 内网IP和外网IP是指在…...
分布式 - 消息队列Kafka:Kafka消费者和消费者组
文章目录 1. Kafka 消费者是什么?2. Kafka 消费者组的概念?3. Kafka 消费者和消费者组有什么关系?4. Kafka 多个消费者如何同时消费一个分区? 1. Kafka 消费者是什么? 消费者负责订阅Kafka中的主题,并且从…...
feign调用和被调用者字段名称不对应解决
如果您在使用Feign时,尝试使用SerializedName("id")或JsonAlias("id")修饰字段,但仍然无法正常生效,可能是由于以下原因: Feign不会直接使用Gson库进行序列化和反序列化,而是使用了默认的Jackson库…...
【UE4 RTS】07-Camera Boundaries
前言 本篇实现的效果是当CameraPawn移动到地图边缘时会被阻挡。 效果 步骤 1. 打开项目设置,在“引擎-碰撞”中,点击“新建Object通道” 新建通道命名为“MapBoundaries”,然后点击接受 2. 向视口中添加 阻挡体积 调整阻挡体积的缩放 向四…...
大语言模型之二 GPT发展史简介
得益于数据、模型结构以及并行算力的发展,大语言模型应用现今呈井喷式发展态势,大语言神经网络模型成为了不可忽视的一项技术。 GPT在自然语言处理NLP任务上取得了突破性的进展,扩散模型已经拥有了成为下一代图像生成模型的代表的潜力&#x…...
前后端分离------后端创建笔记(09)密码加密网络安全
本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论,如有侵权请联系 源码:https://gitee.com/green_vegetables/x-admin-project.git 素材:https://pan.baidu.com/s/…...
换掉 Notepad++,事实证明它更牛逼!
提到文本编辑工具,大家肯定第一时间想到的是 Notepad 。Notepad 是一种流行的源代码编辑器,也是 Windows 用户的可靠记事本替代品。它是一个功能强大的实用程序,可在不占用大量存储空间的情况下提供最佳性能。不幸的是,它不适用于…...
Win11Debloat系统优化工具:全面提升Windows性能的技术指南
Win11Debloat系统优化工具:全面提升Windows性能的技术指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter an…...
Anaconda环境下Spyder升级保姆级教程(附常见问题解决方案)
Anaconda环境下Spyder升级全攻略与疑难排解手册 在Python数据科学领域,Spyder作为专为科学计算设计的集成开发环境(IDE),凭借其变量查看器、交互式控制台和强大的调试功能,已成为众多研究人员的首选工具。而Anaconda作为Python科学计算的瑞士…...
商用电子表格:重塑美国经济的隐形力量
电子表格虽不受人喜爱,却是有史以来最成功的应用软件,全球六分之一的人都在使用。它重塑了美国经济,改变了企业的认知与运营方式。不起眼的伟大工具微软 Excel 是最成功的应用软件,全球六分之一的人都在使用它,还决定着…...
终极指南:如何用智能工具轻松突破内容访问限制
终极指南:如何用智能工具轻松突破内容访问限制 【免费下载链接】bypass-paywalls-chrome-clean 项目地址: https://gitcode.com/GitHub_Trending/by/bypass-paywalls-chrome-clean 内容访问突破工具是现代数字工作者的必备利器,它能帮助研究人员…...
行波管(TWT)核心参数权衡:填充比、流通率与电子注效率的物理本质及工程设计
在行波管(TWT)设计中,填充比(F)、流通率(ηₜᵣₐₙₛ)与电子注效率(ηₑ)是决定器件性能的三大核心参数,三者并非独立存在,而是形成了紧密的物理…...
基于计算机视觉的AI头像质量评估系统
基于计算机视觉的AI头像质量评估系统 1. 引言 在数字社交时代,头像已经成为个人形象的重要代表。无论是社交平台、专业网站还是在线会议,一个高质量的头像都能显著提升个人形象和可信度。然而,如何快速评估头像的质量一直是个难题——什么样…...
别再死记硬背了!用DCM模式反激电路,手把手教你搞定宽电压输入的隔离电源
从零构建宽电压隔离电源:DCM反激电路实战指南 当你在深夜调试电路时突然闻到焦糊味,或是面对一堆烧毁的MOS管束手无策,是否想过——电源设计本可以更简单?本文将带你用工程师的思维重新理解反激变换器,避开教科书式的理…...
Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程
Graphormer在计算毒理学中的应用:预测hERG通道抑制活性的完整建模流程 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模型在OGB、PCQM4M等分子…...
从零开始:用CosyVoice2-0.5B快速搭建AI语音生成平台
从零开始:用CosyVoice2-0.5B快速搭建AI语音生成平台 1. 为什么选择CosyVoice2-0.5B? 语音合成技术已经发展多年,但大多数解决方案要么需要复杂的配置过程,要么需要大量训练数据。阿里开源的CosyVoice2-0.5B打破了这一局面&#…...
