理解 Stable Diffusion UNet 网络

2024-5-26 评论(0) 分类:技术文章 Tags:

前面的学习中,我们把 SD UNet 网络当成黑盒,不太影响对图片生成大致原理的理解,但在继续学 SD 的过程中,发现 ControlNet、T2I-Adapter、IPAdapter 等这些技术,都是在原 SD 网络模型上以各种方式对网络做修改叠加,要理解这些技术,还是得先了解下 SD UNet 网络结构的一些细节,不然看得很费劲。

SD 模型构成

从之前的学习我们知道,Stable Diffusion 模型里包含了三个组件:CLIP、VAE、UNet,这三个组件的参数和大小分布(来源):

组件 参数个数 文件大小 占比
CLIP 123,060,480 492 MB 12%
VAE 83,653,863 335 MB 8%
UNet 859,520,964 3.44 GB 80%
Total 1,066,235,307 4.27 GB 100%

整个生图的核心网络就是 UNet。UNet 最初是用于医学图像分割任务而提出来的,但它的特性展现了在图像其他领域的应用潜力,后续经过扩散模型的改进,很好应用在了图像生成上,所以 Stable Diffusion 的 UNet 实际上在原 UNet 网络架构上做了一些改造。

基础 UNet 网络

我们先来看看原 UNet 网络架构:

1

(更多…)

在复刻黏土风图生成中学习(1) — 模型微调/LoRA 原理/图生图

2024-5-19 评论(0) 分类:技术文章 Tags:

继续学习 Stable Diffusion,这次想以搭建一个实际可用的生图场景 — 黏土风格作为引导,弄清楚整个流程的同时,把过程中遇到的相关概念和原理也做了解,所以这篇是掺和了应用流程和原理的文章。

ComfyUI & 模型

使用 Stable Diffusion 去生成图,有非常多的插件/模型/配置相互搭配组合使用,一般用 WebUIComfyUI 这两个工具,更推荐 ComfyUI,自由串联一个个模块,流程更清楚,网上有很多在自己电脑部署使用 comfyUI 的保姆级教程,比如这个,这里就不多介绍了。

先看 ComfyUI 这个默认的最简单的 workflow:

1

这里面简单的几个元素概念和生图流程,上篇文章都有介绍过:最左边的 Load Checkpoint 是加载 SD 模型,接着用 CLIP 模型编码文本 → 生成隐空间原始噪声图 → 采样器根据文本和噪声图输入→在隐空间里迭代降噪生成隐空间图片→最终用VAE解码图片。

为什么叫模型 checkpoint ?模型在微调训练过程中,会在关键节点保存模型参数的状态,这个保存点被称为 checkpoint,SD 有大量基于基座模型微调训练的模型,包括官方出的,比如 SDv1.5 是从 v1.2 的基础上调整得到的,SDXL Turbo 也是基于 SDXL1.0 基础上训练的,这些模型都被称为 checkpoint,这些 checkpoint 包含了生成图所需要的全部核心组件,包括 VAE、CLIP、UNet 的模型数据,可以直接使用。

那模型文件的后缀为什么是 .safetensors ?早期的模型文件后缀是 .ckpt (checkpoint缩写),一个通过 Python 序列化后的数据,使用时需要对它反序列化,这个反序列化过程也就容易被注入恶意代码,所以后面提出了新型安全的格式 safetensors,只包含张量数据(模型上的参数数据),无需反序列化,安全且速度快,目前模型基本都以这种方式存储。

我们用这个默认 workflow,选个模型,用纯提示词 claymation style, a tower 试试生成黏土风图片:(图上使用了 dreamshaperXL 模型,是在SDXL 的基础上微调的最受欢迎的一个模型)

2

可以看到效果并不是很好,比较生硬。可能加多一些细节提示词、调节下相关参数会好一些,但在图片训练过程中,黏土风格相关的图片数量应该是不多的,训练图片对应的文本描述也比较散,如果固定要这种风格,生图的 prompt 要尽量贴近训练时这类图偏对应的文本,才有可能有好一点的效果,这很难控制,也不保证效果,很难达到我们想要的风格。

(更多…)

Stable Diffusion 图片生成原理简述

2024-5-13 评论(1) 分类:技术文章 Tags:

最近关注和学习 AI 比较多,包括 AIGC 和 LLM 大模型,现在 AI 的原理介绍和入门教程已经非常多了,但还是想自己写一下,主要是遵从费曼学习法,分享是最好的学习,帮助自己整理思路。

AI 图片生成像魔法一样,要完全理解里面的算法细节原理门槛挺高,但如果只是了解基本思路和相关概念,还是比较简单的。Stable Diffusion 涉是当前最流行的 AI 图片生成模型,本文基于 Stable Diffusion 介绍图片生成的基本原理,希望对大家有帮助。

扩散模型

目前市面上文字生成图片基本上都基于 Diffusion 扩散模型,Stable Diffusion / Flux 都是,它最基本的原理是:根据文字指示,把一张随机生成的全是噪点的图片,一步步去掉噪点生成跟文字描述匹配的图片。

具体是怎样做到的?这里可以分步看两个问题:
  1. 生成:怎么从一张随机噪点的图生成一张正常的图
  2. 控制生成:怎么控制这个生成的图跟用户输入的 prompt 文字关联上

1. 生成

先看下第一个问题:从随机噪点图生成一张正常图片。

Denoising UNet

简化看下大概过程:

Denoising UNet 是一种基于 UNet 架构的深度学习模型,专门用于图像去噪任务。

可以粗略地理解为,Denoising UNet 这个模型在训练过程中记录了海量图片的内容(不是精确存储,可以理解为识别提取了图片特征,模糊地记忆图片的关键信息,跟人脑对一个画面的记忆类似)。在使用这个模型时,输入一个随机噪点图,经过模型处理能还原生成一张整张的图片。

如果你是用一张图片拼命训练它,那这个模型训练出来后,最终使用它时生成出来的就是这张图片本身,因为整个模型记录的都是这张图片的信息。如果你用一万张不同的图片训练这个模型,那使用它生成出来的会是这一万张图片内容随机组合的一张图片。

加噪降噪

上面说的这个生成过程,并不是一次性就从随机噪声图变成正常图了,而是一步步降噪的过程。

如下图所示,X0是正常的图片,XT是一个完全随机噪声,从X0到XT还有中间非常多加了不同程度噪点的图,模型学习记录的是怎么对一张有噪点的图逐步去噪点,还原出最终图。

1

Denoisiong UNet 这个模型的能力是,给一张图片,它能预测出来这张图片上是加了多少噪声,这样就可以让这张图减掉这些噪声,得到更清晰一点的图,最终逐步降噪为一张正常图片。

(更多…)