0%

macbook silicon 运行kettle(data-integration)

kettle在windows及intel电脑运行正常,但是在silicon芯片的macos上执行是提示:不支持arm64。搜索 发现解决方案: https://medium.com/@gabriella.mayang/how-to-install-and-open-pentaho-data-integration-on-macbook-m2-apple-silicon-4081c2875a02

Step 1: Download JDK and JRE

I tried JDK from Oracle but it failed. Now the only JDK that I am using and proven successful in opening PDI in my M2 is the one from Eclipse Temurin OpenJDK.

  1. Click here to download https://adoptium.net/temurin/releases/?variant=openjdk8&os=mac
  2. Choose JDK .pkg

Step 2: Download MacOSX X86 JAR

  1. Click here to download https://mega.nz/file/VFhgnS6I#s4zUK81rXGdXcpJMuzUvDOHoixZmAl4jyXd0yMU11F0
  2. Move the file to ‘libswt/osx64’

就是把下载的文件放到 data-integration/libswt/osx64 目录下。

Step 4: Create New Terminal Profile for Intel

注:这里是苹果原生的terminal,不是iterm。

  1. Open Terminal > Settings
  2. Click the ‘**+’** button to add new profile and name it as “Rosetta Intel”. You can choose another name but make sure the new profile name indicates the profile usage is for Intel-based apps
  3. Go to ‘Shell’ tab and paste this in the ‘Run Command’ field:
1
env /usr/bin/arch -x86_64 /bin/zsh --login

Uncheck ‘Run inside shell’. Uncheck the checkbox would prevent running the shell twice, which could bloat your environment variables since ~/.zshrc gets run twice

最后 JAVA_HOME

因为我用了多版本的jdk,所以需要单独设置一个java环境

1
2
export JAVA_HOME=/Library/Java/JavaVirtualMachines/temurin-8.jdk/Contents/Home

然后就成功了。

解决 访问http自动跳转到https的问题

1、先访问http域名,然后点击地址栏所测那个“不安全”的警告,弹出对话框中选择网站设置,

2024-03-04-09.37.38

2、然后再下面的不安全内容后面的下拉框中选择允许

2024-03-04-09.37.47

3、在地址栏输入: chrome://net-internals/#hsts

截屏2024-03-04 09.53.37

4、找到底部Delete domain security policies一栏,输入想处理的域名,点击delete。

截屏2024-03-04 09.53.51

5、搞定了,再次访问http域名不再自动跳转https了。

pytorch学习之路

pytorch包含以下组件

torch: 一个像numpy 向量库

torch.autograd 自动微分库,支持所有微分向量运算

torch.jit 一个编译栈,从pytorch代码来创建可序列化、可以优化的模型

torch.nn 神经元网络库,设计之初保持了最大化灵活性,深度继承了求导库

torch.multiprocessing 多处理,在torch 向量访问处理器时使用了魔术化的内存共享。在数据加载和疯狂的训练模型的时候非常有用。

torch。utils 数据记在和其他功能

通常pytorch用作两个方面:

1、替代numpy来使用gpu

2、提供最大灵活性和速度的深度学习研究平台

动态神经元网络:使用磁带记录仪回放这种独特的方法来创建神经元网络。

pytorch使用反向模式自动微分技术,让我们经常零成本的改变网络行为;我们的灵感来自于这篇文章的几个研究报告。

这个技术不是pytorch独有的。这是目前为止最快速的实现。你可以为你疯狂的研究获得最快的速度和灵活性。

pytorch不是一个整体绑定到 c++框架的。他是深度集成到python中。你可以像使用numpy scipy scikit-learn一样自然的使用它。你可以写你自己全新神经元网络,使用你喜欢的库和包。我们的目标是不重复造轮子。

必要的经验

pytorch设计为只觉得、线性的思考、简单易用。当你执行一行代码,他被执行了。在现实世界中他不是异步视图。当你调试一行代码或者接收到错误信息和堆栈跟踪,理解他们是很直观的。堆栈调用之初你的代码在哪里被定义。我们希望你不要因为坏的堆栈调用、异步执行和不透明的执行引擎而花费时间调试你的代码。

快速和学习

