SDXL:Improving latent diffusion models for high-resolution image synthesis

news2024/11/15 11:19:25

文生图模型之SDXL - 知乎之前的文章 文生图模型之Stable Diffusion已经介绍了比较火的文生图模型Stable Diffusion,近期Stability AI又发布了新的升级版本SDXL。目前SDXL的代码、模型以及技术报告已经全部开源:官方代码:https://github.…https://zhuanlan.zhihu.com/p/642496862GitHub - Stability-AI/generative-models: Generative Models by Stability AIGenerative Models by Stability AI. Contribute to Stability-AI/generative-models development by creating an account on GitHub.https://github.com/Stability-AI/generative-models训练和模型权重都开源了,看了sdxl,平时在做项目时,觉得模型效果不好就加数据时,其实也不一定是好路子,更好的方式应该是分析数据的利用方式以及其中存在的问题作进一步细化的改进。上述的材料作者分析的非常好,看完之后非常清晰。目前sdxl在stable_diffusion_webui的1.5版本也可以尝试,除此之外在diffusers中已经集成了。

1.introduction

3大改进点:1.sdxl的模型参数量增大为2.3B,采用了2个clip text encoder提取文本特征;2.sdxl采用了额外的条件注入来改善训练中的数据处理问题,采用了多尺度的微调;3.sdxl级联了一个细化模型来提升图像的质量(细化模型也可以单独使用,增强细节)。

2.Improving stable diffusion

第一张图是人工评分的,sdxl遥遥领先。 

2.1 architecture & scale

sdxl采用了更大版本的unet,2.6B相比较之前的版本,大了3倍。

        结合上面两张图来解释一下表格中的transformer blocks和channel mult,第一张图是sdxl的unet结构图,第2张是sd中的unet,其中sdxl中第一个stage是普通的downblock2d,而不是采用了crossattndownblock2d,因为sdxl最终是直接生成1024x1024的图,对应的latent为128x128x4,如果第一个stage就是用了attention(包括self-attention),显存和计算量都是很大的,另外sdxl只有3个stage,在表中可以看到sdxl的list有3个值,sd有4个值对应4个模块,3个stage意味着只进行了2次2x下采样,而之前的sd用了4个stage,包含3个2x下采样;sdxl的网络宽度特征通道数相比之前没有变化,3个stage分别是320,640,1280。sdxl主要的参数增加来源于使用了更多的transformer blocks,在sd中每个包括attnetion的block只使用一个transformer block(self-attention->cross-attention->ffn),但在sdxl中的stage 2和stage 3的2个crossattndownblock2d模块中的transformer block分别是2和10,并且中间的midblock2dcrossattn的transformer block也是10,和最后一个stage保持一致,这里对应表中的第2行,sdxl是0,2,10,sd则都是1,第3行1,2,4是320的倍数。

        sdxl的另一个变动是text encoder,sd 1.x采用的是text encoder是123m的openai clip vit-l/14,sd 2.x将text encoder升级为354m的openclip vit-h/14(openclip是laion出的),sdxl采用了参数量694m的openclip vit-bigG和openai clip vit-l/14,这里分别提取2个text encoder的倒数第二层特征,其中openclip vit-bigG特征维度是1280,clip vit-l/14的特征维度是768,concat之后是2048维,这是sdxl的context dim。

经过上述调整,sdxl的unet总参数量是2.6b,sdxl的unet变了,但是扩散模型的设置和原来的sd一样,都采用了1000步的ddpm,noise scheduler也保持不变。

2.2 micro-conditioning

        sdxl的第2个优化点是采用了额外的条件注入来解决训练过程中的数据处理问题,包括了数据利用效率和图像裁剪问题。

