概要
stable diffusion xl在stable diffusion1.x到2.x的基础上增加了一个基于扩散模型的refiner层,用来提升图像生成的精细化程度;增加了训练tricks,包括图像尺寸条件化策略、图像裁剪条件化策略等;在xl推出前先推出了xl 1.0,针对性地增加数据集和使用RLHF来优化训练。
整体架构流程
SDXL Base模型由U-Net、VAE以及CLIP Text Encoder(两个)三个模块组成,在FP16精度下Base模型大小6.94G(FP32:13.88G),其中U-Net占5.14G、VAE模型占167M以及两个CLIP Text Encoder一大一小(OpenCLIP ViT-bigG和OpenAI CLIP ViT-L)分别是1.39G和246M。
SDXL Refiner模型同样由U-Net、VAE和CLIP Text Encoder(一个)三个模块组成,在FP16精度下Refiner模型大小6.08G,其中U-Net占4.52G、VAE模型占167M(与Base模型共用)以及CLIP Text Encoder模型(OpenCLIP ViT-bigG)大小1.39G(与Base模型共用)。
Stable Diffusion 1.x的U-Net参数量只有860M,就算是Stable Diffusion 2.x,其参数量也不过865M。但等到Stable Diffusion XL,U-Net模型(Base部分)参数量就增加到2.6B,参数量增加幅度达到了3倍左右。
增加的SDXL_Spatial Transformer_X模块(主要包含Self Attention + Cross Attention + FeedForward)数量占新增参数量的主要部分,SDXL只使用两次下采样和上采样,而之前的SD系列模型都是三次下采样和上采样。并且比起Stable Diffusion 1.x-2.x,Stable Diffusion XL在第一个stage中不再使用Spatial Transformer Blocks,而在第二和第三个stage中大量增加了Spatial Transformer Blocks(分别是2和10),那么这样设计有什么好处呢?
首先,在第一个stage中不使用SDXL_Spatial Transformer_X模块,可以明显减少显存占用和计算量。然后在第二和第三个stage这两个维度较小的feature map上使用数量较多的SDXL_Spatial Transformer_X模块,能在大幅提升模型整体性能(学习能力和表达能力)的同时,优化了计算成本。整个新的SDXL Base U-Net设计思想也让SDXL的Base出图分辨率提升至1024x1024。在出图参数保持一致的情况下,Stable Diffusion XL生成图片的耗时只比Stable Diffusion多了20%-30%之间,这个拥有2.6B参数量的模型已经足够伟大。
Stable Diffusion XL终于也开始使用级联策略,在U-Net(Base)之后,级联Refiner模型,进一步提升生成图像的细节特征与整体质量。
通过级联模型提升生成图片的质量,这可以说这是AIGC时代里的模型融合(ensemble)。和传统深度学习时代的多模型融合策略一样,不管是在学术界、工业界还是竞赛界,都是“行业核武”般的存在。
技术细节
SDXL Refiner模型和SDXL Base模型在结构上的异同:
SDXL Base的Encoder和Decoder结构都采用4个stage,而SDXL Base设计的是3个stage。
SDXL Refiner和SDXL Base一样,在第一个stage中没有使用Attention模块。
在经过第一个卷积后,SDXL Refiner设置初始网络特征维度为384,而SDXL Base 采用的是320。
SDXL Refiner的Attention模块中SDXL_Spatial Transformer结构数量均设置为4。
SDXL Refiner的参数量为2.3B,比起SDXL Base的2.6B参数量略小一些。
其它的内容可以参考https://blog.csdn.net/Rocky6688/article/details/132390855
大佬写的很好。