Stable Diffusion XL(SDXL)核心基础知识

这篇具有很好参考价值的文章主要介绍了Stable Diffusion XL(SDXL)核心基础知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


一、Stable Diffusion XL基本概念

Stable Diffusion XL 或 SDXL 是最新的图像生成模型,与以前的 SD 模型(包括 SD 2.1)相比,它专为更逼真的输出而定制,具有更详细的图像和构图。与Stable DiffusionV1-v2相比,Stable Diffusion XL主要做了如下的优化:

  1. 对Stable Diffusion原先的U-Net,VAE,CLIP Text Encoder三大件都做了改进:
    • U-Net 增加 Transformer Blocks (自注意力 + 交叉注意力) 来增强特征提取和融合能力;
    • VAE 增加条件变分自编码器来提升潜在空间的表达能力;
    • CLIP Text Encoder 增加两个大小不同的编码器来提升文本理解和匹配能力。
  2. 增加一个单独的基于Latent的Refiner模型,来提升图像的精细化程度;
  3. 设计了很多训练Tricks,包括图像尺寸条件化策略,图像裁剪参数条件化以及多尺度训练等。

二、SDXL模型架构上的优化

(一)SDXL的整体架构

Stable Diffusion XL是一个二阶段的级联扩散模型,包括Base模型和Refiner模型:

  • Base模型:主要工作和Stable Diffusion一致,具备文生图,图生图,图像inpainting等能力。(由U-Net,VAE,CLIP Text Encoder(两个)三个模块组成)
  • Refiner模型:对Base模型生成的图像Latent特征进行精细化,其本质上是在做图生图的工作。(由U-Net,VAE,CLIP Text Encoder(一个)三个模块组成)
    Stable Diffusion XL(SDXL)核心基础知识,AIGC阅读学习,stable diffusion,深度学习,AIGC,人工智能

SDXL和之前的版本也是基于latent diffusion架构,对于latent diffusion,首先会采用一个auto encoder模型来图像压缩为latent,然后扩散模型用来生成latent,生成的latent可以通过auto encoder的decoder来重建出图像。

(二)VAE

SDXL的autoencoder依然采用KL-f8,但是并没有采用之前的autoencoder,而是基于同样的架构采用了更大的batch size(256 vs 9)重新训练,同时对模型的参数采用了EMA(指数移动平均),从而改善生成图片的局部和高频细节。重新训练的VAE模型相比之前的模型,其重建性能有一定的提升:
Stable Diffusion XL(SDXL)核心基础知识,AIGC阅读学习,stable diffusion,深度学习,AIGC,人工智能上表中的三个VAE模型的模型结构完全一样:

  • SD-VAE 2.x在SD-VAE 1.x的基础上重新微调了decoder部分,但是encoder权重是相同的,所以两者的latent分布是一样的,两个VAE模型是都可以用在SD 1.x和SD 2.x上的;
  • SDXL-VAE是完全重新训练的,它的latent分布发生了改变,不可以将SDXL-VAE应用在SD 1.x和SD 2.x上。在将latent送入扩散模型之前,我们要对latent进行缩放来使得latent的标准差尽量为1,由于权重发生了改变,所以SDXL-VAE的缩放系数也和之前不同。

(三)U-Net

SDXL相比之前的版本,Unet的变化主要有如下两点:

  1. Unet 结构发生了改变,从之前的4stage变成了3stage:
    如图所示,相比之前的SD,SDXL的第一个stage采用的是普通的DownBlock2D,而不是采用基于attention的CrossAttnDownBlock2D;此外,SDXL只用了3个stage,只进行了两次2x下采样,而之前的SD使用4个stage,包含3个2x下采样。SDXL的网络宽度(channels)相比之前的版本并没有改变,3个stage的特征channels分别是320、640和1280。
    Stable Diffusion XL(SDXL)核心基础知识,AIGC阅读学习,stable diffusion,深度学习,AIGC,人工智能

  2. 采用了更大的UNet,SDXL的U-Net模型(Base部分)参数量相比SD模型增加了3倍左右:
    SDXL参数量的增加主要是使用了更多的transformer blocks,在之前的版本,每个包含attention的block只使用一个transformer block(self-attention -> cross-attention -> ffn),但是SDXL中stage2和stage3的两个CrossAttnDownBlock2D模块中的transformer block数量分别设置为2和10,并且中间的MidBlock2DCrossAttn的transformer blocks数量也设置为10。

