sd-webui-controlnet代码分析

news2024/9/21 14:45:05

controlnet前向代码解析_Kun Li的博客-CSDN博客文章浏览阅读1.5k次。要分析下controlnet的yaml文件,在params中分成了4个部分,分别是control_stage_config、unnet_config、first_stage_config、cond_stage_config。其中control_stage_config对应的是13层的controlnet,unet_config对应的是diffusion model,first_stage_config对应的是vae中的decode部分。cldm:controlnet版本的ldm。https://blog.csdn.net/u012193416/article/details/129956546?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170028636116800188569967%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=170028636116800188569967&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-3-129956546-null-null.nonecase&utm_term=controlnet&spm=1018.2226.3001.4450上面是之前写的controlnet原版的代码流程。

stable-diffusion-webui源码分析(7)-controlnet - 知乎AUTOMATIC1111的stable-diffusion-webui是近期很流行的stable-diffusion界面应用,它集合stable-diffusion各项常用功能,还通过扩展的形式支持controlnet、lora等技术。分析它的源码,也在一定程度上有助于理解sta…icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/620218436上面介绍的还是挺详细的。

api.py->这个api和alwayson_scripts不同

controlnet_ui/controlnet_ui_group.UiControlNetUnit->internal_controlnet/external_code.ControlNetUnit

controlnet.py->
ui->
self.ui_group->
ControlNetUiGroup->
controlnet_ui/controlnet_ui_group.ControlNetGroup->render()

controlnet.py->process()->
unet = p.sd_model.model.diffusion_model->
unit.module = global_state.get_module_basename(unit.module)
resize_mode = external_code.resize_mode_from_value(unit.resize_mode)
control_mode = external_code.control_mode_from_value(unit.control_mode)->
model_net = Script.load_control_model(p, unet, unit.model, unit.low_vram)->
input_image, image_from_a1111 = Script.choose_input_image(p, unit, idx)->
preprocessor = self.preprocessor[unit.module]->
detected_map, is_image = preprocessor(input_image,res=preprocessor_resolution,thr_a=unit.threshold_a,thr_b=unit.threshold_b) ->
control, detected_map = Script.detectmap_proc(detected_map, unit.module, resize_mode, h, w) ->
control_model_type = ControlModelType.ControlNet->
preprocessor_dict = dict()->
forward_param = ControlParams()->
self.latest_network = UnetHook(lowvram=any(unit.low_vram for unit in self.enabled_units))->
self.latest_network.hook(model=unet, sd_ldm=sd_ldm, control_params=forward_params, process=p)
- hook.py->UnetHook()->
- process.sample = process_sample
- model._original_forward = model.forward
- model.forward = forward_webui.__get__(model,UNetModel) # 重新给model.foward赋值
-- forward(*args,**kwargs)->
-- # handle cond-uncond marker
-- # convert control image to latent
-- # handle prompt token control
-- # handle controlnet
-- # replace x_t to support inpaint models
-- # clear attention and adain cache
-- # unet encoder
-- # unet middle block
-- # unet decoder
-- # unet output
-- # post-processing for color fix
-- # post-processing for restore
scripts.script_callbacks.on_cfg_denoiser(self.guidance_schedule_handler)

Tips:

最大的问题,controlnet的on_ui_setting并没有被启用?

[Bug]: on_ui_settings callback gets called after "ui" method in scripts · Issue #11210 · AUTOMATIC1111/stable-diffusion-webui · GitHub

大概是这么个问题,就是我在插件中写的on_ui_setting注入到webui中,再从插件中使用这些注入的参数时,无效,需要在安装完后,执行reload操作,这样这些参数注入才是有效的?

但是on_ui_setting中的参数多是默认参数,其实也不太影响。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1238190.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Leo赠书活动-10期 【AIGC重塑教育 AI大模型驱动的教育变革与实践】文末送书

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏: 赠书活动专栏 ✨特色专栏:…

好题分享(2023.11.12——2023.11.18)

目录 ​ 前情回顾: 前言: 题目一:《有效括号》 思路: 总结: 题目二:《用队列实现栈》 思路: 总结: 题目三:《用栈实现队列》 思路: 总结 &#x…

验证码 | 可视化一键管控各场景下的风险数据

目录 查看今日验证数据 查看未来趋势数据 验证码作为人机交互界面经常出现的关键要素,是身份核验、防范风险、数据反爬的重要组成部分,广泛应用网站、App上,在注册、登录、交易、交互等各类场景中发挥着巨大作用,具有真人识别、身…

C#winfrom端屏幕截图功能的简单实现(修改了屏幕的缩放比例后,截图功能异常,慎用!!!)

文章目录 1 主要文件1.1 FrmScreenShot.cs1.2 FrmScreenShot.Designer.cs1.1 Utility.cs 在发现有一款播放软件禁止截图功能后,使用了其他的截图工具发现都会被播放软件禁用掉截图功能,想了下试着自己做一个截图工具,也可以方便将截图工具添加…

【追求卓越01】数据结构--数组

引导 这一章节开始,正式进入数据结构与算法的学习过程中。由简到难,先开始学习最基础的数据结构--数组。 我相信对于数组,大家肯定是不陌生,因为数组在大多数的语言中都有,也是大家在编程中常常会接触到的。我不会说数…

