学习材料

https://blog.csdn.net/leonardotu/article/details/147382479

https://blog.csdn.net/weixin_44212848/article/details/145752050

https://blog.csdn.net/qq_35899016/article/details/149905694

https://blog.csdn.net/m0_71746299/article/details/147246792

https://www.toutiao.com/article/7494605618809029135/?wid=1762309932775

问题

为啥Input Volume要点乘Filter?

在卷积神经网络(CNN)中,输入体积(Input Volume)与滤波器(Filter)点乘(准确点说是滑动窗口的点积),是整个网络能自动提取特征的核心操作,这个操作主要为了实现两个目标:检测局部特征实现参数共享

下面这个表格梳理了点乘操作的关键步骤及其含义,希望能帮助你理解:

步骤

操作描述

含义与目的

1. 提取局部区块

滤波器在输入图像上滑动,每次覆盖一个小的局部区域(例如3x3像素)。

局部连接:模拟生物视觉系统的 receptive field(感受野),关注局部信息而非全局,大幅减少参数数量。

2. 计算点乘(核心)

将滤波器的权重与对应位置输入区块的数值进行点乘(对应元素相乘后求和)。

特征匹配:点乘结果的大小反映了该局部输入模式与滤波器所承载的“模式”(如边缘、纹理)相似程度。结果越大,越匹配。

3. 生成特征图

将每次点乘的结果填入输出特征图(Feature Map)的对应位置。

生成特征响应图:整个输入上滑动计算后,得到的特征图清晰地显示了输入中哪些位置存在该滤波器所检测的特征。

4. 多滤波器堆叠

使用多个不同的滤波器重复上述过程。

构建丰富特征每个滤波器学习检测一种不同的特征(如不同方向的边缘、不同颜色的斑点)。所有滤波器的输出在深度方向堆叠,形成包含多种特征的输出体积。

点乘操作还与一个关键机制紧密相关:参数共享(Parameter Sharing)

  • 同一个滤波器会扫过输入数据的所有空间位置。这意味着,无论这个特征(如一个垂直边缘)出现在图像的左上角还是右下角,都是由同一个滤波器来检测的。

  • 这种机制带来了巨大的优势:

    • 显著减少参数量:与全连接层相比,卷积层需要学习的参数大大减少,降低了模型复杂度和过拟合风险,也提升了训练速度。

    • 保持平移不变性(Translation Invariance):模型能够识别出物体特征无论它出现在图像中的哪个位置。这是因为检测相同特征的“探测器”(滤波器)是同一个。

扩散模型中Scheduler的作用

- Scheduler在扩散模型中负责控制噪声添加和去除的过程

- 它定义了在每个扩散步骤中,向数据添加多少噪声,以及在去噪过程中如何逐步恢复原始数据。

FLUX1.

FLUX让模型直接学习CFG生成的结果,使得模型能够一次输出之前要运行两次才能得到的指引运行结果,节约一半的时间。为了提升性能和效率,模型新引入了旋转式位置编码(RoPE)和并行注意力层。

说白了,FLUX1.在Stable Diffusion 3 的基础上,加了RoPE和并行注意力层

