0%

Stable Diffusion 基础

Stable Diffusion(SD)模型是由Stability AI和LAION等公司共同开发的生成式模型,总共有1B左右的参数量,可以用于文生图,图生图,图像inpainting,ControlNet控制生成,图像超分等丰富的任务

文生图任务是指将一段文本输入到SD模型中,经过一定的迭代次数,SD模型输出一张符合输入文本描述的图片

而图生图任务在输入本文的基础上,再输入一张图片,SD模型将根据文本的提示,将输入图片进行重绘以更加符合文本的描述。

我们需要给SD模型一个文本信息与机器数据信息之间互相转换的“桥梁”——CLIP Text Encoder模型。 我们使用CLIP Text Encoder模型作为SD模型的前置模块,将输入的人类文本信息进行编码,输出特征矩阵,这个特征矩阵与文本信息相匹配,并且能够使得SD模型理解,完成对文本信息的编码后,就会输入到SD模型的“图像优化模块”中对图像的优化进行“控制”。

如果是图生图任务,我们在输入文本信息的同时,还需要将原图片通过图像编码器(VAE Encoder)生成Latent Feature(隐空间特征)作为输入。

如果是文生图任务,我们只需要输入文本信息,再用random函数生成一个高斯噪声矩阵作为Latent Feature的“替代”输入到SD模型的“图像优化模块”中。

“图像优化模块”作为SD模型中最为重要的模块,其工作流程是什么样的呢?

首先,“图像优化模块”是由一个U-Net网络和一个Schedule算法共同组成,U-Net网络负责预测噪声,不断优化生成过程,在预测噪声的同时不断注入文本语义信息。而schedule算法对每次U-Net预测的噪声进行优化处理(动态调整预测的噪声,控制U-Net预测噪声的强度),从而统筹生成过程的进度。在SD中,U-Net的迭代优化步数大概是50或者100次,在这个过程中Latent Feature的质量不断的变好(纯噪声减少,图像语义信息增加,文本语义信息增加)。

U-Net网络和Schedule算法的工作完成以后,SD模型会将优化迭代后的Latent Feature输入到图像解码器(VAE Decoder)中,将Latent Feature重建成像素级图像。

我们对比一下文生图任务中,初始Latent Feature和经过SD的“图像优化模块”处理后,再用图像解码器重建出来的图片。

Latent Feature经过图像解码器重建后的图片是一个纯噪声图片。

经过SD的“图像优化模块”处理后,再用图像解码器重建出来的图片,可以看到是一个张包含丰富内容信息的有效图片。

Rocky再将其进行总结归纳制作成完整的Stable Diffusion前向推理流程图,方便大家更好的理解SD模型的前向推理过程:

v2-cbc067b9d12ad2c25aff103be299bf94_720w
  1. SD模型是生成式模型,输入可以是图片,文本以及两者的结合,输出是生成的图片。
  2. SD模型属于扩散模型,扩散模型的整体逻辑的特点是过程分步化与可迭代,这给整个生成过程引入更多约束与优化提供了可能。
  3. SD模型是基于Latent的扩散模型,将输入数据压缩到Latent隐空间中,比起常规扩散模型,大幅提高计算效率的同时,降低了显存占用,成为了SD模型破圈的关键一招。
  4. 站在CTO视角,将维度拉到最高维,Rocky认为SD模型是一个优化噪声的AI艺术工具。

Stable Diffusion的整个训练过程在最高维度上可以看成是如何加噪声和如何去噪声的过程,并在针对噪声的“对抗与攻防”中学习到生成图片的能力。

Stable Diffusion整体的训练逻辑也非常清晰:

  1. 从数据集中随机选择一个训练样本
  2. 从K个噪声量级随机抽样一个timestep
  3. 产生随机噪声
  4. 计算当前所产生的噪声数据
  5. 将噪声输入U-Net预测噪声
  6. 计算产生的噪声和预测的噪声的L2损失
  7. 计算梯度并更新SD模型参数

语义信息对图片生成的控制

SD模型在生成图片时,需要输入prompt,那么这些语义信息是如何影响图片的生成呢?

答案非常简单:注意力机制。

在SD模型的训练中,每个训练样本都会对应一个标签,我们将对应标签通过CLIP Text Encoder输出Text Embeddings,并将Text Embeddings以Cross Attention的形式与U-Net结构耦合,使得每次输入的图片信息与文字信息进行融合训练

其他主流生成式模型介绍

在AIGC时代中,虽然SD模型已经成为核心的生成式模型之一,但是曾在传统深度学习时代火爆的GAN,VAE,Flow-based model等模型也跨过周期在SD模型身边作为辅助,发挥了巨大的作用。

GAN网络在AIGC时代依然发挥了巨大的作用,配合SD模型完成了很多算法工作流,比如:图像超分,脸部修复,风格迁移,图像编辑,图像fix,图像定权等。

所以Rocky在这里简单讲解一下GAN的基本原理,让大家做个了解。GAN由生成器G和判别器D组成。其中,生成器主要负责生成相应的样本数据,输入一般是由高斯分布随机采样得到的噪声Z。而判别器的主要职责是区分生成器生成的样本与 gt 样本,输入一般是 gt 样本与相应的生成样本,我们想要的是对 gt 样本输出的置信度越接近1越好,而对生成样本输出的置信度越接近0越好。与一般神经网络不同的是,GAN在训练时要同时训练生成器与判别器,所以其训练难度是比较大的

