12号,终于在Hugging Face上出现了 Stable Diffusion 3 Medium。没错,正如他所答应的,最强文生图模子真的开源了。而且此次开源不但是以SD2的比力下性能得到了更好的升级,同时也向我们展示了最前沿的DiT技能——MMDiT。
是什么让 SD3 Medium 脱颖而出?
SD3 Medium 是一款拥有 20 亿参数的 SD3 型号,具有一些明显特点:
- 团体质量和传神度: 提供具有杰出细节、色彩和照明的图像,实现传神输出以及机动风格的高质量输出。通过 16 通道 VAE 等创新技能,乐成办理了手部和面部传神度等其他模子的常见题目。
- 明确提示: 可明确涉及空间推理、构图元素、动作和风格的冗长而复杂的提示。通过使用全部三种文本编码器或其组合,用户可以在性能与服从之间举行权衡。
- 排版: 使用我们的扩散变动器架构,实现亘古未有的文本质量,淘汰拼写、字间距、字母外形和间距错误。
- 节省资源: 由于 VRAM 占用较少,因此非常得当在标准消耗 GPU 上运行,而不会低沉性能。
- 微调: 可以大概从小型数据会合罗致玄妙的细节,非常得当定制。
MMDiT
这一架构采取了独立的权重聚集来处理惩罚图像和语言表现,这意味着对于文本和图像两种差别的输入模态,MMDiT 分别使用差别的权重参数来举行编码和处理惩罚,以此可以大概更好地捕捉每种模态的特性和信息。
在 MMDiT 架构中,文本和图像的表现分别通过预训练模子举行编码。具体地说,MMDiT 采取了三种差别的文本嵌入器(两个 CLIP 模子和 T5 模子),以及一个改进的自动编码模子来编码图像 token。这些编码器可以大概将文本和图像输入转换为模子可以明确和处理惩罚的格式,为后续的图像天生过程提供了底子。
代码实现
这里我们参考 https://github.com/lucidrains/mmdit.git (
在 Pytorch 中实现《Stable Diffusion 3》中提出的单层 MMDiT)- import torch
- from mmdit import MMDiTBlock
- # define mm dit block
- block = MMDiTBlock(
- dim_joint_attn = 512,
- dim_cond = 256,
- dim_text = 768,
- dim_image = 512,
- qk_rmsnorm = True
- )
- # mock inputs
- time_cond = torch.randn(1, 256)
- text_tokens = torch.randn(1, 512, 768)
- text_mask = torch.ones((1, 512)).bool()
- image_tokens = torch.randn(1, 1024, 512)
- # single block forward
- text_tokens_next, image_tokens_next = block(
- time_cond = time_cond,
- text_tokens = text_tokens,
- text_mask = text_mask,
- image_tokens = image_tokens
- )
复制代码 广义的版本如下- import torch
- from mmdit.mmdit_generalized_pytorch import MMDiT
- mmdit = MMDiT(
- depth = 2,
- dim_modalities = (768, 512, 384),
- dim_joint_attn = 512,
- dim_cond = 256,
- qk_rmsnorm = True
- )
- # mock inputs
- time_cond = torch.randn(1, 256)
- text_tokens = torch.randn(1, 512, 768)
- text_mask = torch.ones((1, 512)).bool()
- video_tokens = torch.randn(1, 1024, 512)
- audio_tokens = torch.randn(1, 256, 384)
- # forward
- text_tokens, video_tokens, audio_tokens = mmdit(
- modality_tokens = (text_tokens, video_tokens, audio_tokens),
- modality_masks = (text_mask, None, None),
- time_cond = time_cond,
- )
复制代码 在模子布局上,MMDiT 架构创建在 Diffusion Transformer(DiT)的底子上。由于文本和图像的表现在概念上有所差别,MMDiT 使用了两组独立的权重参数来处理惩罚这两种模态。如许一来,模子可以大概在文本和图像的表现空间中分别举行操纵,同时又可以大概思量到相互之间的关联关系,从而实现更好的信息通报和整合。
论文:https://arxiv.org/pdf/2403.03206
性能
我们将 Stable Diffusion 3 的输出图像与其他各种开放模子(包罗 SDXL、SDXL Turbo、Stable Cascade、Playground v2.5 和 Pixart-α)以及封闭源代码体系(如 DALL-E 3、Midjourney v6 和 Ideogram v1)举行了比力,以便根据人类反馈来评估性能。在这些测试中,人类评估员从每个模子中得到输出示例,并要求他们根据模子输出在多大水平上紧跟所给提示的上下文(“紧跟提示”)、在多大水平上根据提示渲染文本(“排版”)以及哪幅图像具有更高的美学质量(“视觉美学”)来选择最佳结果。
根据测试结果,我们发现 Stable Diffusion 3 在上述全部方面都与现在开始辈的文本到图像天生体系相称,以致更胜一筹。
在消耗级硬件上举行的早期未优化推理测试中,我们最大的 8B 参数 SD3 模子得当 RTX 4090 的 24GB VRAM,使用 50 个采样步调天生分辨率为 1024x1024 的图像须要 34 秒。别的,在最初发布时,Stable Diffusion 3 将有多种变体,从 800m 到 8B 参数模子不等,以进一步消除硬件停滞。
机动的文本编码器
Stable Diffusion 3 不但留意了图像天生的质量,还专注于与文本的对齐和划一性。其改进的 Prompt Following 功能使得模子可以大概更好地明确输入文本并根据其创作图像,而不但仅是简单地产生图像。这种机动性使 Stable Diffusion 3 可以大概根据差别的输入文本天生多样化的图像,满足差别主题和需求。
Stable Diffusion 3 采取了改进的 Rectified Flow(RF)方法,通过线性轨迹将数据和噪声相毗连,使得推断路径更直,从而在少量步调内举行采样。同时,Stable Diffusion 3还引入了一种新的轨迹采样调治,将更多的权重分配给轨迹的中心部分,从而改进了猜测使命的难度。这种创新的方法改善了模子的性能,并在文本到图像天生使命中取得了更好的结果。
在文本到图像天生范畴,Stable Diffusion 3 的问世标志着技能的庞大进步。通过 MMDiT 架构的创新、Rectified Flow 的优化以及对硬件装备和模子规模的机动调解,Stable Diffusion 3 在视觉美感、文本遵照和排版等方面体现出色,逾越了当前的文本到图像天生体系。
通过移除用于推理的内存麋集型 4.7B 参数 T5 文本编码器,SD3 的内存需求可明显低沉,而性能丧失却很小。如上图 "性能 "部分所示,移除该文本编码器不会影响视觉美感(不使用 T5 时的胜率为 50%),只会略微低沉文本粘着率(胜率为 46%)。不外,我们发起在天生书面文本时到场 T5,以充实发挥 SD3 的性能,由于我们观察到,假如不到场 T5,天生排版的性能降落幅度更大(胜率为 38%),如下图所示:
源文件
文件布局- ├── comfy_example_workflows/
- │ ├── sd3_medium_example_workflow_basic.json
- │ ├── sd3_medium_example_workflow_multi_prompt.json
- │ └── sd3_medium_example_workflow_upscaling.json
- │
- ├── text_encoders/
- │ ├── README.md
- │ ├── clip_g.safetensors
- │ ├── clip_l.safetensors
- │ ├── t5xxl_fp16.safetensors
- │ └── t5xxl_fp8_e4m3fn.safetensors
- │
- ├── LICENSE
- ├── sd3_medium.safetensors
- ├── sd3_medium_incl_clips.safetensors
- ├── sd3_medium_incl_clips_t5xxlfp8.safetensors
- └── sd3_medium_incl_clips_t5xxlfp16.safetensors
复制代码 为了方便用户,我们为 SD3 Medium 型号预备了三种包装情势,每种都配备了雷同的 MMDiT 和 VAE 配重。
- sd3_medium.safetensors 包罗 MMDiT 和 VAE 配重块,但不包罗任何文本编码器。
- sd3_medium_incl_clips_t5xxlfp16.safetensors 包罗全部须要的权重,包罗 fp16 版本的 T5XXL 文本编码器。
-sd3_medium_incl_clips_t5xxlfp8.safetensors 包罗全部须要的权重,包罗 fp8 版本的 T5XXL 文本编码器,在质量和资源需求之间取得了均衡。
- sd3_medium_incl_clips.safetensors 包罗除 T5XXL 文本编码器之外的全部须要权重。它须要的资源少少,但假如没有 T5XXL 文本编码器,模子的性能会有所差别。
- text_encoders 文件夹包罗三个文本编码器及其原始模子卡链接,以方便用户使用。text_encoders 文件夹中的全部组件(以及嵌入到其他软件包中的相应组件)均受其各自原始答应证的束缚。
- example_workfows 文件夹包罗 comfy 工作流程示例。
Diffusers
- import torch
- from diffusers import StableDiffusion3Pipeline
- pipe = StableDiffusion3Pipeline.from_pretrained("stabilityai/stable-diffusion-3-medium-diffusers", torch_dtype=torch.float16)
- pipe = pipe.to("cuda")
- image = pipe(
- "A cat holding a sign that says hello world",
- negative_prompt="",
- num_inference_steps=28,
- guidance_scale=7.0,
- ).images[0]
- image
复制代码 官方保举
ComfyUI: https://github.com/comfyanonymous/ComfyUI
StableSwarmUI: https://github.com/Stability-AI/StableSwarmUI
Tech report: https://stability.ai/news/stable-diffusion-3-research-paper
Demo: https://huggingface.co/spaces/stabilityai/stable-diffusion-3-medium
Diffusers support: https://huggingface.co/stabilityai/stable-diffusion-3-medium-diffusers
|