(四)text encoder

  1. SD 1.x采用的text encoder是123M的OpenAI CLIP ViT-L/14,SD 2.x将text encoder升级为354M的OpenCLIP ViT-H/14,SDXL不仅采用了更大的OpenCLIP ViT-bigG(参数量为694M),而且同时也用了OpenAI CLIP ViT-L/14,分别提取两个text encoder的倒数第二层特征,其中OpenCLIP ViT-bigG的特征维度为1280,而CLIP ViT-L/14的特征维度是768,两个特征concat在一起总的特征维度大小是2048,这也就是SDXL的context dim;
  2. 此外,SDXL还提取了OpenCLIP ViT-bigG的 pooled text embedding(用于CLIP对比学习所使用的特征),将其映射到time embedding的维度并与之相加。

(五)refiner model

  1. refiner model是和base model采用同样VAE的一个latent diffusion model,但是它只在使用较低的noise level进行训练(只在前200 timesteps上)。在推理时,我们只使用refiner model的图生图能力。对于一个prompt,我们首先用base model生成latent,然后我们给这个latent加一定的噪音(采用扩散过程),并使用refiner model进行去噪。经过这样一个重新加噪再去噪的过程,图像的局部细节会有一定的提升;
  2. refiner model和base model在结构上有一定的不同,其UNet的结构如下图所示,refiner model采用4个stage,第一个stage采用没有attention的DownBlock2D,网络的特征维度采用384,而base model是320。另外,refiner model的attention模块中transformer block数量均设置为4。refiner model的参数量为2.3B,略小于base model。refiner model的text encoder只使用了OpenCLIP ViT-bigG,也是提取倒数第二层特征以及pooled text embed。
    Stable Diffusion XL(SDXL)核心基础知识,AIGC阅读学习,stable diffusion,深度学习,AIGC,人工智能

三、SDXL在训练上的技巧

(一)图像尺寸条件化

Stable Diffusion 1.x/2.x存在的数据集利用率问题:

  • Stable Diffusion 1.x/2.x 的训练过程主要分成两个阶段:先在256x256的图像尺寸上进行预训练,然后在512x512的图像尺寸上继续训练;
  • 这两个阶段的训练过程都要对图像最小尺寸进行约束。第一阶段中,会将尺寸小于256x256的图像舍弃;在第二阶段,会将尺寸小于512x512的图像舍弃。这样会导致训练数据中的大量数据被丢弃,数据利用率不高,而且很可能导致模型性能和泛化性的降低。

SDXL的解决方案:

  • 核心思想:将图像的原始尺寸(width和height)作为条件嵌入UNet模型中
  • 嵌入方式:height和width分别用傅里叶特征编码,然后将特征concat后加在Time Embedding上;
  • 这相当于让模型学到了图像分辨率参数,在训练过程中,我们可以不过滤数据直接resize图像,在推理时,我们只需要送入目标分辨率而保证生成的图像质量。
    Stable Diffusion XL(SDXL)核心基础知识,AIGC阅读学习,stable diffusion,深度学习,AIGC,人工智能

(二)图像裁剪参数条件

Stable Diffusion 1.x/2.x存在的图像裁剪问题:

  • 目前文生图模型预训练往往采用固定图像尺寸,这就需要对原始图像进行预处理,这个处理流程一般是先将图像的最短边resize到目标尺寸,然后沿着图像的最长边进行裁剪;
  • 训练中对图像裁剪导致的图像特征丢失,可能会导致模型在图像生成阶段出现不符合训练数据分布的特征,比如图像出现缺失等问题。

SDXL的解决方案:图像裁剪参数条件化策略

  • 主要思想:将训练过程中裁剪的左上定点坐标作为额外的条件注入到UNet中
  • 注入方式:通过傅立叶编码并加在time embedding上
  • 在推理时,我们只需要将这个坐标设置为(0, 0)就可以得到物体居中的图像(此时图像相当于没有裁剪)。

(三)多尺度(宽高比)图片训练

现实数据集中包含不同宽高比的图像,然而文生图模型输出一般都是512x512或者1024x1024,作者认为这并不是一个好的结果,因为不同宽高比的图像有广泛的应用场景,比如(16:9)。基于以上原因,作为对模型进行了多尺度图像微调。

SDXL的解决方案:多尺度训练策略

  • 多尺度训练策略:借鉴NovelAI所提出的方案,将数据集中图像按照不同的长宽比划分到不同的buckets上(按照最近邻原则);
  • 在训练过程中,每个step可以在不同的buckets之间切换,每个batch的数据都是从相同的bucket中采样得到;
  • SDXL也将bucket size即target size作为条件加入UNet中,这个条件注入方式和之前图像原始尺寸条件注入一样。

参考:
Stable Diffusion XL(SDXL)原理详解
深入浅出完整解析Stable Diffusion XL(SDXL)核心基础知识
文生图模型之SDXL文章来源地址https://www.toymoban.com/news/detail-789486.html