我们可以将GAN中的生成器比喻为印假钞票的犯罪分子,判别器则被当作警察。犯罪分子努力让印出的假钞看起来逼真,警察则不断提升对于假钞的辨识能力。二者互相博弈,随着时间的进行,都会越来越强。在图像生成任务中也是如此,生成器不断生成尽可能逼真的假图像。判别器则判断图像是 gt 图像,还是生成的图像。二者不断博弈优化,最终生成器生成的图像使得判别器完全无法判别真假。

VAE模型

在Stable Diffusion中,VAE(变分自编码器,Variational Auto-Encoder)是基于Encoder-Decoder架构的生成模型。VAE的Encoder(编码器)结构能将输入图像转换为低维Latent特征,并作为U-Net的输入。VAE的Decoder(解码器)结构能将低维Latent特征重建还原成像素级图像。

Stable Diffusion中VAE的核心作用

总的来说,在Stable Diffusion中,VAE模型主要起到了图像压缩和图像重建的作用

为什么VAE可以将图像压缩到一个非常小的Latent space(潜空间)后能再次对图像进行像素级重建呢?

因为虽然VAE对图像的压缩与重建过程是一个有损压缩与重建过程,但图像全图级特征关联并不是随机的,它们的分布具有很强的规律性:比如人脸的眼睛、鼻子、脸颊和嘴巴之间遵循特定的空间关系,又比如一只猫有四条腿,并且这是一个特定的生物结构特征。下面Rocky也使用VAE将图像重建成不同尺寸的生成图像,实验结论发现如果我们重建生成的图像尺寸在512×512之上时,其实特征损失带来的影响非常小

Stable Diffusion中VAE的高阶作用

与此同时,VAE模型除了能进行图像压缩和图像重建的工作外,如果我们在SD系列模型中切换不同微调训练版本的VAE模型,能够发现生成图片的细节与整体颜色也会随之改变(更改生成图像的颜色表现,类似于色彩滤镜)。

SD模型整体架构初识

Stable Diffusion模型整体上是一个End-to-End模型,主要由VAE(变分自编码器,Variational Auto-Encoder),U-Net以及CLIP Text Encoder三个核心组件构成。

在FP16精度下Stable Diffusion模型大小2G(FP32:4G),其中U-Net大小1.6G,VAE模型大小160M以及CLIP Text Encoder模型大小235M(约123M参数)。其中U-Net结构包含约860M参数,以FP32精度下大小为3.4G左右。

Stable Diffusion中U-Net的核心作用

在Stable Diffusion中,U-Net模型是一个关键核心部分,能够预测噪声残差,并结合Sampling method(调度算法:PNDM,DDIM,K-LMS等)对输入的特征矩阵进行重构,逐步将其从随机高斯噪声转化成图片的Latent Feature

具体来说,在前向推理过程中,SD模型通过反复调用 U-Net,将预测出的噪声残差从原噪声矩阵中去除,得到逐步去噪后的图像Latent Feature,再通过VAE的Decoder结构将Latent Feature重建成像素级图像。

Rocky再从AI绘画应用视角解释一下SD中U-Net的原理与作用。其实大家在使用Stable Diffusion WebUI时,点击Generate按钮后,页面右下角图片生成框中展示的从噪声到图片的生成过程,其中就是U-Net在不断的为大家去除噪声的过程。到这里大家应该都能比较清楚的理解U-Net的作用了。

Stable Diffusion中的U-Net,在传统深度学习时代的Encoder-Decoder结构的基础上,增加了ResNetBlock(包含Time Embedding)模块,Spatial Transformer(SelfAttention + CrossAttention + FeedForward)模块以及CrossAttnDownBlock,CrossAttnUpBlock和CrossAttnMidBlock模块

ResNetBlock模块

在传统深度学习时代,ResNet的残差结构在图像分类,图像分割,目标检测等主流方向中几乎是不可或缺,其简洁稳定有效的“残差思想”终于在AIGC时代跨过周期,在SD模型的U-Net结构中继续繁荣

值得注意的是,Time Embedding正是输入到ResNetBlock模块中,为U-Net引入了时间信息(时间步长T,T的大小代表了噪声扰动的强度),模拟一个随时间变化不断增加不同强度噪声扰动的过程,让SD模型能够更好地理解时间相关性

同时,在SD模型调用U-Net重复迭代去噪的过程中,我们希望在迭代的早期,能够先生成整幅图片的轮廓与边缘特征,随着迭代的深入,再补充生成图片的高频和细节特征信息。由于在每个ResNetBlock模块中都有Time Embedding,就能告诉U-Net现在是整个迭代过程的哪一步,并及时控制U-Net够根据不同的输入特征和迭代阶段而预测不同的噪声残差

Rocky再从AI绘画应用视角解释一下Time Embedding的作用。Time Embedding能够让SD模型在生成图片时考虑时间的影响,使得生成的图片更具有故事性、情感和沉浸感等艺术效果。并且Time Embedding可以帮助SD模型在不同的时间点将生成的图片添加完善不同情感和主题的内容,从而增加了AI绘画的多样性和表现力。

CrossAttention模块

Spatial Transformer模块不改变输入输出的尺寸,只在图片对应的位置上融合了语义信息,所以不管是在传统深度学习时代,还是AIGC时代,Spatial Transformer都是将本文与图像结合的一个“万金油”模块

看CrossAttention模块的结构图,大家可能会疑惑为什么Context Embedding用来生成K和V,Latent Feature用来生成Q呢?

原因也非常简单:因为在Stable Diffusion中,主要的目的是想把文本信息注入到图像信息中里,所以用图片token对文本信息做 Attention实现逐步的文本特征提取和耦合。