pytorch有最小的框架成本。我们继承了加速库像intel MKL 和nvidia(cuDNN nccl)去最大化速度。最核心的,他核心的cpu gpu向量和神经元网络是成熟的并且经过多年测试的。

因此,pytorch是非常快的,无论执行小规模还是大规模的模型。

无痛扩展

安装

二进制,命令行通过conda 或者pip 安装 参照: https://pytorch.org/get-started/locally/

源代码安装

需要满足:python 3.8+;编译器全面支持C++17,像clang或者gcc(gcc 9.4.0或者最新)

强烈推荐安装conda环境。

如果想要编译cuda支持,从我们的支持矩阵里选择一个我们支持的版本select a supported version of CUDA from our support matrix。然后安装nvidia cuda ,nvidia cuDNN v8.5 + ,CUDA兼容的编译器。

如果要禁用CUDA,设置环境变量 USE_CUDA=0 .其它有用的环境变量在setup.py中。

安装依赖

Get the PyTorch Source

1
2
3
4
5
git clone --recursive https://github.com/pytorch/pytorch
cd pytorch
# if you are updating an existing checkout
git submodule sync
git submodule update --init --recursive

通用

1
2
3
conda install cmake ninja
# Run this command from the PyTorch directory after cloning the source code using the “Get the PyTorch Source“ section below
pip install -r requirements.txt

On Linux

1
2
3
4
5
6
7
conda install intel::mkl-static intel::mkl-include
# CUDA only: Add LAPACK support for the GPU if needed
conda install -c pytorch magma-cuda110 # or the magma-cuda* that matches your CUDA version from https://anaconda.org/pytorch/repo

# (optional) If using torch.compile with inductor/triton, install the matching version of triton
# Run from the pytorch directory after cloning
make triton

On MacOS

1
2
3
4
# Add this package on intel x86 processor machines only
conda install intel::mkl-static intel::mkl-include
# Add these packages if torch.distributed is needed
conda install pkg-config libuv

On Windows

1
2
3
4
conda install intel::mkl-static intel::mkl-include
# Add these packages if torch.distributed is needed.
# Distributed package support on Windows is a prototype feature and is subject to changes.
conda install -c conda-forge libuv=1.39

Install PyTorch

On macOS

1
python3 setup.py develop

20240219-sd模型

常见的模型有以下几类:

  • Base 模型: 就是最常见的 AI 文生图模型,输入一段文字指令,AI 会根据你的指令生成图片。较常见的有 Stable Diffusion v1.5,Stable Diffusion XL 等。
  • LoRA 模型: 你可以简单将其理解为一种滤镜模型。通过它能生成更特殊的图片,比如在 Workflow 中加载线稿 LoRA 模型,就可以生成线稿风格的图片。甚至还有一些 LoRA 模型能让 AI 生成特定样貌的人物,比如一些名人的 LoRA,加载这种模型后,就可以生成特定的名人。但需要注意,这种模型没法脱离 Base 模型使用,这就意味着你需要先下载 Base 模型,然后再下载对应的 LoRA 模型才行。
  • Inpainting 模型: 如果你想要修改某张图片,比如去掉某个物体,或者修复某个物体,那么你就需要使用 Inpainting 模型。这种模型输入一张图片,然后输入一个遮罩,AI 会根据遮罩修复图片。这个模型可以单独使用。
  • Upscale 模型: 如果你想将一张图片放大,那么你就需要使用 Upscale 模型。这种模型输入一张图片,然后输入一个倍数,AI 会根据倍数放大图片。这个模型也可以单独使用。
  • ControlNet 模型: 如果你想控制图片中某个物体出现的位置,或者人物的站姿,那么你就需要使用 ControlNet 模型。但需要注意这个模型和 LoRA 类似,不能脱离 Base 模型使用。
  • 图生视频模型: 这种模型输入一段文字指令,AI 会根据你的指令将图片转为视频。

AI 生图模型需要大量的计算资源,如果你的电脑配置不够,那么即使你下载了模型,也可能无法运行,或者运行起来会很慢,生成一张图片可能要 30 ~ 40 秒。按照前面提到的类型,不同类型的模型对电脑配置的要求也不同。