第一个问题,sd的训练往往是现在256x256上预训练,然后再在512x512上继续训练,当使用256x256时就要过滤掉那些宽度和高度小于256的图像,在512x512尺寸训练时也只能使用512x512以上的图像,由于需要过滤数据,这就导致真正训练的数据样本减少了,如上图,过滤掉小于256的图,占比达到了39%。一个直接的解决方法是先对原始数据进行超分,但是超分有时候也会出现问题(一般原始图片不清晰时,我们也对训练数据做图像修复),sdxl将原始尺寸width和height作为条件嵌入unet中,这相当于让模型学到了图像分辨率参数,在训练过程中,可以不过滤数据直接resize图像,在推理时,只需要输入目标分辨率来保证生成的图像质量,图像原始尺寸嵌入和timesteps的嵌入一样,现将width和height用傅里叶特征编码进行编码,然后将特征concat在一起加载time embedding上。下图中当得到512x512模型时,当输入低分辨率时图像比较模糊,高分辨率时图像质量提升。

第二个问题,在训练过程中的图像裁剪问题,目前文生图模型预训练时往往采用固定图像尺寸,需要对原始图像进行预处理,一般是将图像的最短边resize到目标尺寸,然后沿着图像的最长边进行裁剪(random crop或者center crop),但是图像裁剪往往会导致图像出来缺失。                

sdxl将训练过程中裁剪的左上顶点坐标作为的条件注入到unet中,通过傅里叶编码加到time embedding上,在推理时只需要将坐标设为0,0就可以得到居中的图像,很好理解,训练时,图像裁剪了的左上角坐标信息,模型学到了,这是不完整的图。

在sdxl训练中,可以将两种条件注入一起使用,只要额外保存原始的width/height以及图像crop时的左上角坐标, sdxl基于这种条件注入在256x256尺寸上训练600000步(bs=2048),然后采用512x512尺寸继续训练200000步,相当于采样了约16亿样本,最后在1024x1024上采用多尺度微调。

2.3 multi-aspect traininng

        经过预训练之后,sdxl采用多尺度进行微调,采用了novelAI的方案,将数据集中图像按照不同长宽比划分到不同的buckets,在训练过程中,每个steps可以在不同的bucket中切换,每个batch的数据都是从相同的bucket中采样得到的,此外sdxl也将bucket size即target size作为条件注入到unet中,和之前一样。

2.4 improved autoencoder

        sdxl和sd一样也是基于latent diffusion架构,对于latent diffusion架构,首先要采用一个autoencoder模型来将图像压缩为latent,然后扩散模型用来生成latent,生成的latent可以通过autoencoder的decoder来重建图像,注意不是在pixel空间做的,实在latent空间做的。sdxl的autoencoder采用的kl,并不是vq,基于同样的架构用了更大bs(256vs9)重新训练,下表中的vae模型结构都是相同的,但是sd-vae 2.x只是在sd-vae 1.x基础上微调了decoder部分,encoder部分是相同的,所以两者的latent分布是一致的,可以通用。但是sdxl是重新训练的,它的latent分布发生了变化,不能混用。将latent送入到扩散模型之前,要对latent进行缩放来使得latent的标准差尽量为1,由于权重发生了变化,所以sdxl的缩放系数和sd不同,sd是0.18215,sdxl是0.13025,此外sdxl-vae推理时用float16会溢出,用float32推理,在webui中选择--no-half-vae。

2.5 putting everything together

sdxl还有一个细化阶段,第一个模型胶sdxl base model,第二个模型是refiner model,在base model基础上继续提升图像的细节,refiner model和base model共用相同的vae,只是refiner model只在较低的noise level上训练(前200个timesteps),在推理时只使用refiner model的图生图能力。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。与base model一样,refiner model也使用了size and crop conditioning,除此之外还增加了图像的艺术评分aesthetic-score作为条件,处理方式和之前一样。refiner model应该没有采用多尺度微调,所以没有引入target size作为条件(refiner model只是用来图生图,它可以直接适应各种尺度)。 

3.future work

人手生成结构还不好;灯光和纹理偏离事实;当生成图像包括多个实体时,属性混淆,属性渗透或者溢出。

single stage:单阶段模型;