Rocky再从AI绘画应用视角解释一下CrossAttention模块的作用。CrossAttention模块在AI绘画应用中可以被视为一种连接和表达的工具,它有助于在输入文本和生成图片之间建立联系,创造更具深度和多样性的艺术作品,引发观众的思考和情感共鸣。CrossAttention模块可以将图像和文本信息关联起来,就像艺术家可以将不同的元素融合到一幅作品中,这有助于在创作中实现不同信息之间的协同和互动,产生更具创意性的艺术作品。再者CrossAttention模块可以用于将文本中的情感元素传递到生成图片中,这种情感的交互可以增强艺术作品的表现力和观众的情感共鸣。

BasicTransformer Block模块

BasicTransformer Block模块是在CrossAttention子模块的基础上,增加了SelfAttention子模块和Feedforward子模块共同组成的,并且每个子模块都是一个残差结构,这样除了能让文本的语义信息与图像的语义信息更好的融合之外,还能通过SelfAttention机制让模型更好的学习图像数据的特征

首先,在Stable Diffusion U-Net的SelfAttention模块中,输入只有图像信息,所以SelfAttention主要是为了让SD模型更好的学习图像数据的整体特征

再者,SelfAttention可以将输入图像的不同部分(像素或图像Patch)进行交互,从而实现特征的整合和全局上下文的引入,能够让模型建立捕捉图像全局关系的能力,有助于模型理解不同位置的像素之间的依赖关系,以更好地理解图像的语义。

在此基础上,SelfAttention还能减少平移不变性问题,SelfAttention模块可以在不考虑位置的情况下捕捉特征之间的关系,因此具有一定的平移不变性。

Rocky再从AI绘画应用视角解释一下SelfAttention的作用。SelfAttention模块可以让SD模型在图片生成过程中捕捉内在关系、创造性表达情感和思想、突出重要元素,并创造出丰富多彩、具有深度和层次感的艺术作品。

Spatial Transformer模块

更进一步的,在BasicTransformer Block模块基础上,加入GroupNorm和两个卷积层就组成Spatial Transformer模块。Spatial Transformer模块是SD U-Net中的核心Base结构,Encoder中的CrossAttnDownBlock模块,Decoder中的CrossAttnUpBlock模块以及CrossAttnMidBlock模块都包含了大量的Spatial Transformer子模块。

CLIP Text Encoder模型

作为文生图模型,Stable Diffusion中的文本编码模块直接决定了语义信息的优良程度,从而影响到最后图片生成的多样性和可控性。

在这里,多模态领域的神器——CLIP(Contrastive Language-Image Pre-training),跨过了周期,从传统深度学习时代进入AIGC时代,成为了SD系列模型中文本和图像之间的连接通道。并且从某种程度上讲,正是因为CLIP模型的前置出现,更加快速地推动了AI绘画领域的繁荣

首先,CLIP模型是一个基于对比学习的多模态模型,主要包含Text Encoder和Image Encoder两个模型。其中Text Encoder用来提取文本的特征,可以使用NLP中常用的text transformer模型作为Text Encoder;而Image Encoder主要用来提取图像的特征,可以使用CNN/vision transformer模型(ResNet和ViT)作为Image Encoder。与此同时,他直接使用4亿个图片与标签文本对数据集进行训练,来学习图片与本文内容的对应关系。

与U-Net的Encoder和Decoder一样,CLIP的Text Encoder和Image Encoder也能非常灵活的切换;其庞大图片与标签文本数据的预训练赋予了CLIP强大的zero-shot分类能力。

灵活的结构,简洁的思想,让CLIP不仅仅是个模型,也给我们一个很好的借鉴,往往伟大的产品都是大道至简的。更重要的是,CLIP把自然语言领域的抽象概念带到了计算机视觉领域

CLIP在训练时,从训练集中随机取出一张图片和标签文本。CLIP模型的任务主要是通过Text Encoder和Image Encoder分别将标签文本和图片提取embedding向量,然后用余弦相似度(cosine similarity)来比较两个embedding向量的相似性,以判断随机抽取的标签文本和图片是否匹配,并进行梯度反向传播,不断进行优化训练。

完成CLIP的训练后,输入配对的图片和标签文本,则Text Encoder和Image Encoder可以输出相似的embedding向量,计算余弦相似度就可以得到接近1的结果。同时对于不匹配的图片和标签文本,输出的embedding向量计算余弦相似度则会接近0

就这样,CLIP成为了计算机视觉和自然语言处理这两大AI方向的“桥梁”,AI领域的多模态应用有了经典的基石模型。

上面我们讲到CLIP模型主要包含Text Encoder和Image Encoder两个模型,在Stable Diffusion中主要使用了Text Encoder模型。CLIP Text Encoder模型将输入的文本Prompt进行编码,转换成Text Embeddings(文本的语义信息),通过前面一章节提到的U-Net网络中的CrossAttention模块嵌入Stable Diffusion中作为Condition,对生成图像的内容进行一定程度上的控制与引导,目前SD模型使用的的是CLIP ViT-L/14中的Text Encoder模型。

CLIP ViT-L/14 中的Text Encoder是只包含Transformer结构的模型,一共由12个CLIPEncoderLayer模块组成,模型参数大小是123M,具体CLIP Text Encoder模型结构如下图所示。其中特征维度为768,token数量是77,所以输出的Text Embeddings的维度为77x768

ControlNet 安装骨架动作绘图

Ivon的部落格

如果你用过Stable Diffusion,可能已经注意到图像的输出有无限的结果可能性,就像在赌博一样,即使你输入了如此复杂和精心设计的提示,控制AI的能力仍然是有限的。所以我们就需要一种在最大大程度上能控制输出的方式。

ControlNet是斯坦福大学研究人员开发的Stable Diffusion的扩展,使创作者能够轻松地控制AI图像和视频中的对象。它将根据边缘检测、草图处理或人体姿势等各种条件来控制图像生成。ControlNet可以概括为一种简单的稳定扩散微调方法。

