Stable_diffusion技术路线总结(SDXL、SD 1.4/1.5、SD 2.0/2.1)

在这里插入图片描述

📖 Stable_diffusion技术路线总结(SDXL、SD 1.4/1.5、SD 2.0/2.1)

1 改进

1 模型结构改进

图片描述

图1 SDXL和较早的Stable Diffusion Model比较

扩散模型提出后,模型结构在不断的改进。先后引入了自注意力机制、upscaling layers和交叉注意力机制。在这样的机制引入到扩散模型中后,文生图的效果得到了提升。
SDXL的作者也尝试对模型结构进行改进。主要把Transformer转移到UNet的低级特征中去。
表格中展示了SDXL省略了浅特征层的Transformer块,而是在深特征层中分别使用了2和10个Transformer块。这样做的好处是:

  • 能够高效的分配计算资源。浅层特征的特征图分辨率较大,一般是512x512或256x256。Transformer的计算成本与特征长度平方成正比,所以SDXL省略了浅特征层(高分辨率特征图)的Transformer块。
  • 深层特征图的分辨率较低,此时需要整合全局上下文信息,例如场景分布、物体之间的关系之类的。而Transformer对捕捉全局依赖关系更加的擅长,所以深层特征提取提引入更多Transformer块有助于提升模型的全局建模能力。
    在文本编码器上,SDXL使用了CLIP ViT-L & OpenCLIP ViT-bigG作为文本编码器,而SD 1.4/1.5用的是CLIP ViT-L,SD 2.0/2.1用的是OpenCLIP ViT-H。

2 对训练数据处理的改进

在这里插入图片描述

图2 预训练数据中的图片高宽分布
在使用Latent Diffusion Models训练时,通常会选择一个固定的最小分辨率来对数据做统一的处理。如果图像分辨率不足,只能丢弃或者插值上采样。但是训练数据中存在大量的低分辨率的图像,采用丢弃策略会导致大量数据不能参与训练。但采用插值长采样时,会导致生成的图像有伪影和模糊。这里SDXL提出一种新的思想来解决这个问题。首先让模型知道原图实际大小,把原始高宽(h_original,w_original)作为额外的条件输入给模型。然后用傅里叶特征对原始高宽进行编码,加入到模型的时间步embedding中。这样处理的好处是使得模型学会分辨“真实的分辨率”。

3 裁剪参数的裁剪条件的改进

在这里插入图片描述

图3 SDXL与之前版本的Stable Diffusion 输出结果的比较

在图像数据Pipeline中,常见的做法是将图像短边缩放到训练目标尺寸,然后从长边进行随机裁剪。这会导致模型学到的分布中,经常出现主体被裁掉的情况,比如猫的耳朵被裁掉、人脸被截断等如图3所示,在生成图像时也会出现此类裁剪问题。和尺寸条件类似,把随机裁剪产生的偏移量 ( C t o p C_{top} Ctop , C l e f t C_{left} Cleft) 也作为模型的额外条件输入。这样,模型不仅得到裁剪后的图像,也获得了“裁剪在何处发生”的信息。具体做法是在当对图像随机裁剪时,记录下裁剪起点( C t o p C_{top} Ctop , C l e f t C_{left} Cleft),将( C t o p C_{top} Ctop , C l e f t C_{left} Cleft)用傅里叶编码,并且拼接到模型的条件向量中。这样的作用是:

  • 防止随机裁剪隐式地成为模型在推断时的先验,使得输出样本不知道会“被裁掉”。
  • 因为裁剪坐标本身也成了条件,可在生成时设置为 (0,0) 让主体居中,从而避免“残缺”现象。
  • 也可以在生成图片时人为地改变 (ctop, cleft) 来模拟“裁剪后的重构”,相当于能控制图像在上下或左右的可见部分。

引用:
Podell, Dustin, et al. “Sdxl: Improving latent diffusion models for high-resolution image synthesis.” arXiv preprint arXiv:2307.01952 (2023).

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值