深入浅出解析Stable Diffusion核心网络架构:VAE、U-Net与CLIP Text Encoder

深入浅出解析Stable Diffusion核心网络架构:VAE、U-Net与CLIP Text Encoder
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

最近在学习comfyui框架来使用SD,之前使用Stable Diffusion使用过webUI进行绘制过文生图和图生图。对于其中一些模型参数设置没有深入了解。最近看了一篇zhihu上文章,链接: SD文章链接对于主要vae和unet和clip有更深的了解。

之前的印象,Unet之前在分割模型时候了解过,主要是通过下采样和上采样过程中有连接增加分割时候对之前特征的记忆。SD中的,主要用到的模块和原始还是有很大不同。
Vae模型主要是把图片通过一系列处理变小,类似下采样降低维度,但是里面用到模块还是很多。CLIP之前有看过李沐老师的论文精讲系列视频,主要是文字和图片配对模型,用于多模态。
看懂这篇文章需要一定的基础比如激活函数,卷积这些损失函数,自注意力,上采样之类的前置知识。如果要了解完整架构,可以看吴恩达的深度学习系列视频,台湾大学李宏毅老师讲的也挺好。李沐老师在B站课程也很好。两个链接是李沐老师账号关于CLIP链接: link和transform链接: link的论文精读视频链接。

下文插图主要根据参考资料 SD文章链接

引言

自2022年Stable Diffusion(简称SD)横空出世以来,它凭借开源属性、强大的图像生成能力和繁荣的生态,成为AIGC时代AI绘画领域的“标杆模型”。不同于闭源的Midjourney,SD的模型、代码、训练数据完全开放,让开发者和爱好者能深度探索其底层逻辑。

SD的核心能力源于其精妙的网络架构——VAE(变分自编码器)、U-Net(噪声预测网络)和CLIP Text Encoder(文本编码器) 三者的协同工作。本文将基于Stable Diffusion 1.5版本,从架构设计、核心作用、结构细节到训练逻辑,全方位解析这三大组件,帮助开发者吃透SD的“骨架”,为后续的模型微调、推理优化和应用开发打下基础。

一、Stable Diffusion整体架构初识

SD本质是一个端到端(End-to-End)的生成式扩散模型,核心目标是将文本或图像输入转化为符合需求的高质量图像。其整体架构围绕“Latent隐空间”展开,通过VAE压缩数据、U-Net去噪优化、CLIP关联文本与图像,最终实现高效的图像生成。

1.1 架构概览

SD的整体流程可概括为3步:

  1. 文本编码:CLIP Text Encoder将输入的Prompt(提示词)转化为机器可理解的Text Embeddings(77×768维度特征矩阵);
  2. Latent空间去噪:若为文生图,初始化高斯噪声作为Latent特征;若为图生图,通过VAE Encoder将输入图像压缩为Latent特征。随后U-Net结合Text Embeddings和调度算法(Scheduler),迭代预测并去除噪声,优化Latent特征;
  3. 图像重建:VAE Decoder将优化后的Latent特征重建为像素级图像。

1.2 模型规模与参数分布

在FP16精度下,SD模型总大小约2G(FP32为4G),各核心组件的参数占比如下:

  • U-Net:约860M参数(占比85%),大小1.6G,是噪声预测的核心;
  • VAE:约80M参数(占比8%),大小160M,负责图像压缩与重建;
  • CLIP Text Encoder:约123M参数(占比7%),大小235M,负责文本编码。

下图为SD整体架构的逻辑流(参考原文档可视化图):

在这里插入图片描述

二、核心组件一:VAE(变分自编码器)—— 图像的“压缩与重建引擎”

VAE是SD实现高效计算的关键:它将高分辨率图像压缩到低维Latent隐空间,让U-Net的去噪过程无需在像素级进行,大幅降低显存占用和计算成本。

在这里插入图片描述


在这里插入图片描述

2.1 VAE的核心作用

VAE基于“Encoder-Decoder”架构,在SD中承担两大核心任务:

  1. 图像压缩(Encoder):将输入的像素级图像(如512×512×3)编码为低维Latent特征(如64×64×4),下采样率f=8(512/64=8),特征维度c=4
  2. 图像重建(Decoder):将U-Net优化后的Latent特征,反向重建为像素级图像(如64×64×4 → 512×512×3)。