ControlNet是通过加入额外条件来控制扩散模型的神经网络结构,它可以让AI参考给定图片的动作/线条/景深,更精准的生成图片。

https://github.com/Mikubill/sd-webui-controlnet

克隆代码到本地,然后从本地安装。

安装完成后从 https://huggingface.co/lllyasviel/ControlNet-v1-1/tree/main 下载所有的pth文件,保存到 stable-diffusion-webui/extensions/sd-webui-controlnet/models 目录。

各個模型的用途

ControlNet現有以下模型,您可以按照需求只下載需要的模型。

Anime Lineart

偵測線條,生成的圖片亦會保留原始的線條,適合處理動漫圖像

Canny

偵測圖片邊緣,比較模糊,不如Scribbles完整。

Canny通过使用边缘检测器创建高对比度区域的轮廓来检测输入图像。线条可以捕捉到非常详细的信息,但如果你的图像背景中有一些物体,它很可能会检测到不需要的物体。所以背景中物体越少效果越好。用于此预处理器的最佳模型是control_sd15_canny。

Depth & Depth Leres

偵測輸入圖片的深度圖(depth map)。

这个预处理器有助于生成输入图像的深度估计。深度通常用于控制图像内物体的空间定位。浅色区域意味着它离用户更近,而深色区域则离用户更远。

在大图像时它可能会丢失图像内部的细节(面部表情等)。一般会与control_sd15_depth模型组合使用。Midas Resolution函数用于增加或减少detectmap中的大小和细节级别。它的级别越高,将使用更多的VRAM,但可以生成更高质量的图像,反之亦然。

Depth Leres有与Depth 相同的基本概念,但在地图中包含更广泛的范围。但有时它会从图片中捕获了太多信息,可能会生成与原始图像略有不同的图像。所以最好先试用两种预处理器,然后决定哪一种。

HED (Holistically-Nested Edge Detection)

Hed可以在物体周围创建清晰和精细的边界,输出类似于Canny,但减少了噪声和更柔软的边缘。它的有效性在于能够捕捉复杂的细节和轮廓,同时保留细节特征(面部表情、头发、手指等)。Hed预处理器可用于修改图像的风格和颜色。用于此预处理器的最佳模型是control_sd15_hed。

Illumination

偵測輸入圖片的光源與照明效果。

Inpaint

功能類似「內補繪製」,使用50%隨機遮罩+50%隨機光流遮罩訓練而成。

Instruct Pix2Pix

模型檔名為ip2p,類似「圖生圖」,但是使用訓練50%的指示(instruction)提示詞和50%的敘述(description)提示詞訓練而成。因為是ControlNet,使用此模型時不需要調整CFG Scale。

根據原作者的說法,此模型在下「使其成為X」的提示詞所生成的圖,效果比「使Y成為X」要好。

Also, it seems that instructions like “make it into X” works better than “make Y into X”.

Lineart

偵測線條,適合處理線稿,生成的圖片亦會保留原始的線條。

M-LSD ( Mobile Line Segment Detection)

偵測輸入圖片的直線。MLSD Preprocessor 最适合生成强有力的线条,这些线条能够检测出需要独特和刚性轮廓的建筑和其他人造作品。但是它不适用于处理非刚性或弯曲的物体。MLSD适用于生成室内布局或建筑结构,因为它可以突出直线和边缘。用于此预处理器的最佳模型是control_sd15_mlsd。

Normal map

法线图使用了三种主要颜色(红、绿、蓝),通过不同的角度来精确定位物体的粗糙度和光滑程度。它生成法线图的基本估计,可以保留相当多的细节,但可能会产生意想不到的结果,因为法线图完全来自图像,而不是在3D建模软件中构建的。

法线图有利于突出复杂的细节和轮廓,并且在定位对象方面也很有效,特别是在接近度和距离方面。“Normal Background Threshold”用于调整背景成分。设置一个更高的阈值可以移除背景的远处部分(将其混合成紫色)。降低阈值将命令AI保留甚至显示额外的背景元素。用于此预处理器的最佳模型是control_sd15_normal。

Openpose

使用OpenPose技術偵測輸入圖片人物的動作,不一定會保留線條。

这个预处理器生成了一个基本的骨骼火柴人形象。 这种技术被广泛采用,因为多个 OpenPose 骨架可以组合成一个图像,这有助于引导稳定扩散生成多个一致的主题。 骨架图有很多关节点,。

v2-de4552588266a99bc190a1da375b832d_720w

要优化 OpenPose 的结果,建议上传一张人体图像(全身或半身)以及想要提取的姿势。 用于此预处理器的最佳模型是 control_sd15_openpose。

Scribbles

偵測線條,偵測到的線條品質介於Soft Edge和Lineart之間。

涂鸦的目的是从简单的黑白线条画和草图生成图像。用户也可以使用“Canvas”选项创建特定大小的空白画布,用于手动素描(也可以直接上传图像)。如果草图和绘图由白色背景上的黑线组成,则需要选中“Invert Input Color”复选框。用于这个预处理器的最佳模型是control_sd15_openpose。

Segmentation

模型檔名為seg,將偵測的圖片物件切成一個一個色塊處理,例如房子一個色塊,後面的天空一個色塊。

Shuffle

把輸入圖片的概念轉移到生成的圖片。

作者給的例子:輸入灰色裝甲圖片,生成的鋼鐵人盔甲也會是灰色的。

Soft Edge

偵測圖片邊緣,效果較為柔和,像用炭筆塗過。

Tile

輸入圖片,選取一個區域,使其變清晰的模型。