text synthesis:使用更好的text encoder,imgen中也说了text encoder很重要;

architecture:使用了一些纯transformer的架构,比如dit,没啥效果;

distillation:减少采样步数;

diffusion model:采用更好的扩散架构

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/907935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

灰鸽子远程控制病毒实验

一、实验目的: 1、掌握经典远控木马的原理 2、掌握“灰鸽子”木马的使用方法 二、预备知识: “灰鸽子”是现在网络上非常流行的一种木马,由两部分组成,一是控制端(主程序),一是服务端&…

第19集丨Vue 江湖 —— ref属性

目录 一、多个单闭合组件标签二、ref属性三、小技巧 一、多个单闭合组件标签 下面案例中&#xff0c;多个单闭合标签<School/> &#xff0c;如果在非脚手架环境下只会显示第一个&#xff0c;但是在脚手架环境中&#xff0c;都会显示出来。 <template><div id&q…

手写 Mybatis-plus 基础架构(工厂模式+ Jdk 动态代理统一生成代理 Mapper)

这里写目录标题 前言温馨提示手把手带你解析 MapperScan 源码手把手带你解析 MapperScan 源码细节剖析工厂模式Jdk 代理手撕脚手架&#xff0c;复刻 BeanDefinitionRegistryPostProcessor手撕 FactoryBean代理 Mapper 在 Spring 源码中的生成流程手撕 MapperProxyFactory手撕增…

(排序) 剑指 Offer 51. 数组中的逆序对 ——【Leetcode每日一题】

❓剑指 Offer 51. 数组中的逆序对 难度&#xff1a;困难 在数组中的两个数字&#xff0c;如果前面一个数字大于后面的数字&#xff0c;则这两个数字组成一个逆序对。输入一个数组&#xff0c;求出这个数组中的逆序对的总数。 示例 1: 输入: [7,5,6,4] 输出: 5 限制&#xff…

测试框架pytest教程(9)自定义命令行-pytest_addoption

pytest_addoption pytest_addoption是pytest插件系统中的一个钩子函数&#xff0c;用于向pytest添加自定义命令行选项。 在pytest中&#xff0c;可以使用命令行选项来控制测试的行为和配置。pytest_addoption钩子函数允许您在运行pytest时添加自定义的命令行选项&#xff0c;…

十、接口(3)

本章概要 接口适配接口字段 初始化接口中的字段 接口嵌套接口和工厂方法模式 接口适配 接口最吸引人的原因之一是相同的接口可以有多个实现。在简单情况下体现在一个方法接受接口作为参数&#xff0c;该接口的实现和传递对象则取决于方法的使用者。 因此&#xff0c;接口的…

Mac发现有的软件不能上网的破解之法

1、Mac上打开终端 terminal &#xff0c;获取 root 权限。 sudo -i 2、编辑 hosts 文件 vim /private/etc/hosts 3、找到被禁止软件的数据请求域名&#xff0c;然后删除相关行&#xff0c;快捷件dd&#xff0c;然后:wq保存退出 比如百度 127.0.0.1 pan.baidu.com ##sec 印…

两个字符串的删除操作——力扣583

