hi,大家好!2024年7月5日,StabilityAI官方网站更新了Stable Diffusion 3(简称SD3)的许可协议。回顾SD3的发展历程,今年2月,StabilityAI首次发布了SD3的早期预览版,随后在4月开放了SD3的API接口。直到6月,他们才正式推出了SD3 – Medium版本。这次的SD3发布并未如期受到欢迎,反而再各大社区引发了强烈的争议和抵制,主要原因还是在于许可协议存在着争议性条款。这些条款被认为限制了开发者和炼丹师的自由,与开源社区的价值观产生了冲突。

由于社区的广泛抵制,SD3并未像SD1.5、SD2.1和SDXL那样获得大量炼丹师(即AI模型训练师)和开发者的青睐。这导致基于SD3的深度训练和创新开发工作相对匮乏,在一定程度上影响了模型的进一步优化和应用拓展。众所周知,开源的意义并不是拿来就用,而是分享与互惠,产生一个良性循环:你的贡献帮助了别人,别人的改进又反过来让你受益。这种模式在AI这样一个快速发展的领域尤其重要。毕竟,没有哪个单一的公司或个人能够垄断所有的好点子。不过呢,还是不得不说,开源者背后的经济付出和现实条件,在开放与可持续发展之间找到一个平衡点是一件非常难的事。

哈哈,这个具有争议的话题就不继续了,我们先来看看这次License具体更新了啥。

总结一下:新的社区许可证现在免费用于研究、非商业和商业用途。只有当您的年收入超过 100 万美元并且您在商业产品或服务中使用 Stability AI 模型时,您才需要付费的企业许可证。

Stable Diffusion 3 – Medium


这次开源的SD3整体架构和以往的SD1.5、2.1和XL完全不一样,我们先来看看模型的基础信息。

模型尺寸:2B(20亿参数)

模型类型:MMDiT 文本到图像生成模型

模型描述:一个可以根据文本提示生成图像的模型。它是一个多模态扩散变换器(MMDiT) 架构的模型,使用三个固定的、预训练的文本编码器(OpenCLIP-ViT/GCLIP-ViT/LT5-xxl

训练数据集:使用合成数据和经过筛选的公开数据来训练的模型。该模型已在 10 亿张图像上进行了预训练。微调数据包括 3000 万张专注于特定视觉内容和风格的高质量美学图像,以及 300 万张偏好数据图像。

应用支持:ComfyUI和StableSwarmUI

第三方支持:https://www.shakker.ai/

目前能在抱抱脸下载到的模型:

  • sd3_medium.safetensors不包含文本编码器,SD3模型下载后还要单独下载clip文本编码器。
  • sd3_medium_incl_clips.safetensors包含文本编码(ClipL+ClipG),(显存8G-12G)推荐下载这个模型
  • sd3_medium_incl_clips.safetensors包含文本编码(ClipL+ClipG+T5XXL)FP16量化版本,(显存24G)推荐机器性能好的使用。
  • sd3_medium_incl_clips.safetensors包含文本编码(ClipL+ClipG+T5XXL)FP8量化版本,(显存24G)推荐机器性能好的使用。

架构方面:

(a)图是模型整体架构,(b)图是MM-DiT架构

整体架构概览:

  1. 文本输入:
    • 使用了三种不同的文本编码器:CLIP-G/14, CLIP-L/14, 和 T5 XXL
    • 这些编码器的输出被合并成一个4096通道的表示
    • 包含了pooled输出和77+77个token的序列输出
  2. 潜在噪声处理:
    • 另一个输入分支,噪声图像的潜在表示
    • 经过Patching和线性层处理
  3. 主要处理流程:
    • Caption和Noised Latent的输出与位置编码(Positional Embedding)相加
    • 通过一系列MM-DiT-Block处理(从1到d)
    • 每个block还接收额外的时间步序(Timestep)和条件(c)输入
  4. 输出处理:
    • 经过Modulation, Linear, 和Unpatching层
    • 最终生成Output

MM-DiT block的架构概览:

  1. 自注意力机制:
    • 使用SiLU激活函数和线性层处理输入
    • 计算Q, K, V用于注意力机制
    • 应用LayerNorm和一些调制操作
  2. 前馈网络:
    • 在注意力层之后,使用MLP进行进一步处理
    • 同样应用LayerNorm和调制操作
  3. 残差连接:
    • 在整个block中使用多个残差连接,有助于信息流动和梯度传播

这个架构结合了多种先进技术:

  • 多模态输入处理(文本和图像)
  • Transformer架构的变体(MM-DiT blocks)
  • 注意力机制(Q,K,V)
  • 条件生成(通过c和timestep输入)

MM-DiT是”MultiModal Diffusion Transformer”的缩写,是SD3的核心架构,它的厉害之处在于能同时处理文本和图像信息,这种设计让模型能更好地理解文本描述,同时又能准确地将其转化为视觉元素。说实话,这种设计看起来有点像是在向大语言模型(LLM)致敬。毕竟,LLM在处理各种任务时展现出的灵活性让人印象深刻。StabilityAI似乎是想把这种灵活性带入图像生成领域。

SD3-Medium和SDXL的差异在哪?


  • 文本编码器:
    • SD3:使用了三种文本编码器:CLIP-G/14, CLIP-L/14, 和 T5 XXL。
    • SDXL:使用两个CLIP文本编码器(OpenCLIP ViT-bigG和OpenCLIP ViT-Large)。
  • 潜空间维度:
    • SD3:使用4096通道的潜在表示。
    • SDXL:使用1024或2048通道(取决于具体版本)。
  • 主要架构:
    • SD3:引入了新的MM-DiT (MultiModal Diffusion Transformer) 块。
    • SDXL:使用传统的UNet架构。
  • 条件输入:
    • SD3:除了时间步和文本嵌入外,还引入了额外的条件输入c。
    • SDXL:主要使用时间步和文本嵌入作为条件。
  • 注意力机制:
    • SD3:在MM-DiT块中使用了更复杂的注意力机制,包括LayerNorm和调制操作。
    • SDXL:使用标准的交叉注意力机制。
  • 位置编码:
    • SD3:明确地使用了位置编码(Positional Embedding)。
    • SDXL:在UNet中隐式地处理位置信息。
  • 模块化设计:
    • SD3:架构图显示了更模块化的设计,每个组件的功能更加明确。
    • SDXL:虽然也是模块化的,但没有SD3这样清晰的分离。
  • 输出处理:
    • SD3:使用了Modulation、Linear和Unpatching层。
    • SDXL:通常直接从UNet输出到解码器。

T5XXL和Open CLIP的区别

特征T5XXL Text EncoderOpen CLIP
主要用途通用文本处理和理解图像-文本对比学习
模型类型仅文本编码器(Transformer的编码器部分)多模态(文本编码器 + 图像编码器)
预训练任务文本到文本的转换任务图像-文本对比学习
输入仅文本文本和图像
输出文本表示或生成的文本文本和图像的联合嵌入
应用场景NLP任务(如分类、摘要、问答等)图像检索、零样本图像分类、跨模态任务
模型规模非常大(约110亿参数)可变(有不同规模的版本)
灵活性高度灵活,可用于各种NLP任务主要针对图像-文本关联任务
开源性部分开源完全开源

写在最后


总的来说,StabilityAI对于这次协议的更新还是做出了明智的决策,虽然在开源与可持续发展之间找到平衡点是一件很难的事。还有就是SD3的架构变化,使得出图效率更高了,不过对于硬件要求也更高。