开始使用

prompt:

a chinese girl, black hair, red shirt, Blue Jeans, Red High Heels, watery eyes,(ultra high res,photorealistic,realistic,best quality,photo-realistic), (((high detailed skin))),(real person,photograph)

negative prompt:

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

启用姿态openpos:

参考图

00100-333969092

结果:

20240207154113-3314802259

提示词工具

https://github.com/DominikDoom/a1111-sd-webui-tagcomplete.git

https://github.com/byzod/a1111-sd-webui-tagcomplete-CN/ 中文

图片库浏览

https://github.com/yfszzx/stable-diffusion-webui-images-browser.git

骨架人偶 PoseX

https://github.com/hnmr293/posex.git

需要先安裝ControlNet才能使用這個擴充功能

PoseX是可以在Stable Diffuison WebUI直接拉人物骨架,再配合ControlNet生成姿勢的擴充功能。

開啟文生圖的頁面,點選右下角PoseX,點選Send this image to ControlNet

在下面的ControlNet,點選Enabled,preprocessor選取none,model選openpose,不需要上傳圖片。

回到上面的PoseX,調整人物姿勢。左鍵點選移動,滾輪放大縮小,對模型左鍵點二下即可用右鍵移動單個骨架。

AI绘图转影片

https://github.com/Scholar01/sd-webui-mov2mov

需要先安裝ControlNet才能使用這個擴充功能

將影片逐一抽出畫格,使用ControlNet生圖,然後再自動合成新影片。可以設定輸出的畫格率,將人物單獨處理。

目前只有windows系统可以使用,如果您系统不支持,可以关闭该选项卡.

生成多个任务

https://github.com/ashen-sensored/stable-diffusion-webui-two-shot

nt Couple會分割繪圖時的提示詞,這樣就可以生成多重人物/物件,並精確指定位置顏色了。

像是先用PoseX拉好骨架,再使用Latent Couple標出人物的概略位置。

用文生图+ControlNet+Latent Couple生成指定位置的多个任务

於文生圖的界面會看到Latent Couple

勾選Enabled啟用,設定長寬,再點選最下面的Create blank canvas建立空白畫布

用滑鼠繪製色塊。例如用紅筆繪製一個人物,藍筆繪製另一個人物。

點選I've finished my sketch,下面就會顯示各個色塊的分割狀況。依序填入提示詞:在General Prompt填入畫風和背景的提示詞,藍筆部份填入貞德Jeanne d'Arc相關的提示詞,紅筆部份填入艾比蓋兒Abigail Williams的相關提示詞

點選Prompt Info Update,提示詞即會自動跑到上面的框框,再自行補上負向提示詞。

搭配事先用PoseX拉好的骨架,再點選Generate開始生圖。

civital 下载模型并学习之二

Meow Mix - Realistic & Versatile

Prompt:

Jim is a middle-aged man with short, graying hair and a rugged appearance. He has a rough, unshaven chin and deep wrinkles around his eyes. He is tall and muscular, with broad shoulders and thick arms. He wears a dirty, faded t-shirt and faded jeans that hang loosely on his frame. His demeanor is angry and bitter, with a constant scowl on his face. He is a character who has been through a lot of hardship and is struggling to come to terms with the changes in society. Despite his rough exterior, there is a hint of sadness in his eyes, indicating that he is deeply hurt by the loss of his job and his wife. Overall, Jim is a complex and troubled character who is struggling to find his place in a world that is rapidly changing around him.

Negative Prompt:

canvas frame, cartoon, 3d, ((disfigured)), ((bad art)), ((deformed)),((extra limbs)),((close up)),((b&w)), wierd colors, blurry, (((duplicate))), ((morbid)), ((mutilated)), [out of frame], extra fingers, mutated hands, ((poorly drawn hands)), ((poorly drawn face)), (((mutation))), (((deformed))), ((ugly)), blurry, ((bad anatomy)), (((bad proportions))), ((extra limbs)), cloned face, (((disfigured))), out of frame, ugly, extra limbs, (bad anatomy), gross proportions, (malformed limbs), ((missing arms)), ((missing legs)), (((extra arms))), (((extra legs))), mutated hands, (fused fingers), (too many fingers), (((long neck))), Photoshop, video game, ugly, tiling, poorly drawn hands, poorly drawn feet, poorly drawn face, out of frame, mutation, mutated, extra limbs, extra legs, extra arms, disfigured, deformed, cross-eye, body out of frame, blurry, bad art, bad anatomy, 3d render

00134-618633303

Steps: 20, Sampler: Euler a, CFG scale: 8, Seed: 618633303, Size: 512x512, Model hash: 834d9e407e, Model: meowMixRealistic_prunedFp16FIXED, Version: v1.7.0

试着自己改

Prompt:

John is a middle-aged chinese man with graying short hair and a rugged appearance. He has a rough, unshaven chin and deep wrinkles around his eyes. He is tall and muscular, with broad shoulders and thick arms. He wears a dirty, faded t-shirt and faded jeans that hang loosely on his frame. His demeanor is angry and bitter, with a constant scowl on his face. He is a character who has been through a lot of hardship and is struggling to come to terms with the changes in society. Despite his rough exterior, there is a hint of sadness in his eyes, indicating that he is deeply hurt by the loss of his job and his wife. Overall, John is a complex and troubled character who is struggling to find his place in a world that is rapidly changing around him.

20240206095935-14219338

Stable diffusion webui 使用sdXL_v10VAEFix.safetensors 模型时候提示 Downloading VAEApprox model TimeoutError