文心大模型商业化领跑,百度在自我颠覆中重构生长力

随着科技巨头竞逐AI大模型,人工智能技术成为今年最受瞩目的新技术。但是,AI大模型的创新之路,还缺少一个足够有力的商业化答案。 作为全球最先发布大模型的互联网大厂,百度能否加速大模型的应用落地,以及文心大模型能…

【23真题】劝退211!今年突变3门课!

今天分享的是23年云南大学847(原827)的考研试题及解析。同时考SSDSP的院校做一个少一个,珍惜!同时考三门课的院校,复习压力极大,但是也会帮大家劝退很多人,有利有弊,请自行分析~ 本…

微信小程序开发者工具] ? Enable IDE Service (y/N) ESC[27DESC[27C

在HBuilder运行微信小程序开发者工具报错 如何解决 打开微信小程序开发者工具打开设置--->安全设置--->服务器端口选择打开就可以啦

短时傅里叶变换函数编写

文章目录 傅里叶变换与短时傅里叶变换什么是窗?自己对手实现短时傅里叶变换 傅里叶变换与短时傅里叶变换 在了解短时傅里叶变换之前,首先要知道是什么是傅里叶变换( fourier transformation,FT),傅里叶变换…

从 PUGC 到 SGC,普通店员也能用 AI 运营「粉丝群」

同一种文案风格反复使用,商品展示图也单调雷同,要直播时就直接「扔」个链接,社群、朋友圈这些品牌的私域重地有时极易被忽视,而变得千篇一律、简单粗暴。 但是,以内容驱动业务增长,已经成为越来越多品牌在做…

【EI会议征稿】第五届人工智能、网络与信息技术国际学术会议(AINIT 2024)

第五届人工智能、网络与信息技术国际学术会议(AINIT 2024) 2024 5th International Seminar on Artificial Intelligence, Networking and Information Technology 第五届人工智能、网络与信息技术国际学术会议(AINIT 2024)将于…

浅析教学型数控车床使用案例

教学型数控车床是一种专为教学和培训设计的机床,它具有小型化、高精度和灵活性的特点,可以作为学校和技术学院的培训机器。下面是一个使用案例,以展示教学型数控车床在教学实训中的应用。 案例背景: 某职业技术学院的机械工程专业…

Java计算时间差,距结束还有几天几小时几分钟

文章目录 1、写法2、备份3、LocalDate、LocalDateTime、Date、String互转 1、写法 //静态方法,传入年月日时分秒 LocalDateTime startTime LocalDateTime.of(2023, 11, 22, 15, 09, 59); LocalDateTime endTime LocalDateTime.of(2023, 11, 30, 0, 0, 0); //计算…

2023.11.22 -数据仓库

目录 https://blog.csdn.net/m0_49956154/article/details/134320307?spm1001.2014.3001.5501 1经典传统数仓架构 2离线大数据数仓架构 3数据仓库三层 数据运营层,源数据层(ODS)(Operational Data Store) 数据仓库层&#…

想打造私域流量帝国?先解决这4个难题!

一、谁是你的目标用户 1. 清晰界定目标用户:确定你的产品或服务主要面向的用户群体,如年龄段、性别、职业等特征。 2. 确定最有购买力的用户群体:分析哪个用户群体在购买你的产品或服务时更容易乐于支付,并将其作为重点关注对象。…

程序的执行原理(下)

文章目录 系统的硬件组成总线I/0设备主存处理器程序计数器(PC)加载:存储:操作:跳转: 运行 hello 程序读入寄存器,再把它存放到内存从磁盘加载程序到主存处理器执行程序并显示 参考 系统的硬件组成 总线 贯穿整个系统的是一组电子管道&#…

Java爬虫框架下代理使用中的TCP连接池问题及解决方案

引言 当使用Java爬虫框架进行代理爬取时,可能会遇到TCP连接池问题,导致"java.net.BindException: Cannot assign requested address"等错误。本文将介绍如何以爬取小红书为案例,解决Java爬虫框架中代理使用中的TCP连接池问题&…

连线鑫云:企业级存储设备制造商!

我们在今年的双11专场直播中,有幸邀请到了鑫云存储的嘉宾与我们连线,为大家作了一场精彩的分享。 这里,首先感谢鑫云存储对水经注的大力支持! 现在,我们将嘉宾分享的内容进行简单整理,并以图文的方式与大家…

如何隐藏自己的代码(很酷)

1.引入 幻想当我们成为一名优秀的程序员,有着各大公司想要买我们的代码,但我们并不想要让他们知道我们代码的实现,毕竟一复制便可以解决,这里我们希望有一种方法可以把我们的核心代码给隐藏掉,那我们又应该怎么去实现呢…

计算3个点的6种分布在平面上的占比

假设平面的尺寸是6*6,用11的方式构造2,在用21的方式构造3 2 2 2 1 2 2 2 2 2 1 2 2 2 2 2 1 2 2 3 3 3 x 3 3 2 2 2 1 2 2 2 2 2 1 2 2 在平面上有一个点x,11的操作吧平面分成了3部分2a1,2a…