推荐使用diffusers框架运行FLUX.1 (官方文档:https://huggingface.co/docs/diffusers/main/en/api/pipelines/flux)

CFG

传统CFG与负面提示词的工作原理

传统CFG的本质是在每个去噪步骤中,让模型分别基于条件文本(提示词)和空文本进行两次预测,得到两个噪声的预测结果,最终预测的方向是朝着条件文本的结果靠拢、并远离空文本的预测结果。这个“靠拢和远离”的程度,就是由guidance_scale参数控制的。

负向提示词的实现:浮现提示词正式给予上述机制的一个“技巧”。它并非让模型直接生成与负向提示词相反的内容,而是将CFG中的“空文本”替换成“负向文本”。这样,模型生成的结果会同时接近正向提示词、并远离负向提示词所描述的内容。这个过程需要模型进行4次前向计算(正向提示词1次、负向提示词1次、然后根据CFG公式组合),计算开销较大。

FLUX1.的指引蒸馏与模型输入

FLUX1. 通过“指引蒸馏”技术,从根本上改变了这一流程。

- 化“外在比较”为“内在能力”:指引蒸馏的目标是,让模型只进行一次前向计算,就能直接输出接近于传统CFG需要多次计算才能得到的结果,这是在模型训练阶段完成的,通过让“学生模型”学习“教师模型”(一个已经训练好、并使用传统CFG的模型)的行为来实现的。

- guidance_scale 作为条件输入:既然模型被训练来直接模仿CFG引导的输出,那么引导的“强度”就需要作为一个明确的信号告诉模型。因此,在FLUX1.中,guidance_scale不再是一个用于外部计算公式的参数,而是和时间步t、文本嵌入一样,作为一个额外的条件输入直接馈入模型的Transformer块中。

- 固定化的“空文本”:在蒸馏过程中,模型学习到的是在特定的guidance_scale下,其输出应该是从“空文本对应的输出向“条件文本”对应的输出移动多少。这个“空文本”的概念已经被固化到模型权重中。因此,在推理时,无法再向以前那样将空文本替换为任意负面文本了。

下面的表格清晰地对比了这两种机制:

特性

传统CFG

FLUX.1指引蒸馏

核心机制

在推理时,比较有条件与无条件预测的输出

在训练时,将CFG效果蒸馏进模型;推理时直接输出结果

计算次数

每个去噪步2次(或使用负面提示词时更多)

每个去噪步仅需1次

指引强度

外部参数guidance_scale,用于计算公式

模型的一个输入条件,直接影响内部计算

负面提示词

支持,通过替换无条件输入实现

不支持传统方式,因无条件输入已固定

双流注意力机制

FLUX Transformer采用了一种双流(Dual Stream)与单流结合的模块设计。前若干层Transformer Block执行双流注意力,即图像序列和文本序列各自经过注意力和前馈网络,同时通过交叉注意力交互信息。这类似于将文本作为条件,通过交叉注意力影响图像特征,但特别之处在于文本序列本身也被图像特征反向更新。换言之,在双流模块中,图像token和文本token彼此双向注意力,互相影响对方的隐藏状态。这使文本特征能够动态融合图像上下文,而非始终保持静止状态。经过若干层双流交互后,Transformer后续层切换为单流模式,主要针对图像序列进行自注意力和特征变换,以细化图像表示。这种分段式的Transformer结构能让模型既能充分利用文本条件引导,又能在后期聚焦图像细节重建。

FLUX1. 门控机制(Gating)

大规模多头注意力:FLUX Transformer的隐藏维度和多头注意力规模远超传统扩散模型,其注意力头数为24,每头维度128,总的内部特征维度达到了3072(24x128)。文本和图像特征都被投影到这个3072维空间中进行融合。相比之下Stable Diffusion v1的UNet隐藏层约为320~1280维,注意力头数为8。更高的维度赋予FLUX更强的建模能力,但也增加显存需求。

为了缓解训练/推理压力,FLUX在注意力模块中引入了门控(Gating)机制:对每一层的注意力输出和MLP输出,均乘以一个科学系的门控参数后再与残差相加。这种gating技术有助于稳定超深Transformer的训练,控制不同层信息流强度。

此外,FLUX采用旋转位置嵌入(RoPE)来为图像patch序列提供位置信息,确保Transformer知晓每个token对应的空间位置。模型使用三个轴的RoPE编码,涵盖二维空间尺寸和patch内局部坐标,以适配高分辨率生成。

FLUX1. 双文本编码器

为了更好地理解和表示文本提示,FLUX引入了双文本编码器架构,它同时使用了CLIP和T5两种预训练文本模型来编码提示信息。第一编码器为CLIP(如OpenAI CLIP ViT-L/14),擅长于捕获与视觉相关的语义和风格信息;第二编码器为T5编码器(如T5-v1.1-XXL),擅长于理解长文本和复杂描述。FLUX对这两种编码器的输出加以区分利用:CLIP文本模型输出池化文本向量(文本语意的全局embedding)经线性层投影后,将融合进扩散Transformer的时间步嵌入,用于指导全局图像风格和语意;T5编码器输出的文本序列特征则经过线性变化后,作为扩散Transformer交叉注意力的文本token序列。这种双模文本嵌入方法类似于Stable Dif fusion XL的做法,将语言模型和对比学习模型各自优势结合,使FLUX对文本的理解更加全面。尤其在较长或复杂提示下,T5编码器允许模型处理多达512个标记的文本长度,显著超过以往基于CLIP的77标记限制。同时,CLIP提供的全局嵌入可作为一种额外条件,帮助模型更好地对齐视觉语意。例如,FLUX Pipeline默认会获取CLIP文本模型的【EOS】输出作为pooled embedding,并结合时间步嵌入形成扩散模型的条件向量,使模型对提示的整体语意有敏锐的感知。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