使用sdXL_v10VAEFix.safetensors 模型时候提示 Downloading VAEApprox model to: stable-diffusion-webui/models/VAE-approx/vaeapprox-sdxl.pt,大致是下载vaeapprox-sdxl.pt 文件失败。

参考: https://www.stablediffusion-cn.com/sd/sd-knowledge/1339.html

究其原因是自动下载失败导致的,因为国内需要翻墙才能下载,但是启动 sd 的时候不能翻墙,导致下载失败。

该文件在 Release v1.0.0-pre · AUTOMATIC1111/stable-diffusion-webui ,自行下载并保存到models/VAE-approx目录下就行了

提示词:

photo realistic, ultra details, natural light ultra detailed portrait of a female necromancer, skeleton face volumetric fog, Hyperrealism, breathtaking, ultra realistic, ultra detailed, cyber background, cinematic lighting, highly detailed, breathtaking, photography, stunning environment, wide-angle

Negative prompt: (deformed iris, deformed pupils), text, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, (extra fingers), (mutated hands), poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, (fused fingers), (too many fingers), long neck, camera
Steps: 50, Sampler: Euler, CFG scale: 8, Seed: 2599470049, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00065-2599470049 00070-1453177103

Steps: 20, Sampler: Euler a, CFG scale: 7.5, Seed: 1453177103, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00077-1453177105

Steps: 20, Sampler: UniPC, CFG scale: 8, Seed: 1453177105, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00078-1453177106

Steps: 20, Sampler: UniPC, CFG scale: 8, Seed: 1453177105, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00079-1453177107

Steps: 20, Sampler: UniPC, CFG scale: 8, Seed: 1453177107, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00080-1453177108

Steps: 20, Sampler: UniPC, CFG scale: 8, Seed: 1453177108, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00094-333969092

Steps: 20, Sampler: UniPC, CFG scale: 8, Seed: 333969092, Size: 1024x1024, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00096-333969092

Steps: 20, Sampler: Euler, CFG scale: 8, Seed: 333969092, Size: 1024x1024, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00095-2378502969

Steps: 20, Sampler: Euler, CFG scale: 8, Seed: 2378502969, Size: 1024x1024, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

提示词:

photo of young Chinese woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

Negative prompt:

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

00100-333969092

Steps: 20, Sampler: Euler, CFG scale: 8, Seed: 333969092, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

prompt:

photo of young Caucasian woman, highlight hair, sitting outside restaurant, wearing dress, rim lighting, studio lighting, looking at the camera, dslr, ultra quality, sharp focus, tack sharp, dof, film grain, Fujifilm XT3, crystal clear, 8K UHD, highly detailed glossy eyes, high detailed skin, skin pores

Negative prompt:

disfigured, ugly, bad, immature, cartoon, anime, 3d, painting, b&w

00101-333969092

Prompt

masterpiece, best quality, greg rutkowski, fire, no humans, open mouth, wings, dragon, sharp teeth, teeth, tail, solo, breathing fire, horns, monster, claws, smoke , very detailed, high resolution, sharp, sharp image, 4k, 8k,

Nagative Prompt:

(deformed iris, deformed pupils), text, worst quality, low quality, jpeg artifacts, ugly, duplicate, morbid, mutilated, (extra fingers), (mutated hands), poorly drawn hands, poorly drawn face, mutation, deformed, blurry, dehydrated, bad anatomy, bad proportions, extra limbs, cloned face, disfigured, gross proportions, malformed limbs, missing arms, missing legs, extra arms, extra legs, (fused fingers), (too many fingers), long neck, camera

00111-5

Steps: 20, Sampler: Euler, CFG scale: 8, Seed: 5, Size: 512x512, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00113-3433749320

Steps: 20, Sampler: Euler, CFG scale: 8, Seed: 3433749320, Size: 1024x1024, Model hash: e6bb9ea85b, Model: sdXL_v10VAEFix, VAE hash: e6bb9ea85b, VAE: sdXL_v10VAEFix.safetensors, Version: v1.7.0

00117-3462443395 00116-3462443394 00115-3462443393 00114-3462443392

apple silicon install stable diffusion webui 后运行速度特别慢,参照 https://github.com/AUTOMATIC1111/stable-diffusion-webui/discussions/7453

下载新的webui-user.sh文件,其实就是增加了三行

1
2
3
4
export COMMANDLINE_ARGS="--skip-torch-cuda-test --upcast-sampling --opt-sub-quad-attention --use-cpu interrogate"
venv_dir="venv-torch-nightly"
export TORCH_COMMAND="pip install --pre torch torchvision -f https://download.pytorch.org/whl/nightly/cpu/torch_nightly.html"

然后重新执行webui.sh 后系统速度暴增。

参考 Ivon的部落格

1
an asian girl on the beach
20240204001

改用新的提示词

1
1girl, asian, beach, ocean

然后将batch count改为4

20240204002

再算一次,但是结果变了?没错,即使提示词相近,AI绘图每次生图结果都是随机的。要维持上一次的结果并微调,你得保留每次算图的种子码(Seed,SD WebUI界面右下角,亦会写在文件名上)。

这时候注意一下右下角的内容

1
2
1girl, asian, beach, ocean
Steps: 20, Sampler: LMS, CFG scale: 7, Seed: 1655102876, Size: 512x560, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0
00013-1655102876

新测试,在seed 处填入:1655102876

1
2
3
4
1girl, asian, blue eyes, short hair, straw hat, standing, blue bikini, beach, ocean, orange sky

Steps: 20, Sampler: LMS, CFG scale: 7, Seed: 1655102876, Size: 512x560, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00014-1655102876

要改变风格,可以在提示词加入「风格」的提示词。这方面的提示词有:相片(photoshop)、3D建模(3d model)、装饰艺术(art deco)、石像(stone sculpture)等风格

