stable diffusion webui (AI绘图)

本文最后更新于 2024年2月4日 早上

AI绘画,早前火的时候我本来想玩玩,但是公司里面研究这个旁人看来就觉得:这货在摸鱼,看黄图。家里电脑显卡又太垃圾,于是一直没碰。最近公司有需求,于是就合法探索,本文记录SD的部署和基本使用。

1 安装(ubuntu)

  • conda虚拟环境,python=3.10,CUDA。这些之前有写过,这里就不重复了
  • 安装torch(根据电脑的cuda版本)
    1
    pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
  • 克隆仓库
    1
    https://github.com/AUTOMATIC1111/stable-diffusion-webui.git	
  • 安装依赖
    1
    2
    pip install -r requirements_versions.txt
    pip install -r requirements.txt

2 运行

1
CUDA_VISIBLE_DEVICES=0 python launch.py --port 23234 --listen --enable-insecure-extension-access

运行时报错:

1
AssertionError: extension access disabled because of command line flags

需要在启动时添加参数

1
--enable-insecure-extension-access

  • 如果需要一个公网域名可以编辑webui.py,修改share=True

    1
    2
    3
    4
    5
    app, local_url, share_url = shared.demo.launch(
    #share=cmd_opts.share,
    share=True,
    server_name=server_name,
    以下省略
  • 如果需要在局域网运行,则修改./modules/cmd_args.py,添加default=True

    1
    parser.add_argument("--listen", action='store_true',default=True, help="launch gradio with 0.0.0.0 as server name, allowing to respond to network requests")
  • 如果就在本机使用,那么就啥都不修改,直接执行:

    1
    2
    3
    python launch.py
    #换端口就加上--port 23234,或者和上面一样去修改cmd_args.py中的--port默认值
    #需要密码就加上--gradio-auth username:password
  • 运行的时候报错说找不到模型什么的,没啥关系,后面去下载就行了

3 使用

3.1 插件

如果安装报错: Error completing request
那么去修改./modules/shared.py

1
cmd_opts.disable_extension_access = False

3.1.1 Civitai助手

该插件能够从Civitai下载、更新模型或者对已经下载的模型拉取消息,在web页面上安装

  • Extensions -> install from URL
  • https://github.com/butaixianran/Stable-Diffusion-Webui-Civitai-Helper填入
  • install
  • 重启
  • 之后在菜单栏会多出一个Civitai Helper

由于civitai需要梯子,所以自行参考v2rayA

3.1.2 汉化

  • Extensions -> install from URL
  • 填入https://github.com/VinsonLaro/stable-diffusion-webui-chinese
  • install
  • 重启
  • Settings -> 左侧选择User interface -> 打开第一个选项Localization -> 选择Chinese-English

3.1.3 提示词插件

也可以将插件扔到extensions目录中

3.1.4 安装ControlNet和OpenPose模型

  • ControlNet插件,仍然是在Extensions中通过链接安装:https://github.com/Mikubill/sd-webui-controlnet

  • 安装完成后在txt2Img可以看到多了个选项栏

  • 之后下载openpose模型,control_v11p_sd15_openpose.pth,将其放到stable-diffusion-webui\models\ControlNet文件夹中

  • 如果想自定义姿势可以安装open-pose-editor,地址:

    1
    https://github.com/ZhUyU1997/open-pose-editor.git
  • 下图是使用controlnet的pose模型从图片中提取出骨架的预处理效果

3.2 模型

  • Stable Diffusion模型,初次运行时会发现有一个默认的模型v1-5-pruned-emaonly.safetensors,也就是基础模型,在web界面左上角可以选择。该模型被存放在models\Stable-diffusion目录中。基础模型确定了画面的整体风格,如卡通还是写实之类。

  • Lora模型,无线通信(误),微调模型,也即基于基础模型对其进行调整的模型,目在models\Lora。

  • VAE模型,大概是加滤镜的相关吧,还没用过,路径models\VAE,

主要就是通过他们的排列组合产出自己喜欢的图片。在下载模型的页面会有说明模型的类别,也可以通过这网站,帮助你知道它是啥,不过直接看大小也行,基础模型通常都是G单位,而lora通常就几十几百M。

这里先在civitai上下载个lora模型基础模型。之后使用他们进行示例出图

3.3 参数

  • CFG scale 提示词引导系数 值越大越符合给出的提示词描述,看网上图通常在7~12之间
  • Sampling steps 迭代次数,通常越高的迭代次数会生成更好的图像质量,花费更多的时间,但过大后就没啥变化了。
  • Batch count 同样参数生成轮数,每轮都会输出图,数量根据Batch size而定
  • Batch size 每轮输出图数量
  • Seed 随机数种子,主要就是通过它来产出不同的图片,也意味着相同的seed会输出相似图
  • Clip skip 该参数需要在设置->用户界面中添加: 先点应用再点重载,之后模型选择的右边就多了个clip skip的选项
  • ENSD同样在设置里面,同样通过上面的方式搞个快捷设置,输入eta_noise_seed_delta。该值会对随机数种子进行偏移,当模仿图片时注意是否对其修改。
  • Sampler 我就是根据模型的示例图选择对应的
  • Width X Height 对于宽高的设置可以参考下使用的模型,模型会根据一类尺寸的图进行训练,使用相同尺寸图效果会更好
  • 高清修复/Hires. fix,高清化算法选择ESRGAN_4x,重绘强度/Denoising strength是对放大后细节的修改程度,越大越偏离原图。放大倍率/Upscale by是对原图的放大倍数,例如512就变成了1024。

3.4 出图

  • 点击菜单栏的txt2img,进行文本生成图片

  • 点击生成按钮下方的书本图标,打开模型选择窗口

  • 在checkpoints栏目点击模型revAnimated_v122

  • 在lora栏目下点击add_detail,这时候提示词位置会自动填充,后面的数字是权重,表示增加或者减少细节,范围在-2~2

    1
    <lora:add_detail:1>
  • 然后写入提示词

    1
    <lora:add_detail:-0.5>, 1girl, loli, Slim, small breasts, elf , red eyes, white hair, very long hair, japanses clothes, grove, Morning
  • 禁止项,就是提升词下面那个,最开始没写,结果发现居然生成了漏点图,这模型不健康- -|

    1
    naked,bare
  • 随便改了改参数,点击生成,4090用了14秒出图。看着怪怪的,这里也就记录下流程,等之后试试其他模型。

3.5 模仿出图

没啥经验的情况下,可以通过civitai上图片参数,进行模仿出图,例如此图,在图片右侧会显示:

  • 照着填入prompt的提示词
  • 去下载AnyLoRA_bakedVae_fp16_NOTpruned模型,它是基础模型
  • 下载lora模型violet_evergarden_offset
  • 去下载FastNegativeV2反向提示词包,这里补充下,它的类型是embedding,也是扔到根目录的embeddings文件夹中。提示词包意思就是里面包含了很多提示词,方便用户直接引入,而不是每次都填写一大堆。
  • 重启webui
  • 取样器sampler选择DPM++ SDE karras
  • 图片尺寸:512x704
  • 反正就是参数照着填

最终输出图像(不加lora模型):

添加Lora模型后:

3.6 提示词

3.6.1 语法

  • 英文
  • TAG之间逗号分隔:1gilr,long hair, blue eyes
  • |符号可用于等比例混合两个提示词:1girl, long hair, blue|red eyes
  • 使用括号进行权重设置,范围0.1~100,默认为1,低于1则效果减弱:(1girl:2), long hair, (blue eyes:0.5)
  • 单独使用()[]套入关键词分布表示增加1.1倍和减弱1.1倍

3.6.2 提示词

通常按照:画质->风格->主题->外表->情绪->姿势->背景->其他的顺序进行填写,但模型本身就定调了一些东西的时候,就可以省略一些。越重要的词就往前面放,相同含义的词放一起。关于具体的提示词,使用上文提到的提示词插件进行选择,还是挺方便的。

3.6.3 反向提示词

用于指定不要的特征,例如:naked,bare。我就发现这些模型,如果不填写经常输出些少儿不宜的图。以下是一个的反向提示词示例,当然也不需要写这么多。

1
fat, naked, nude, paintings, sketches, (worst quality:2), (low quality:2), (normal quality:2), lowres, ((monochrome)), ((grayscale)), bad anatomy, DeepNegative, lowres, bad anatomy, bad hands, text, error, missing fingers, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, bad feet, cropped, poorly drawn hands, poorly drawn face, mutation, deformed, extra fingers, extra limbs, extra arms, extra legs, malformed limbs, fused fingers, too many fingers, long neck, cross-eyed, mutated hands, polar lowres, bad body, bad proportions, gross proportions, text, error, missing fingers, missing arms, missing legs,

链接


stable diffusion webui (AI绘图)
https://blog.kala.love/posts/d135f421/
作者
久远·卡拉
发布于
2023年8月17日
许可协议