到了这里,关于Stable Diffusion XL(SDXL)核心基础知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 实时AI绘画模型SDXL Turbo核心基础知识详解 | 【算法兵器谱】

    Rocky Ding 公众号:WeThinkIn 【算法兵器谱】栏目专注分享AI行业中的前沿/经典/必备的模型论文,并对具备划时代意义的模型论文进行全方位系统的解析。也欢迎大家提出宝贵的优化建议,一起交流学习💪 大家好,我是Rocky。 如果说2022年,Stable Diffusion横空出世,成为AI行业从传

    2024年01月16日
    浏览(52)
  • 新一代图像合成模型:Stable Diffusion XL(SDXL)上线!

    几个使用Stable Diffusion XL 1.0生成的图像示例。 新的SDXL 1.0发布允许在本地计算机上运行的高分辨率人工智能图像合成。 周三,Stability AI发布了其下一代开源权重人工智能图像合成模型Stable Diffusion XL 1.0(SDXL)。它可以根据文本描述生成新颖的图像,并生成比之前版本的Stable

    2024年02月11日
    浏览(46)
  • AIGC内容分享(二十):「AI视频生成」技术核心基础知识和模型应用

    目录 何为AI视频? 一、技术发展概况 二、代表模型及应用​​​​​​​ 三、仍存在许多技术难点 「 AI 视频」 通常指的是由人工智能(AI)技术生成或处理的视频。这可能包括使用深度学习、计算机视觉和其他相关技术来改善视频的质量、内容或生成全新的视频内容。一

    2024年01月18日
    浏览(52)
  • AIGC内容分享(五十三):AIGC|深入浅出一个完整的视频生成系统「VGen」核心基础知识

    目录 一、VGen整体架构 二、VGen核心基础内容 三、快速上手使用VGen进行视频生成 四、VGen与SVD的比较 「VGen」 是一个基于扩散模型的视频生成系统,提供以视频生成扩散模型为中心的强大代码库,具有先进的视频生成模型。VGen的整体架构主要围绕三个关键领域: 基本模型、创

    2024年01月21日
    浏览(63)
  • Stable Diffusion扩散模型推导公式的基础知识

    A 和 B 是两个独立事件: ⇒ Rightarrow ⇒ P ( A ∣ B ) = P ( A ) P(A|B)=P(A) P ( A ∣ B ) = P ( A ) , P ( B ∣ A ) = P ( B ) P(B|A)=P(B) P ( B ∣ A ) = P ( B ) , ⇒ Rightarrow ⇒ P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C ) P(A,B|C)=P(A|C)P(B|C) P ( A , B ∣ C ) = P ( A ∣ C ) P ( B ∣ C ) 贝叶斯公式: P ( A ∣ B ) = P ( B ∣

    2024年04月10日
    浏览(56)
  • AIGC系列之:升级版的Stable Diffusion之SDXL介绍

    目录 AIGC工具对比 DALL-E MidJourney Stable Diffusion 相关资料 SDXL介绍 SDXL生图效果 SDXL训练LoRA流程         在目前的三大新兴文本转图像模型中,Stable Diffusion诞生得最晚,但由于拥有发展良好的开源社区,它的用户关注度和应用广度都超越Midjourney和DALL-E。         2021 年

    2024年02月19日
    浏览(38)
  • YOLOv5基础知识入门(2)— YOLOv5核心基础知识讲解

    前言: Hello大家好,我是小哥谈。 YOLOV4出现之后不久,YOLOv5横空出世。YOLOv5在YOLOv4算法的基础上做了进一步的改进,使检测性能得到更进一步的提升。YOLOv5算法作为目前工业界使用的最普遍的检测算法,存在着很多可以学习的地方。本文将对YOLOv5检测算法的核心基础知识进行

    2024年02月14日
    浏览(50)
  • CSS 基础拾遗(核心知识、常见需求)

    本篇文章围绕了 CSS 的核心知识点和项目中常见的需求来展开。虽然行文偏长,但较基础,适合初级中级前端阅读,阅读的时候请适当跳过已经掌握的部分。 这篇文章断断续续写了比较久,也参考了许多优秀的文章,但或许文章里还是存在不好或不对的地方,请多多指教,可

    2023年04月21日
    浏览(77)
  • JavaSE核心基础-循环-知识点

    1.循环概念 循环是在满足条件的情况下,反复的做同一件事。 Java语言中的循环语句有三种,分别是for语句、while语句和do-while语句。程序中需要循环处理时,程序员要根据实际问题,选择适当的循环语句。解决循环问题时一定要找到循环条件和循环操作。 2.for循环语句格式

    2024年02月22日
    浏览(40)
  • MyBatis基础知识和快速入门、MyBatis核心配置文件讲解

    什么是Mybatis MyBatis 是一个优秀的基于java的 持久层框架 ,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。 mybatis通过xml或注解的方式将要执行的各种 statement配置起来,并通过java对象和statement中

    2024年02月04日
    浏览(101)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包