对配置影响最大的应该是 Base、Inpainting 还有图生视频模型。目前,市面上没有一个官方统一的 AI 模型运行配置要求,但根据我的经验:

  • Base & Inpainting 模型:
    • 如果你是 Windows 电脑,显存小于 6G,或者是 M 系列的 MacBook 内存小于 16G,我会推荐你使用 Stable Diffusion v1.5 或者基于此模型微调后的模型。
    • 如果你的电脑配置比较好,显存大于 8G,或者 M 系列的 MacBook 内存大于 16G,我则会推荐你使用 Stable Diffusion XL 或者基于此模型微调后的模型。
  • 如果你想使用图生视频模型,或者图片生视频模型,那么你的显存最好大于 16G,且最好使用 Nvidia 的显卡。不然基本很难将模型运行起来。

如果你是初学者,我会推荐你使用 DreamShaper 这个模型,它有基于 SDv1.5 的 Base 模型,也有基于 SDXL 的版本。同时配套也很不错。有 Inpainting 模型,也有 LCM 模型等。而且生成的效果也很不错。

DreamShaper 系列模型

如果只推荐一个模型的话,我会推荐 DreamShaper,首先它的成像质量不差,整体质感有点像 Midjourney。

其次,它的 SD v1.5 版本模型大小也不是很大,甚至比基础模型还要小一点点。

最后,也是我最喜欢的一点,它的配套模型比较丰富。有 LCM、Inpainting 模型,还有基于 SDXL Turbo 微调的模型。 对于电脑配置较差的朋友,我推荐你们使用 SD v1.5 的模型,即它的 V8.0 版本。

DreamShaper XL

https://civitai.com/models/112902/dreamshaper-xl

Realistic 风格模型

如果你主要是以生成人像为主,那么 Realistic 风格模型是一个不错的选择。他们生成的人像质量比较高,且看起来更加真实。以下是两个基于 SD v1.5 微调的模型。

https://civitai.com/models/43331/majicmix-realistic

一般你会看到两种后缀的模型:

  • safetensors:这种模型一般用的是 numpy 格式保存,这就意味着它只保存了张量数据,没有任何代码,加载这类文件会更安全和更快。
  • ckpt:这种文件是序列化过的,这意味着它们可能会包含一些恶意代码,加载这类模型就可能会带来安全风险。

所以在上述的案例中,我会推荐你下载 safetensors 格式的模型。

另外,我建议你在搜索模型的时候,需要看看是不是该模型的官方发的,一般我会看模型的下载数,一般下载数越多的模型,越有可能是官方发的。

参照 diffusers api

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
conda create -n dfu python=3.10.13
conda activate dfu


pip install diffusers --upgrade -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

pip install transformers==4.27.0 accelerate==0.12.0 invisible_watermark -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

conda install jupyter


pip install diffusers transformers scipy ftfy

pip install git+https://github.com/huggingface/accelerate

1
2
3
4
5
6
7
#读取diffuers库
from diffusers import StableDiffusionPipeline

#初始化SD模型,加载预训练权重
pipe = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
#使用GPU加速
pipe.to("mps")
1
2
3
4
5
6
7
8
9
10
11
#接下来,我们就可以运行pipeline了
prompt = "a photograph of an astronaut riding a horse"
# Number of denoising steps
steps = 25

# Scale for classifier-free guidance
CFG = 7.5
image = pipe(prompt, guidance_scale=CFG, height=512, width=768, num_inference_steps=steps).images[0]

# 由于没有固定seed,每次运行代码,我们都会得到一个不同的图片。
display(image)
20240218-whx
1
2
3
4
5
6
7
8
9
prompt = "city future, 8k, exploration, cinematic, realistic, unreal engine, hyper detailed, volumetric light, moody cinematic epic concept art, realistic matte painting, hyper photorealistic"
negative_prompt ="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

result1 = pipe(prompt=prompt,negative_prompt=negative_prompt, guidance_scale=CFG, height=512, width=768, num_inference_steps=steps)
image1 = result1.images[0]

# 由于没有固定seed,每次运行代码,我们都会得到一个不同的图片。
display(image1)
202402181931-001

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