为什么压缩后还能重建?
图像的全局特征(如人脸的五官布局、猫的肢体结构)具有强规律性,VAE的有损压缩会保留这些核心特征,仅丢失少量细节。实验表明:当重建图像分辨率≥512×512时,压缩损失对视觉效果的影响极小。

2.2 VAE的高阶能力:控制图像色彩与细节

除了基础的压缩重建,切换不同微调版本的VAE模型,可改变生成图像的颜色表现和细节精度(类似“色彩滤镜”)。开源社区常用的VAE模型包括:

  • vae-ft-mse-840000-ema-pruned.ckpt(官方优化版,重建平滑);
  • kl-f8-anime.ckpt/kl-f8-anime2.ckpt(二次元图像优化,色彩更鲜艳);
  • ClearVAE.safetensors(细节更清晰,适合写实场景)。

注意:多数VAE仅调整颜色和细节,不会改变图像构图;仅少数模型(如pastel-waifu-diffusion.vae.pt)可能轻微影响构图。

2.3 VAE的网络结构细节

SD的VAE由Encoder、Decoder两部分组成,核心组件包括GSC、ResNetBlock、SelfAttention等,具体结构如下(参考原文档可视化图):

组件组成作用
GSCGroupNorm + Swish + Conv基础特征提取与归一化
DownsamplePadding + Conv(3×3,步长2)Encoder中降低特征分辨率
UpsampleInterpolate(插值) + ConvDecoder中提升特征分辨率
ResNetBlock2个GSC + 残差连接加深网络,避免梯度消失
SelfAttentionQKV矩阵计算 + Softmax捕捉图像局部与全局特征的关联
  • Encoder流程:输入图像 → 3个DownBlock(ResNetBlock + SelfAttention + Downsample)→ MidBlock(ResNetBlock + SelfAttention)→ 转化为高斯分布 → Latent特征;
  • Decoder流程:Latent特征 → 3个UpBlock(ResNetBlock + SelfAttention + Upsample)→ MidBlock → Conv → 像素级图像。

2.4 VAE的训练逻辑与损失函数

SD的VAE需单独微调,核心目标是“让重建图像尽可能接近原图”,训练采用三大损失函数:

  1. L1回归损失:衡量重建图像与原图的像素级差异,公式:
    L 1 ( y , y ^ ) = ∑ i = 1 n ∣ y i − y ^ i ∣ L1(y, \hat{y}) = \sum_{i=1}^{n} |y_i - \hat{y}_i| L1(y,y^​)=∑i=1n​∣yi​−y^​i​∣
    ( y i y_i yi​为原图像素, y ^ i \hat{y}_i y^​i​为重建像素);
  2. 感知损失(Perceptual Loss):对比原图与重建图在预训练模型(如VGG)中间层的特征相似度,避免“像素级相似但语义失真”,公式:
    L p e r c e p t u a l = ∑ l λ l ⋅ ∣ ∣ ϕ l ( I p r e d ) − ϕ l ( I t a r g e t ) ∣ ∣ 2 2 L_{perceptual} = \sum_{l} \lambda_l \cdot || \phi_l(I_{pred}) - \phi_l(I_{target}) ||_2^2 Lperce<

Read more

Flutter 三方库 junitreport_maintained 的鸿蒙化适配指南 - 实现标准 JUnit XML 测试报告的端侧生成、支持自动化测试结果汇总与 Jenkins/CI 集成实战

