stable-diffusion-webui sdxl模型代码分析

这篇具有很好参考价值的文章主要介绍了stable-diffusion-webui sdxl模型代码分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

采样器这块基本都是用的k-diffusion,模型用的是stability的原生项目generative-models中的sgm,这点和fooocus不同,fooocus底层依赖comfyui中的models,comfy是用load_state_dict的方式解析的,用的load_checkpoint_guess_config函数,这个函数webui中也有。

webui在paths中导入了generative-models,在sd_model_config中导入了config.sdxl和config.sdxl_refiner两个config,模型使用sgm下的models/diffusion/DiffusionEngine初始化,refiner和base的模型几乎是一致的。

python webui.py --port 6006 --no-half-vae

webui()->

initialize()->
initialize_rest()->
- sd_samplers.py -> set_samplers()->sd_samplers_kdiffusion.py->
- extensions.py -> list_extensions()
- initialize_util.py -> restore_config_state_file()
- sd_models.py -> list_models()
- localization.py -> list_localizations()
- scripts.load_scripts() -> scripts.py 
-- scripts_txt2img=ScriptRunner()/scripts_img2img=ScriptRunner()/scripts_postpro=scripts_postprocessing.ScriptPostprocessingRunner()(scripts_postprocessing.py)
- modelloader.py -> load_upscaler()
- sd_vae.py -> refresh_vae_list()
- textual_inversion/textual_inversion.py -> list_textual_inversion_templates() 
- script_callbacks.py -> on_list_optimizers(sd_hijack_optimizations.list_optimizers)
- sd_hijack.py -> list_optimizers()
- sd_unet.py -> list_unets()
- load_model -> shared.py 
- shared_items.py -> reload_hypernetworks() # 这种方式现在几乎不用了
- ui_extra_networks.py -> initialize()/register_default_pages()
- extra_networks.py -> initialize()/register_default_extra_networks()

ui.py -> ui.create_ui()

ui.py

一些基础参数的初始化也在这里,关于ui设计在webui中代码还是挺多的

ui_components.py 一些设计的ui组件

shared_items.py 重复的一些item

下面就是一个FormRow:

elif category == "dimensions":
    with FormRow():
        with gr.Column(elem_id="txt2img_column_size", scale=4):
            width = gr.Slider(minimum=64, maximum=2048, step=8, label="Width", value=512, elem_id="txt2img_width")
            height = gr.Slider(minimum=64, maximum=2048, step=8, label="Height", value=512, elem_id="txt2img_height")

....

stable-diffusion-webui sdxl模型代码分析,多模态和生成模型,stable diffusion

调用接口入口:

txt2img_args = dict(
                fn=wrap_gradio_gpu_call(modules.txt2img.txt2img, extra_outputs=[None, '', '']),
                _js="submit",
                inputs=[
                    dummy_component,
                    toprow.prompt,
                    toprow.negative_prompt,
                    toprow.ui_styles.dropdown,
                    steps,
                    sampler_name,
                    batch_count,
                    batch_size,
                    cfg_scale,
                    height,
                    width,
                    enable_hr,
                    denoising_strength,
                    hr_scale,
                    hr_upscaler,
                    hr_second_pass_steps,
                    hr_resize_x,
                    hr_resize_y,
                    hr_checkpoint_name,
                    hr_sampler_name,
                    hr_prompt,
                    hr_negative_prompt,
                    override_settings,

                ] + custom_inputs,

txt2img.py

p = processing.StableDiffusionProcessingTxt2Img(sd_model,,prompt,negative_prompt,sampler_name,...)->
processed = processing.process_images(p)

processing.py

res = process_image_inner(p)
- sample_ddim = p.sample(conditioning,unconditional_conditioning,seeds,subseeds,subseed_strength,prompts)-> StableDiffusionProcessingTxt2Img.sample()
-- self.sampler = sd_sampler.create_sampler(self.sampler_name,self.sd_model)
-- samples = self.samplers.sample(c,uc,image_encoditioning=self.txt2img_image_conditioning(x))

sd_samplers_kdiffusion.py

sample()->
samples = self.launch_sampling(steps,lambda:self.func(self.model_wrap_cfg,x,self.sampler_extra_args,...))
model_rap_cfg:CFGDenoiseKDiffusion->sd_samplers_cfg_denoiser.CFGDenoiser

sd_samplers_common.py

func() = sample_dpmpp_2m ->

repositories/k-diffusion/k_diffusion/sampling.py

sample_dpmpp_2m()->
- denoised = model(x,sigmas[i]*s_in,**extra_args)->
...
# 此处就是去噪产生图片的过程

modules/sd_samplers_cfg_denoiser.py  model = 

CFGDenoiser()->
forward(x:2x4x128x128,sigma:[14.6146,14.6146],uncond:SchedulePromptConditionings,cond:MulticondLearnedConditioning,cond_scale:7,s_min_uncond:0,image_cond:2x5x1x1)->
denoised:2x4x128x128
# unet预测都被封装在这里

modules/sd_models.py  这块主要是

reload_model_weights()->
sd_model = reuse_model_from_already_loaded(sd_model,checkpoint_info,...)
load_model()
....

modules/sd_samplers_common.py

sd_models.reload_model_weights(refiner_checkpoint_info)
cfg_denoiser.update_inner_model()->

modules/sd_samplers_cfg_denoiser.py文章来源地址https://www.toymoban.com/news/detail-738986.html

forward()->

到了这里,关于stable-diffusion-webui sdxl模型代码分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • stable-diffusion-webui 的模型更新

    shared.py和sd_models.py中 shared.py: 模型的列表在list_checkpoint_tiles()中,更新在refresh_checkpoints中,282行 点击选中更改,sd_model.py的519行: 其中sd_model.py的165行中的select_checkpoint 实际如果在代码中想要更改权重: 即可。 初始化在webui.py的270行 中,主要Stable-diffusion下的模型都是提前初

    2024年02月13日
    浏览(37)
  • Stable-Diffusion-WebUI从代码下载到使用技巧

    本文用于对AI绘画感兴趣但无计算机编程基础的人,包含本人安装和使用过程中的心得,可供新学者参考。 心理准备: 电脑性能越高越好,最好有高端显卡,如30系以上。低端显卡也可以,速度和质量感人就是; 会要求下载一些软件、模型,涉及环境变量设置、虚拟环境安装

    2024年02月10日
    浏览(69)
  • stable-diffusion-webui怎么样增加自己训练的LoRA模型?

    不怕笑话,我曾经为了找这个功能,居然搞了半天时间,结果还没有搞定。 后来再不断地研究各种教程,就是没有发现这个功能,无意间发现有一个人贴了一张图片, 他只是介绍放到这个目录,他没有告诉我这个目录怎么样来的,因为我在同样的位置上没有这个目录。 这样

    2024年04月14日
    浏览(57)
  • AI作画工具 stable-diffusion-webui 本地部署 多种模型 可生成NSFW

    最近,人工智能绘画非常受欢迎。在本文中,我使用了一台带有N卡的电脑,安装了stable-diffusion-webui前端并替换了默认的模型。这样就可以生成高质量的二次元图像,并且可以不受限制地生成图片(在线版通常会阻止NSFW内容的生成)。 Git:https://git-scm.com/download CUDA:https://

    2024年02月02日
    浏览(83)
  • 【Stable-Diffusion-WebUI】Windows系统安装Stable-Diffusion-WebUI

    基于 stable-diffusion 封装的 webui 开源项目,通过界面交互的方式来使用 stable-diffusion,降低了使用门槛,可以通过本地部署的方式进行访问,对电脑的配置要求较高,以下配置要求仅供参考 第一步:安装python3.10(这步可以跳过,3.8以上即可) 第二步:使用git下载stable diffusio

    2024年02月11日
    浏览(79)
  • 大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(一)

    stable-diffusion-webui(以下简称sd)项目通过FastAPI对外提供了一系列的api用于开发者二次开发或者集成到自己的项目中。大体原理就是sd在本地启动后作为服务端,然后通过FastAPI提供API接口,

    2024年02月09日
    浏览(105)
  • 大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(四)

    vueuse 工具包封装了一些常用的方法,且对于数据的操作是响应式的。接下里我们会用其中的 useStorage 方法保存组件中的参数以及文生图API的请求结果,这样在浏览器刷新后依然可以得到原来的数据。 上篇内容我们已经实现了文生图的功能,但是当我们主动刷新网页后,组件

    2024年02月16日
    浏览(48)
  • 大话Stable-Diffusion-Webui-动手开发一个简单的stable-diffusion-webui(二)

    在上篇内容中我们将界面的整体布局进行划分,并且放置了两个ant-design-vue的文本域组件 a-textarea ,我们继续向文本域组件添加文本域自身有的属性: allow-clear :可以直接使用清除按钮清除文本域内容 :rows=\\\"5\\\" :限制文本域行数为5行 show-count :maxle

    2024年02月09日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包