class Solution {public:int minDistance(string word1, string word2) {int m = word1.length(), n=word2

内网穿透实战应用-windows搭建WebDAV服务,并内网穿透公网访问【无公网IP】

windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】 文章目录 windows搭建WebDAV服务&#xff0c;并内网穿透公网访问【无公网IP】1. 安装IIS必要WebDav组件2. 客户端测试3. cpolar内网穿透3.1 打开Web-UI管理界面3.2 创建隧道3.3 查看在线隧道列表3.4 浏览器访…

opencv-gpu版本编译(添加java支持,可选)实现硬解码

目录 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取1、准备文件2、复制 NVCUVID 头文件到 cuda 安装目录 include3、安装相关依赖4、 执行cmake5、编译安装6、测试 opencv gpu版本编译&#xff0c;实现硬解码&#xff0c;加速rtsp视频流读取 前置条…

卷积神经网络——上篇【深度学习】【PyTorch】

文章目录 5、卷积神经网络5.1、卷积5.1.1、理论部分5.1.2、代码实现5.1.3、边缘检测 5.2、填充和步幅5.2.1、理论部分5.2.2、代码实现 5.3、多输入多输出通道5.3.1、理论部分5.3.2、代码实现 5.4、池化层 | 汇聚层5.4.1、理论部分5.4.2、代码实现 5、卷积神经网络 5.1、卷积 …

PSP - 基于开源框架 OpenFold 训练的 Finetuning 模型与推理逻辑评估

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132410296 AlphaFold2 以其能够以极高的准确度预测蛋白质结构的能力&#xff0c;彻底改变了结构生物学。然而&#xff0c;AlphaFold2 的实现&…

Linux面试笔试题(5)

79、下列工具中可以直接连接mysql的工具有【c 】。 A.xsellB.plsqlC.navicatD.以上都不是 80、Linux系统最少的挂载点有两个【B 】 A.一个是根挂载点 home&#xff0c;另一个是swap B.一个是根挂载点/&#xff0c;另一个是swap C.一个是根挂载点 boot&#xff0c;另一个是sw…

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测

多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测 目录 多维时序 | MATLAB实现SCNGO-CNN-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.SCNGO-CNN-Attention超前24步多变量回归预测算法。 程序平台&#xff1a;无Attention适…

vue 弹出框 引入另一个vue页面

为什么要这么做,适用于在一个页面逻辑比较多的时候,可以搞多个页面,防止出错 index页面点击解约按钮,弹出框 进入jieyue.vue 核心代码 <el-buttonsize"mini"type"text"icon"el-icon-edit"v-if"scope.row.delFlag 0"click"j…

openpnp - 日常使用的零碎记录

文章目录 openpnp - 日常使用的零碎记录概述抓偏贴偏的问题END openpnp - 日常使用的零碎记录 概述 设备标定已经妥妥的了(随时有需求从头要设备标定, 都是一次通过:) ), 现在主要是使用openpnp正常干活. 使用过程中, 发现了一些问题, 尝试解决并记录. 抓偏贴偏的问题 软件…

探索人工智能 | 模型训练 使用算法和数据对机器学习模型进行参数调整和优化

前言 模型训练是指使用算法和数据对机器学习模型进行参数调整和优化的过程。模型训练一般包含以下步骤&#xff1a;数据收集、数据预处理、模型选择、模型训练、模型评估、超参数调优、模型部署、持续优化。 文章目录 前言数据收集数据预处理模型选择模型训练模型评估超参数调…

基于MATLAB开发AUTOSAR软件应用层Code mapping专题-part 3 Paramter标签页介绍

这页是参数设置的界面,那首先要知道什么是参数,参数就是算法中的系数这些可以更改的变量,接下来就是要学习如何创建参数,如下图: 打开模型资源管理器 选择model Workspace标签,点击上边工具栏里的创建参数的按钮(红色箭头指向的按钮),添加一个新的参数K,值设置为4,数…

摄影预约小程序制作的技术要点与难点解析

随着移动互联网的发展&#xff0c;小程序成为了很多企业和个人推广自己的产品和服务的有效工具。对于摄影师来说&#xff0c;一个功能完善、用户友好的摄影预约小程序可以方便客户预约拍摄时间&#xff0c;提升工作效率。那么&#xff0c;如何制作开发摄影预约小程序呢&#xf…

字幕翻译难吗,如何做好影视字幕翻译?

你是否曾经遇到过观看外国影视作品时&#xff0c;因为字幕翻译不准确而影响观影体验的情况&#xff1f; 专业的字幕翻译员不仅需要具备丰富的知识储备和语言组织能力&#xff0c;还要了解国内外文化风俗的差异。那么&#xff0c;如何才能做好影视字幕翻译呢&#xff1f;北京哪家…