Flutter 三方库 junitreport_maintained 的鸿蒙化适配指南 - 实现标准 JUnit XML 测试报告的端侧生成、支持自动化测试结果汇总与 Jenkins/CI 集成实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 junitreport_maintained 的鸿蒙化适配指南 - 实现标准 JUnit XML 测试报告的端侧生成、支持自动化测试结果汇总与 Jenkins/CI 集成实战 前言 在进行 Flutter for OpenHarmony 的大规模工程化开发时,测试驱动开发(TDD)是保障应用质量的关键。但 Flutter 默认的测试输出主要是控制台文本,难以直接接入专业的持续集成(CI)可视化控制台。junitreport_maintained 是一个能将 Dart 测试结果转化为标准的 JUnit XML 格式的工具。本文将介绍如何在鸿蒙端构建极致的自动化测试反馈链路。 一、原直观解析 / 概念介绍 1.1 基础原理 该工具通过管道符(

By Ne0inhk
Flutter 组件 graphql_codegen 的适配 鸿蒙Harmony 实战 - 驾驭 Schema 驱动的强类型代码生成、实现鸿蒙端 GraphQL 通讯极致性能与安全方案

Flutter 组件 graphql_codegen 的适配 鸿蒙Harmony 实战 - 驾驭 Schema 驱动的强类型代码生成、实现鸿蒙端 GraphQL 通讯极致性能与安全方案

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 graphql_codegen 的适配 鸿蒙Harmony 实战 - 驾驭 Schema 驱动的强类型代码生成、实现鸿蒙端 GraphQL 通讯极致性能与安全方案 前言 在鸿蒙(OpenHarmony)生态的大型分布式政务中台、极繁电商数据聚合、以及需要对接复杂图形化 API 结构的各种企业级应用开发中,“前后端契约的一致性”是支撑系统高可用性的钢筋骨架。面对包含上百个节点与复杂关联关系的 GraphQL Schema。如果仅仅依靠手动编写 Dart Model 类。那么不仅会导致极其低效且易出错的反复字段匹配。更会因为无法充分利用 GraphQL 的按需请求特性,导致在鸿蒙端产生了大量无用的网络带宽浪费与序列化开销方案。 我们需要一种“契约驱动、零手动映射”的代码生成艺术。 graphql_codegen 是一套专注于极致性能、支持强类型安全的 GraphQL

By Ne0inhk
万字长文带你梳理Llama开源家族:从Llama-1到Llama-3,看这一篇就够了!

万字长文带你梳理Llama开源家族:从Llama-1到Llama-3,看这一篇就够了!

在AI领域,大模型的发展正以前所未有的速度推进技术的边界。 北京时间4月19日凌晨,Meta在官网上官宣了Llama-3,作为继Llama-1、Llama-2和Code-Llama之后的第三代模型,Llama-3在多个基准测试中实现了全面领先,性能优于业界同类最先进的模型。 纵观Llama系列模型,从版本1到3,展示了大规模预训练语言模型的演进及其在实际应用中的显著潜力。这些模型不仅在技术上不断刷新纪录,更在商业和学术界产生了深远的影响。因此,对Llama模型不同版本之间的系统对比,不仅可以揭示技术进步的具体细节,也能帮助我们理解这些高级模型如何解决现实世界的复杂问题。 1、Llama进化史 本节将对每个版本的Llama模型进行简要介绍,包括它们发布的时间和主要特点。 1.1 Llama-1 系列 Llama-1 [1]是Meta在2023年2月发布的大语言模型,是当时性能非常出色的开源模型之一,有7B、13B、30B和65B四个参数量版本。Llama-1各个参数量版本都在超过1T token的语料上进行了预训训练,其中,最大的65B参数的模型在2,048张A100 80

By Ne0inhk
Flutter 三方库 super_log 的鸿蒙化适配指南 - 实现极具视觉冲击力的彩色终端日志、支持动态过滤与全局异常捕获

Flutter 三方库 super_log 的鸿蒙化适配指南 - 实现极具视觉冲击力的彩色终端日志、支持动态过滤与全局异常捕获

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 super_log 的鸿蒙化适配指南 - 实现极具视觉冲击力的彩色终端日志、支持动态过滤与全局异常捕获 前言 在进行 Flutter for OpenHarmony 的日常开发调试时,面对控制台里密密麻麻、死板单调的白色日志,开发者很容易在大海捞针般的排错过程中产生疲劳。super_log 是一个专注于日志可视化体验的增强库。它通过丰富的配色方案和清晰的结构化打印,让鸿蒙控制台里的每条日志都具备“辨识度”。本文将介绍如何在鸿蒙端利用 super_log 让你的代码“自白”得更加生动。 一、原理解析 / 概念介绍 1.1 基础原理 super_log 基于终端的 ANSI 颜色转义序列。它通过解析日志级别,并在输出字符串中自动嵌入特定的颜色代码。同时,它还内置了美观的边框修饰符(Box

By Ne0inhk