1
2
3
4
5
a stone sculpture of 1girl, asian, blue eyes, beach, ocean
Steps: 20, Sampler: DPM++ 2M SDE, CFG scale: 7, Seed: 1822157101, Size: 512x512,
Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

Time taken: 14.5 sec.
00019-1822157101

风格是很难界定的东西呢,一般来说我们会图片像哪个艺术家的风格对吧?那么不如直接「召唤」他们吧!提示词可以包含某位画家的名字,AI会尝试模仿其风格。例如加上「慕夏的作品」,并加入「大师级作品」的风格提示词:

1
2
; 参考翻译:慕夏的作品,大师级作品,一个女孩,亚洲人,蓝眼睛,沙滩,海洋
artwork by Alfons Maria Mucha, masterpiece, 1girl, asian, blue eyes, beach, ocean

生图的结果就会变得像是慕夏的作品。顺带一提masterpiece这个提示词还蛮万用的,可以让作品维持一定水准。

00023-3397365016

当然还可以画特定动漫人物的「二创」,只要将名字和作品名称打上去就可以了。有名的动漫角色只要出现名字,不用特别指定身体特征就会生成原作风格了,例如指定《新世纪福音战士》的惣流·明日香·兰格雷:

1
2

asuka_langley_souryuu from neon_genesis_evangelion, masterpiece, 1girl, beach, ocean
00026-1538503611

再次提醒,在下提示词的时候,生成图片使用的模型也需纳入考量。譬如想要生成特定动漫人物,去Danbooru找到了英文姓名,加上提示词,但你却用画真人的Stable Diffusion去算,则AI可能根本就不会认得你说的角色是谁,反之亦然。Danbooru的标签风格跟一般图片的描述还是有差距的。

除非日后有搜罗全部网络图片的超大模型出现,否则下提示词须配合模型种类来决定。

如果AI怎样都生成不出你要的风格或人物,请考虑换个模型,或是 自行训练模型

负向提示词 Negative Prompts

上面我们只写提示词,但下面的负向提示词的字段都是空白。但生图时常常还需要加入一些负向提示词,避免掉不好的结果。AI绘图有时不会一次就算出好结果,所以还需要加上负向提示词来控制,尤其是大批算图的时候更为重要。

负向提示词会加入一些常见的「不好」的图片特征,例如低画质、最糟品质、画家签名、模糊、浮水印

1
deformed, lowres, bad anatomy, text, error, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts, signature, watermark, username, blurry, artist name

不想看到的东西也可以加进去。例如不想看到裸露、兵器、血、猎奇的元素出现,就加入nsfwweaponbloodguro至负向提示词

1
nsfw, weapon, blood, guro, lowres, bad anatomy, text, error, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

提示词并非越多越好,正向提示词以不超过150个词元(token)为原则;不过负向提示词可以尽量把不想看到的都塞进去。

Stable Diffusion WebUI独有语法

此节列出的语法为AUTOMATIC1111制作的SD WebUI独有,使用其他人制作的Stable Diffusion程序不见得适用。

关注度括号 Attention/emphasis

控制关注度的符号,增加算图时对该提示词的关注度(attention)。简单来说,括号就是你想强调的重点元素,括号越多,生成的结果越会符合括号里的提示词。

SD WebUI使用小括号控制关注度: ( ) 小括号层次越多权重越高(不加小括号为1倍,每加一层小括号乘以1.1倍)。例如,强调「蓝眼睛」,生成的结果就更高几率是蓝眼睛人物

1
2
3
4
asuka_langley_souryuu from neon_genesis_evangelion, masterpiece, 1girl, beach, ocean, ((blue eyes))
Steps: 20, Sampler: UniPC, CFG scale: 7, Seed: 1080937815, Size: 512x512,
Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00027-1080937815

亦可以直接写明要增强几倍关注度,但其实一般情况下不用设太强,用一二层的小括号就够了。

1
2
3
4
asuka_langley_souryuu from neon_genesis_evangelion, masterpiece, 1girl, beach, ocean, ((blue eyes)),((yellow hair))
Steps: 20, Sampler: UniPC, CFG scale: 7, Seed: 2199430340, Size: 512x512,
Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00028-2199430340
1
2
3
asuka_langley_souryuu from neon_genesis_evangelion, masterpiece, 1girl, beach, ocean, ((blue eyes)),((yellow hair)),(Green clothes)
Steps: 20, Sampler: UniPC, CFG scale: 7,
Seed: 2630536656, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

这时候对颜色的控制已经错乱了,说明提示词混乱了。

00029-2630536656

提示词编辑 Prompt editing

指定在到哪一步数的时候切换提示词。此处的中括号跟权重无关。

语法为[提示词1:提示词2:要切换的步数]

例如,算图时设置20步,一开始算橘子,设置算到15步时切换成苹果

1
[orange : apple : 15] on table

这时候就是生成一个桔子

切换单字 Alternating Words

使用|代表在每个步数切换提示词,例如我要在算图时于「蓝眼睛」或「红眼睛」或「黑眼睛」之间切换

1
asian, woman, [blue eyes|red eyes|black eyes], beach, ocean

可组合性扩散 Composable Diffusion

此语法让AI依照权重生成二个不同的对象。

例如生成橘子与苹果,中间用大写的AND连接

1
orange AND apple

后面加上数字控制权重,初始值为1,数值低于0.1则无效。

1
orange :1.5 AND apple :2.5

此语法适合搭配 ControlNet和Latent Couple,可以准确控制图中对象的位置。

00116-2587609433

提示词范例

这里提供一些懒人包。负向提示词有些是通用的。

生成可爱的狗勾

让我们试着画几只柯基犬在草地上奔跑。

建议使用模型:Stable Diffusion、Realistic Vision

提示词

1
3 corgi dogs running on grass field

负向提示词

1
lowres, bad anatomy, text, error, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 2387293181, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00032-2387293181

生成高科技未来城市

建议使用模型:Stable Diffusion、Realistic Vision

提示词

1
city future, 8k, exploration, cinematic, realistic, unreal engine, hyper detailed, volumetric light, moody cinematic epic concept art, realistic matte painting, hyper photorealistic

负向提示词

1
lowres, bad anatomy, text, error, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 299709774, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00034-299709774

生成一台特斯拉车子

建议使用模型:Stable Diffusion、Realistic Vision

提示词

1
concept art,tesla car, aerodynamic, future

负向提示词

1
lowres, bad anatomy, text, error, extra digit, fewer digits, cropped, worst quality, low quality, normal quality, jpeg artifacts,signature, watermark, username, blurry, artist name

Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 3821788433, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00041-3821788433

生成动漫美少女

建议使用模型:Anything、Hentai Diffusion

随机画一个Fate/Grand Order的贞德

提示词

1
jeanne d'arc from fate grand order, 1girl, (best quality), (masterpiece), (high detail), ((full face)), sharp, ((looking at viewer)), ((detailed pupils)), (thick thighs), (((full body))), (large breasts)

负向提示词

1
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, artist name

Steps: 20, Sampler: Euler, CFG scale: 7, Seed: 1480416086, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00052-1480416086

生成日韩风真人女孩

建议使用模型:ChilloutMix、Perfect World,并适时使用Japanese Doll的LoRA。

随机画一个日本女孩,不要色色

提示词

1
(a japanese woman), shiny skin, (ultra high res,photorealistic,realistic,best quality,photo-realistic), (((high detailed skin,visible pores))),(real person,photograph), (8k, raw photo, best quality, masterpiece),(1girl),photon mapping, radiosity, physically-based rendering,automatic white balance,(haunting smile,moist lips),watery eyes, (blush|cute and playful|adorable|thick bangs|beauty),((irises and pupils are rounded,the pupil reflects the surroundings,eyes are not the same size))

负向提示词

1
nude, lowres,blurry,simple background,jpeg artifacts,bad-artist,bad shadow,compressed image,low pixel,light spot, paintings,sketches,((monochrome)),((grayscale)),noise point,semi-realistic, 3d,render,cg,drawing,cartoon,anime,comic,username,watermark,signature,cropped,error,censored,text,stain, deformed iris,deformed pupils,deformed nail,deformed ear,deformed eye,deformed eyelid,collapsed eyeshadow, [excessive skin spots,excessive skin imperfections,skin blemishes,skin fold,rough skinstain skin],goosebumps,skin layering,axillary fold,facial contortion, (flawless face),trimming

Steps: 20, Sampler: DDIM, CFG scale: 7, Seed: 2228126458, Size: 512x512, Model hash: cc6cb27103, Model: v1-5-pruned-emaonly, Version: v1.7.0

00057-2228126458

Prompt:

(a japanese woman), shiny skin, (ultra high res,photorealistic,realistic,best quality,photo-realistic), (((high detailed skin,visible pores))),(real person,photograph), (8k, raw photo, best quality, masterpiece),(1girl),photon mapping, radiosity, physically-based rendering,automatic white balance,(haunting smile,moist lips),watery eyes, (blush|cute and playful|adorable|thick bangs|beauty),((irises and pupils are rounded,the pupil reflects the surroundings,eyes are not the same size))

20240207110110-1201812112

Steps: 20, Sampler: Euler a, CFG scale: 7, Seed: 1201812112, Size: 512x512, Model hash: 4199bcdd14, Model: revAnimated_v122EOL, Version: v1.7.0

5. 值得参考的提示词网站 #

若使用的是SD模型,想生成真人,请看 Voldy整理的历史上有名的艺术家。

若使用动漫风的模型请看 Danbooru图库的标签决定要下哪些提示词。

Prompt GeneratorNovelAI魔导书可以协助你组合提示词。

Civitai除了下载模型外,还有很多现成的提示词搭配模型的范例可以照抄。

https://github.com/comfyanonymous/ComfyUI

Dependencies

Install the dependencies by opening your terminal inside the ComfyUI folder and:

1
2
conda activate comfyui
pip install -r requirements.txt

Run

1
python main.py --force-fp16

comfyUI examples

https://comfyanonymous.github.io/ComfyUI_examples/

这里包含所有comfyUI的例子,这里所有图片都包含可以被comfyUI加载的 metadata 信息

RealESRGAN_x4plus.pth

https://huggingface.co/lllyasviel/Annotators/blob/main/RealESRGAN_x4plus.pth

https://developer.apple.com/metal/pytorch/

Anaconda

Setup

Apple silicon

1
2
curl -O https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
sh Miniconda3-latest-MacOSX-arm64.sh

Install

Anaconda
1
conda install pytorch torchvision torchaudio -c pytorch-nightly
pip
1
pip3 install --pre torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/nightly/cpu

Verify

You can verify mps support using a simple Python script:

1
2
3
4
5
6
7
import torch
if torch.backends.mps.is_available():
mps_device = torch.device("mps")
x = torch.ones(1, device=mps_device)
print (x)
else:
print ("MPS device not found.")

The output should show:

1
tensor([1.], device='mps:0')

1
2
3
4
5
6
7
8
CREATE DATABASE LINK remote_db
CONNECT TO remote_username IDENTIFIED BY remote_password
USING '172.16.40.2:1521/HWDB';

select db_link,username,host from dba_db_links;