【mmodel/xDit】Cross-Attention 深度解析:文生图/文生视频的核心桥梁

Cross-Attention 深度解析:文生图/文生视频的核心桥梁

作者说明:本文基于 xDiT 框架,深入剖析 Cross-Attention 在文本到图像/视频生成中的作用机制。通过详细的 Shape 推导和代码分析,展示出从text到图像或者视频的一个完整过程。


### 文章目录

  • [Cross-Attention 深度解析:文生图/文生视频的核心桥梁](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [@[toc]](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [一、引言:为什么需要 Cross-Attention](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [1.1 扩散模型的条件生成难题](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [1.2 Cross-Attention 的突破](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [二、Cross-Attention 的理论基础](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [2.1 Self-Attention vs Cross-Attention](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Self-Attention (自注意力)](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Cross-Attention (交叉注意力)](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [2.2 数学原理详解](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 1: 计算 Query, Key, Value](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 2: 计算 Attention 权重](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 3: 加权求和](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [2.3 直观理解](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [三、xDiT 中的 Cross-Attention 实现](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [3.1 整体架构](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [3.2 代码位置与调用流程](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [3.3 QKV 的生成细节](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [四、举例说明:720p 视频生成实例](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [4.1 输入准备](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [文本输入](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [视频 Latent](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [4.2 Transformer 输入处理](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 1: Latent Patchify](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 2: 文本 Embedding 投影](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [4.3 Cross-Attention 的完整 Shape 变化](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [输入](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 1: 生成 Query (来自图像)](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 2: 生成 Key (来自文本)](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 3: 生成 Value (来自文本)](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 4: 重塑为多头格式](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 5: 计算 Attention Score](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 6: Softmax 归一化](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 7: 加权求和 Value](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 8: 多头拼接](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [步骤 9: 输出投影](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [4.4 可视化:一个图像 Token 的 Cross-Attention](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [五、不同模型的 Cross-Attention 策略对比](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [5.1 FLUX 模型:Joint Attention](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [5.2 CogVideoX: 双编码器策略](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [5.3 HunyuanVideo: 时序分离 Attention](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [六、实战:代码级解析](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [6.1 完整的 Cross-Attention 实现](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [6.2 使用示例:文生视频](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [6.3 可视化 Attention 权重](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [七、Cross-Attention 的优化技巧](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [7.1 xDiT 中的并行化策略](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [7.2 FlashAttention 加速](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [7.3 SageAttention: INT8 量化](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [八、常见问题 FAQ](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Q1: Cross-Attention 和 Self-Attention 可以同时使用吗?](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Q2: Attention Mask 的作用是什么?](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Q3: 多头注意力的"头"是什么意思?](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Q4: 为什么要除以 √d_k?](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [Q5: xDiT 中如何支持超长文本?](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [九、核心要点](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [完整代码示例](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [A.1 最小化 Cross-Attention 实现](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [A.2 完整的 Transformer Block](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)
  • [参考资料](#文章目录 Cross-Attention 深度解析:文生图/文生视频的核心桥梁 @[toc] 一、引言:为什么需要 Cross-Attention 1.1 扩散模型的条件生成难题 1.2 Cross-Attention 的突破 二、Cross-Attention 的理论基础 2.1 Self-Attention vs Cross-Attention Self-Attention (自注意力) Cross-Attention (交叉注意力) 2.2 数学原理详解 步骤 1: 计算 Query, Key, Value 步骤 2: 计算 Attention 权重 步骤 3: 加权求和 2.3 直观理解 三、xDiT 中的 Cross-Attention 实现 3.1 整体架构 3.2 代码位置与调用流程 3.3 QKV 的生成细节 四、举例说明:720p 视频生成实例 4.1 输入准备 文本输入 视频 Latent 4.2 Transformer 输入处理 步骤 1: Latent Patchify 步骤 2: 文本 Embedding 投影 4.3 Cross-Attention 的完整 Shape 变化 输入 步骤 1: 生成 Query (来自图像) 步骤 2: 生成 Key (来自文本) 步骤 3: 生成 Value (来自文本) 步骤 4: 重塑为多头格式 步骤 5: 计算 Attention Score 步骤 6: Softmax 归一化 步骤 7: 加权求和 Value 步骤 8: 多头拼接 步骤 9: 输出投影 4.4 可视化:一个图像 Token 的 Cross-Attention 五、不同模型的 Cross-Attention 策略对比 5.1 FLUX 模型:Joint Attention 5.2 CogVideoX: 双编码器策略 5.3 HunyuanVideo: 时序分离 Attention 六、实战:代码级解析 6.1 完整的 Cross-Attention 实现 6.2 使用示例:文生视频 6.3 可视化 Attention 权重 七、Cross-Attention 的优化技巧 7.1 xDiT 中的并行化策略 7.2 FlashAttention 加速 7.3 SageAttention: INT8 量化 八、常见问题 FAQ Q1: Cross-Attention 和 Self-Attention 可以同时使用吗? Q2: Attention Mask 的作用是什么? Q3: 多头注意力的"头"是什么意思? Q4: 为什么要除以 √d_k? Q5: xDiT 中如何支持超长文本? 九、核心要点 完整代码示例 A.1 最小化 Cross-Attention 实现 A.2 完整的 Transformer Block 参考资料)

一、引言:为什么需要 Cross-Attention

1.1 扩散模型的条件生成难题

在扩散模型(Diffusion Models)中,生成过程本质上是一个迭代去噪过程:

复制代码
纯噪声 z_T → 去噪 → z_{T-1} → 去噪 → ... → z_0 (清晰图像)

但这里有一个核心问题:如何让模型知道我们想生成什么?

  • 用户输入:"一只猫在雨中行走" (文本)
  • 模型生成:? (图像/视频)

传统方案的局限

  1. 简单拼接 (Concatenation)

    python 复制代码
    combined = torch.cat([noise_latent, text_embed], dim=-1)
    • 文本和图像维度不匹配
    • 无法精确对齐语义
  2. 条件嵌入 (Conditional Embedding)

    python 复制代码
    latent = latent + text_embed  # 简单相加
    • 文本信息被平均稀释
    • 无法建立细粒度对应关系

1.2 Cross-Attention 的突破

Cross-Attention 的核心思想

让图像的每一个 patch 都能"查询"文本中相关的信息

复制代码
文本: "一只猫在雨中行走"
      ↓ 分词编码
     ["一只", "猫", "在", "雨中", "行走"]
      ↓
图像 Patch 1 (左上角):
  - Query: "这个区域应该画什么?"
  - 从文本中查询: "雨中" (权重 0.7), "猫" (权重 0.3)
  - 生成: 下雨的背景

图像 Patch 2 (中心):
  - Query: "这个区域应该画什么?"
  - 从文本中查询: "猫" (权重 0.9), "行走" (权重 0.1)
  - 生成: 猫的主体

优势

  1. 细粒度对齐:每个图像 patch 可以关注不同的文本部分
  2. 动态权重:Attention 权重可学习,自适应调整
  3. 信息保留:文本语义不被稀释

二、Cross-Attention 的理论基础

2.1 Self-Attention vs Cross-Attention

Self-Attention (自注意力)

作用: 同一模态内部的信息交互

python 复制代码
# 输入: 图像特征 X
Q = Linear_Q(X)  # Query 来自 X
K = Linear_K(X)  # Key 来自 X
V = Linear_V(X)  # Value 来自 X

Attention(Q, K, V) = softmax(QK^T / √d_k) V

特点:

  • Q、K、V 都来自同一个输入
  • 例如:图像 patch 之间相互关注
Cross-Attention (交叉注意力)

作用: 跨模态的信息融合

python 复制代码
# 输入: 图像特征 X, 文本特征 C
Q = Linear_Q(X)  # Query 来自图像
K = Linear_K(C)  # Key 来自文本 ← 关键差异
V = Linear_V(C)  # Value 来自文本 ← 关键差异

Attention(Q, K, V) = softmax(QK^T / √d_k) V

特点:

  • Query 来自目标模态(图像)
  • Key/Value 来自条件模态(文本)
  • 实现跨模态信息传递

2.2 数学原理详解

步骤 1: 计算 Query, Key, Value

Q = X W Q , Q ∈ R N × d k K = C W K , K ∈ R M × d k V = C W V , V ∈ R M × d v \begin{aligned} Q &= X W_Q, \quad Q \in \mathbb{R}^{N \times d_k} \\ K &= C W_K, \quad K \in \mathbb{R}^{M \times d_k} \\ V &= C W_V, \quad V \in \mathbb{R}^{M \times d_v} \end{aligned} QKV=XWQ,Q∈RN×dk=CWK,K∈RM×dk=CWV,V∈RM×dv

其中:

  • (X): 图像特征,(N) = 图像 token 数量
  • (C): 文本特征,(M) = 文本 token 数量
  • (d_k): Key/Query 维度
  • (d_v): Value 维度
步骤 2: 计算 Attention 权重

Score = Q K T d k ∈ R N × M \text{Score} = \frac{Q K^T}{\sqrt{d_k}} \in \mathbb{R}^{N \times M} Score=dk QKT∈RN×M

物理意义

  • Score[i, j] = 图像 token i 与文本 token j 的相关性
  • 除以 (\sqrt{d_k}) 防止梯度消失

Attention = softmax ( Score ) ∈ R N × M \text{Attention} = \text{softmax}(\text{Score}) \in \mathbb{R}^{N \times M} Attention=softmax(Score)∈RN×M

归一化

  • 每个图像 token 对所有文本 token 的注意力权重和为 1
  • Attention[i, :] = 图像 token i 对各文本 token 的关注度分布
步骤 3: 加权求和

Output = Attention ⋅ V ∈ R N × d v \text{Output} = \text{Attention} \cdot V \in \mathbb{R}^{N \times d_v} Output=Attention⋅V∈RN×dv

融合信息

  • 每个图像 token 根据注意力权重,聚合相关的文本信息

2.3 直观理解

类比:图书馆检索系统

复制代码
你的问题 (Query):
  "如何训练深度学习模型?"

图书馆索引 (Key):
  书1: "深度学习基础"
  书2: "模型训练技巧"
  书3: "美食烹饪"
  书4: "神经网络优化"

匹配相关性 (QK^T):
  书1: 0.7 (相关)
  书2: 0.9 (高度相关)
  书3: 0.1 (不相关)
  书4: 0.8 (相关)

归一化权重 (Softmax):
  书1: 0.25
  书2: 0.40
  书3: 0.05
  书4: 0.30

获取内容 (Attention × V):
  综合书2 (40%)、书4 (30%)、书1 (25%) 的内容
  → 你得到的答案

在 Cross-Attention 中:

  • Query: 图像的每个 patch"问":"我应该画什么?"
  • Key: 文本的每个 token"提供"索引:"这是关于...的"
  • Attention: 计算相关性:"这个 patch 应该关注'猫'(0.8)和'雨'(0.2)"
  • Value: 文本的语义信息
  • Output: 融合了文本语义的图像特征

三、xDiT 中的 Cross-Attention 实现

3.1 整体架构

xDiT 中的生成流程

复制代码
┌────────────────────────────────────────────────────────┐
│           文本到视频生成的完整流程 (xDiT)                 
├────────────────────────────────────────────────────────┤
│                                                          
│  Stage 1: 文本编码                                        
│    输入: "一只猫在雨中行走"                                
│    Text Encoder (T5/CLIP)                               
│    输出: text_embed [1, 512, 4096]                       
│          ↓                                              
│  Stage 2: 噪声初始化                                      
│    latents ~ N(0, I)                                    
│    输出: latents [1, 16, 81, 90, 160]                    
│          ↓                                              
│  Stage 3: 迭代去噪 (核心!)                               
│    for t in timesteps:                                  
│      ┌──────────────────────────────────┐              
│      │   Transformer Block                            
│      │                                                
│      │   1. Self-Attention (latent)                   
│      │      → 图像内部信息交互                          
│      │                                                 
│      │   2. Cross-Attention ← 关键!                  
│      │      Query: latent                             
│      │      Key/Value: text_embed                    
│      │      → 文本信息注入图像                          
│      │                                                 
│      │   3. FeedForward                               
│      │      → 非线性变换                               
│      └──────────────────────────────────┘              
│          ↓                                              
│      noise_pred = Transformer(latents, text_embed)      
│      latents = Scheduler.step(noise_pred, latents)      
│          ↓                                              
│  Stage 4: VAE 解码                                       
│    video = VAE.decode(latents)                          
│    输出: video [1, 3, 81, 720, 1280]                     
└────────────────────────────────────────────────────────┘

3.2 代码位置与调用流程

主要涉及的文件

  1. Pipeline : xfuser/model_executor/pipelines/piple_wan.py
  2. Transformer : xfuser/model_executor/models/transformers/wan_transformer_3d.py
  3. Attention : xfuser/model_executor/layers/wan_attention.py

调用链

python 复制代码
# piple_wan.py
for i, t in enumerate(timesteps):
    noise_pred = current_model(
        hidden_states=latent_model_input,      # 噪声 latent
        timestep=timestep,                     # 时间步
        encoder_hidden_states=prompt_embeds,   # 文本条件 ← 关键输入
        return_dict=False,
    )[0]
    
    latents = self.scheduler.step(noise_pred, t, latents, return_dict=False)[0]

Transformer 内部 (wan_transformer_3d.py):

python 复制代码
def forward(self, hidden_states, encoder_hidden_states, timestep, ...):
    # 1. 时间步嵌入
    timestep_proj = self.time_embedder(timestep_embed)
    
    # 2. 逐层 Transformer Block
    for block in self.blocks:
        hidden_states = block(
            hidden_states,                # 图像 latent (Query)
            encoder_hidden_states,        # 文本编码 (Key/Value)
            timestep_proj,                # 时间条件
            rotary_emb                    # 位置编码
        )
    
    return hidden_states

Attention 层 (wan_attention.py):

python 复制代码
class xFuserWanAttnWrapper:
    def forward(self, hidden_states, encoder_hidden_states, ...):
        # 步骤 1: 计算 QKV
        query, key, value = _get_qkv_projections(
            self, 
            hidden_states,           # Query 来源: 图像
            encoder_hidden_states    # Key/Value 来源: 文本
        )
        
        # 步骤 2: 归一化
        query = self.norm_q(query)
        key = self.norm_k(key)
        
        # 步骤 3: 重塑为多头格式
        query = query.unflatten(2, (self.tp_heads, -1))
        key = key.unflatten(2, (self.tp_num_kv_heads, -1))
        value = value.unflatten(2, (self.tp_num_kv_heads, -1))
        
        # 步骤 4: Transpose 为 (batch, heads, seq, dim)
        query = query.transpose(1, 2)
        key = key.transpose(1, 2)
        value = value.transpose(1, 2)
        
        # 步骤 5: 调用 Attention 计算
        hidden_states = USP(query, key, value, dropout_p=0.0, is_causal=False)
        
        return hidden_states

3.3 QKV 的生成细节

源码位置 : xfuser/model_executor/layers/wan_attention.py

python 复制代码
def _get_qkv_projections(attn: "WanAttention", hidden_states: torch.Tensor, encoder_hidden_states: torch.Tensor):
    """
    计算 Query, Key, Value 投影
    
    Args:
        attn: Attention 层实例
        hidden_states: 图像 latent [B, S, C]
        encoder_hidden_states: 文本编码 [B, M, C]
    
    Returns:
        query, key, value
    """
    # Query 来自图像 latent
    query = attn.to_q(hidden_states)
    
    if encoder_hidden_states is None:
        # Self-Attention 模式: Key/Value 也来自图像
        key = attn.to_k(hidden_states)
        value = attn.to_v(hidden_states)
    else:
        # Cross-Attention 模式: Key/Value 来自文本
        key = attn.to_k(encoder_hidden_states)
        value = attn.to_v(encoder_hidden_states)
    
    return query, key, value

关键点

  1. to_q, to_k, to_v 是线性投影层

    python 复制代码
    self.to_q = nn.Linear(dim, dim)
    self.to_k = nn.Linear(cross_attention_dim, dim)
    self.to_v = nn.Linear(cross_attention_dim, dim)
  2. 维度匹配

    • hidden_states: 图像 latent 的维度(如 3072)
    • encoder_hidden_states: 文本 embed 的维度(如 4096)
    • to_kto_v 将文本维度映射到统一维度

四、举例说明:720p 视频生成实例

4.1 输入准备

场景: WAN 2.1 模型,生成 720p 视频(81 帧)

文本输入
python 复制代码
prompt = "一只猫在雨中行走"

# 文本编码 (T5 Encoder)
text_embed = text_encoder(prompt)
# Shape: [batch_size, seq_length, embed_dim]
#        [1, 512, 4096]

详细解释

  • batch_size = 1: 单个样本
  • seq_length = 512: T5 编码器固定长度(padding/truncation)
  • embed_dim = 4096: T5-XXL 的隐藏层维度
视频 Latent
python 复制代码
# 视频分辨率: 720p (1280×720), 81 帧
height, width, num_frames = 720, 1280, 81

# VAE 下采样: 空间 8×, 时间 1×
latent_h, latent_w = height // 8, width // 8  # 90, 160
latent_f = num_frames  # 81

# 初始化噪声 latent
latents = torch.randn(1, 16, latent_f, latent_h, latent_w)
# Shape: [batch_size, channels, frames, H/8, W/8]
#        [1, 16, 81, 90, 160]

详细解释

  • channels = 16: WAN 模型的 latent 通道数
  • VAE 将 [3, 81, 720, 1280] 压缩为 [16, 81, 90, 160]
  • 空间维度下采样 8 倍,时间维度不变

4.2 Transformer 输入处理

步骤 1: Latent Patchify
python 复制代码
# xfuser/model_executor/models/transformers/wan_transformer_3d.py
# (简化代码)

# 1. Patchify: 将 latent 转为 token 序列
# WAN 使用 patch_size = (1, 2, 2)
p_t, p_h, p_w = 1, 2, 2

# 计算 patch 数量
num_patches_f = latent_f // p_t  # 81 / 1 = 81
num_patches_h = latent_h // p_h  # 90 / 2 = 45
num_patches_w = latent_w // p_w  # 160 / 2 = 80

total_patches = num_patches_f * num_patches_h * num_patches_w
# = 81 × 45 × 80 = 291,600

# 2. 投影到 Transformer 维度
hidden_dim = 3072  # WAN 2.1 的隐藏层维度

hidden_states = self.x_embedder(latents)
# Shape: [batch_size, total_patches, hidden_dim]
#        [1, 291600, 3072]

关键点

  • 291,600 个 token = 视频的每个时空 patch
  • 每个 token 对应原视频的 (1 帧 × 2×2 像素) 区域
步骤 2: 文本 Embedding 投影
python 复制代码
# 文本维度适配
encoder_hidden_states = self.context_embedder(text_embed)
# Input: [1, 512, 4096]
# Output: [1, 512, 3072]  # 投影到与图像相同的维度

Linear 投影

python 复制代码
self.context_embedder = nn.Linear(4096, 3072)

4.3 Cross-Attention 的完整 Shape 变化

现在进入 Cross-Attention 的核心计算!

输入
python 复制代码
hidden_states: [1, 291600, 3072]        # 图像 token
encoder_hidden_states: [1, 512, 3072]   # 文本 token
步骤 1: 生成 Query (来自图像)
python 复制代码
query = self.to_q(hidden_states)
# Input:  [1, 291600, 3072]
# Linear: 3072 → 3072
# Output: [1, 291600, 3072]
步骤 2: 生成 Key (来自文本)
python 复制代码
key = self.to_k(encoder_hidden_states)
# Input:  [1, 512, 3072]
# Linear: 3072 → 3072
# Output: [1, 512, 3072]
步骤 3: 生成 Value (来自文本)
python 复制代码
value = self.to_v(encoder_hidden_states)
# Input:  [1, 512, 3072]
# Linear: 3072 → 3072
# Output: [1, 512, 3072]
步骤 4: 重塑为多头格式

WAN 2.1 配置

  • num_heads = 40 (总注意力头数)
  • head_dim = 3072 / 40 = 76.8 ≈ 77 (实际可能调整)

假设 head_dim = 77:

python 复制代码
# Query 重塑
query = query.unflatten(2, (num_heads, head_dim))
# [1, 291600, 3072] → [1, 291600, 40, 77]

query = query.transpose(1, 2)
# [1, 291600, 40, 77] → [1, 40, 291600, 77]

最终多头格式

python 复制代码
query: [batch, heads, seq_img, head_dim]
       [1, 40, 291600, 77]

key:   [batch, heads, seq_txt, head_dim]
       [1, 40, 512, 77]

value: [batch, heads, seq_txt, head_dim]
       [1, 40, 512, 77]
步骤 5: 计算 Attention Score
python 复制代码
# 点积相似度
scores = torch.matmul(query, key.transpose(-2, -1))
# [1, 40, 291600, 77] × [1, 40, 77, 512]
# = [1, 40, 291600, 512]

# 缩放
scores = scores / math.sqrt(head_dim)
# = scores / √77 ≈ scores / 8.77

物理意义

  • scores[0, 0, i, j] = 第 0 个头,图像 token i 对文本 token j 的相关性
  • 每个图像 token 都有一个 512 维的相关性向量(对应 512 个文本 token)
步骤 6: Softmax 归一化
python 复制代码
attn_weights = torch.softmax(scores, dim=-1)
# Shape: [1, 40, 291600, 512]

归一化

  • 对于每个图像 token,其对所有文本 token 的注意力权重和为 1
  • attn_weights[0, 0, i, :].sum() = 1.0

示例(简化版):

python 复制代码
# 假设图像 token 1000 (视频中心的某个 patch)
attn_weights[0, 0, 1000, :] = [
    0.001,  # token 0: "一只"
    0.450,  # token 1: "猫"  ← 高度相关
    0.003,  # token 2: "在"
    0.350,  # token 3: "雨中" ← 高度相关
    0.196,  # token 4: "行走"
    ...     # 其余 507 个 token (padding)
]

解释

  • 这个图像 patch 最关注"猫"(45%) 和"雨中"(35%)
  • 生成时会融合这两部分的文本语义
步骤 7: 加权求和 Value
python 复制代码
output = torch.matmul(attn_weights, value)
# [1, 40, 291600, 512] × [1, 40, 512, 77]
# = [1, 40, 291600, 77]

融合信息

  • 每个图像 token 根据注意力权重,聚合相关的文本 value
  • 输出包含了文本引导的语义信息
步骤 8: 多头拼接
python 复制代码
output = output.transpose(1, 2)
# [1, 40, 291600, 77] → [1, 291600, 40, 77]

output = output.flatten(2)
# [1, 291600, 40, 77] → [1, 291600, 3080]
步骤 9: 输出投影
python 复制代码
output = self.to_out(output)
# Linear: 3080 → 3072
# Output: [1, 291600, 3072]

最终输出

  • Shape 与输入 hidden_states 相同:[1, 291600, 3072]
  • 但现在融合了文本条件的语义信息

4.4 可视化:一个图像 Token 的 Cross-Attention

场景: 视频第 40 帧,中心位置的一个 patch

复制代码
┌─────────────────────────────────────────────────────────┐
│  图像 Token #100000 (视频中心某个 patch)                  
├─────────────────────────────────────────────────────────┤
│                                                           
│  Query: [77维向量]                                        
│  表示: "这个 patch 当前的视觉特征"                         
│         (可能是模糊的噪声,因为在去噪过程中)                  
│                                                           
│  ↓ 与文本 Key 计算相似度 ↓                                 
│                                                           
│  文本 Token 匹配:                                         
│    [0] "一"    : 0.002 (权重)                            
│    [1] "只"    : 0.003                                   
│    [2] "猫"    : 0.650 ← 最相关!                         
│    [3] "在"    : 0.005                                   
│    [4] "雨"    : 0.200                                   
│    [5] "中"    : 0.050                                   
│    [6] "行走"  : 0.090                                   
│    ...                                                    
│                                                           
│  ↓ 加权求和 Value ↓                                       
│                                                           
│  融合后的特征:                                             
│    主要包含 "猫" 的语义信息 (65%)                          
│    + "雨" 的语义信息 (20%)                                 
│    + "行走" 的语义信息 (9%)                                
│                                                           
│  输出: [77维向量]                                         
│  表示: "这个 patch 应该生成猫的某个部分,在雨中的环境"       
└─────────────────────────────────────────────────────────┘

多个 Token 的协同

复制代码
Token #95000 (猫的头部):
  关注: "猫"(0.8), "行走"(0.1), "一只"(0.1)
  生成: 猫的头部特征

Token #100000 (猫的身体):
  关注: "猫"(0.7), "雨中"(0.2), "行走"(0.1)
  生成: 猫的身体,带有雨水效果

Token #105000 (猫的脚):
  关注: "行走"(0.6), "猫"(0.3), "雨中"(0.1)
  生成: 正在行走的猫脚

Token #200000 (背景):
  关注: "雨中"(0.7), "行走"(0.2), "一只"(0.1)
  生成: 下雨的街道背景

五、不同模型的 Cross-Attention 策略对比

5.1 FLUX 模型:Joint Attention

源码位置 : xfuser/models/transformer_flux.py:503-506

python 复制代码
# FLUX 的独特策略: 拼接而非 Cross-Attention
ids = torch.cat((txt_ids, img_ids), dim=0)
image_rotary_emb = self.pos_embed(ids)

for block in self.transformer_blocks:
    hidden_states = block(
        hidden_states,           # 拼接后的序列
        encoder_hidden_states,   # 也是拼接后的
        temb,
        image_rotary_emb
    )

Joint Attention 原理

复制代码
传统 Cross-Attention:
  图像 token: [1, 291600, 3072]
  文本 token: [1, 512, 3072]
  
  Query 来自图像, Key/Value 来自文本
  → 单向信息流动

FLUX Joint Attention:
  拼接: [1, 291600+512, 3072] = [1, 292112, 3072]
  
  Self-Attention 在拼接后的序列上:
  → 图像 ↔ 文本 双向交互

优势与劣势

特性 Cross-Attention Joint Attention (FLUX)
信息流 图像 ← 文本 图像 ↔ 文本
计算复杂度 O(N×M) O((N+M)²)
内存占用 中等 较高
效果 良好 更强的融合
适用场景 通用 高质量图像生成

5.2 CogVideoX: 双编码器策略

python 复制代码
# CogVideoX 使用两个文本编码器
text_embed_clip = clip_encoder(prompt)  # [1, 77, 768]
text_embed_t5 = t5_encoder(prompt)      # [1, 512, 4096]

# 拼接
encoder_hidden_states = torch.cat([text_embed_clip, text_embed_t5], dim=1)
# [1, 589, 混合维度]

# Cross-Attention
hidden_states = cross_attn(hidden_states, encoder_hidden_states)

双编码器优势

  • CLIP: 强视觉-语言对齐
  • T5: 强语义理解
  • 结合两者优势

5.3 HunyuanVideo: 时序分离 Attention

python 复制代码
# HunyuanVideo 对时间和空间使用不同策略
for block in self.blocks:
    # 1. Temporal Self-Attention (时间维度)
    hidden_states = temporal_self_attn(hidden_states)
    
    # 2. Spatial Self-Attention (空间维度)
    hidden_states = spatial_self_attn(hidden_states)
    
    # 3. Cross-Attention (文本条件)
    hidden_states = cross_attn(hidden_states, encoder_hidden_states)
    
    # 4. FeedForward
    hidden_states = ffn(hidden_states)

分离的好处

  • 时序一致性更强
  • 空间细节更丰富
  • 计算更高效(相比 3D Attention)

六、实战:代码级解析

6.1 完整的 Cross-Attention 实现

简化的 PyTorch 实现

python 复制代码
import torch
import torch.nn as nn
import torch.nn.functional as F
import math

class CrossAttention(nn.Module):
    def __init__(
        self,
        query_dim: int,        # 图像特征维度
        cross_attention_dim: int,  # 文本特征维度
        num_heads: int = 8,
        head_dim: int = 64,
        dropout: float = 0.0,
    ):
        super().__init__()
        
        self.num_heads = num_heads
        self.head_dim = head_dim
        self.inner_dim = num_heads * head_dim
        
        # QKV 投影
        self.to_q = nn.Linear(query_dim, self.inner_dim, bias=False)
        self.to_k = nn.Linear(cross_attention_dim, self.inner_dim, bias=False)
        self.to_v = nn.Linear(cross_attention_dim, self.inner_dim, bias=False)
        
        # 输出投影
        self.to_out = nn.Sequential(
            nn.Linear(self.inner_dim, query_dim),
            nn.Dropout(dropout)
        )
    
    def forward(
        self,
        hidden_states: torch.Tensor,           # 图像特征 [B, N, C]
        encoder_hidden_states: torch.Tensor,   # 文本特征 [B, M, C']
        attention_mask: torch.Tensor = None,
    ) -> torch.Tensor:
        """
        Args:
            hidden_states: [batch_size, num_img_tokens, query_dim]
            encoder_hidden_states: [batch_size, num_txt_tokens, cross_attention_dim]
            attention_mask: [batch_size, num_txt_tokens] (1=attend, 0=mask)
        
        Returns:
            output: [batch_size, num_img_tokens, query_dim]
        """
        batch_size = hidden_states.shape[0]
        
        # 1. 生成 QKV
        query = self.to_q(hidden_states)  # [B, N, inner_dim]
        key = self.to_k(encoder_hidden_states)  # [B, M, inner_dim]
        value = self.to_v(encoder_hidden_states)  # [B, M, inner_dim]
        
        # 2. 重塑为多头格式
        query = query.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)
        # [B, N, inner_dim] → [B, N, num_heads, head_dim] → [B, num_heads, N, head_dim]
        
        key = key.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)
        # [B, M, inner_dim] → [B, num_heads, M, head_dim]
        
        value = value.view(batch_size, -1, self.num_heads, self.head_dim).transpose(1, 2)
        # [B, num_heads, M, head_dim]
        
        # 3. 计算 Attention Score
        scale = 1.0 / math.sqrt(self.head_dim)
        attention_scores = torch.matmul(query, key.transpose(-2, -1)) * scale
        # [B, num_heads, N, M]
        
        # 4. 应用 Attention Mask (可选)
        if attention_mask is not None:
            # attention_mask: [B, M] → [B, 1, 1, M]
            attention_mask = attention_mask.unsqueeze(1).unsqueeze(1)
            # 将 mask==0 的位置设为 -inf (softmax后为0)
            attention_scores = attention_scores.masked_fill(attention_mask == 0, float('-inf'))
        
        # 5. Softmax 归一化
        attention_probs = F.softmax(attention_scores, dim=-1)
        # [B, num_heads, N, M]
        
        # 6. 加权求和 Value
        hidden_states = torch.matmul(attention_probs, value)
        # [B, num_heads, N, head_dim]
        
        # 7. 多头拼接
        hidden_states = hidden_states.transpose(1, 2).contiguous()
        # [B, N, num_heads, head_dim]
        
        hidden_states = hidden_states.view(batch_size, -1, self.inner_dim)
        # [B, N, inner_dim]
        
        # 8. 输出投影
        hidden_states = self.to_out(hidden_states)
        # [B, N, query_dim]
        
        return hidden_states

6.2 使用示例:文生视频

python 复制代码
# ========== 配置 ==========
batch_size = 1
num_img_tokens = 291600  # 81×45×80
num_txt_tokens = 512
query_dim = 3072
cross_attention_dim = 4096
num_heads = 40
head_dim = 77

# ========== 初始化 ==========
cross_attn = CrossAttention(
    query_dim=query_dim,
    cross_attention_dim=cross_attention_dim,
    num_heads=num_heads,
    head_dim=head_dim
).cuda()

# ========== 输入数据 ==========
# 图像 latent (已经过 patchify 和 embedding)
hidden_states = torch.randn(batch_size, num_img_tokens, query_dim).cuda()
# [1, 291600, 3072]

# 文本编码 (T5 输出)
encoder_hidden_states = torch.randn(batch_size, num_txt_tokens, cross_attention_dim).cuda()
# [1, 512, 4096]

# Attention Mask (标记哪些 token 是有效的)
# 假设只有前 50 个 token 是实际文本,其余是 padding
attention_mask = torch.zeros(batch_size, num_txt_tokens).cuda()
attention_mask[:, :50] = 1
# [1, 512], 前 50 个为 1,其余为 0

# ========== 前向传播 ==========
output = cross_attn(hidden_states, encoder_hidden_states, attention_mask)
# 输出: [1, 291600, 3072]

print(f"输入图像特征: {hidden_states.shape}")
print(f"输入文本特征: {encoder_hidden_states.shape}")
print(f"输出特征: {output.shape}")
print(f"输出包含了文本引导的语义信息!")

输出

复制代码
输入图像特征: torch.Size([1, 291600, 3072])
输入文本特征: torch.Size([1, 512, 4096])
输出特征: torch.Size([1, 291600, 3072])
输出包含了文本引导的语义信息!

6.3 可视化 Attention 权重

python 复制代码
import matplotlib.pyplot as plt
import seaborn as sns

def visualize_attention(
    attention_probs: torch.Tensor,  # [num_heads, N, M]
    text_tokens: list,               # 文本 token 列表
    save_path: str = "attention_map.png"
):
    """
    可视化某个图像 token 对所有文本 token 的注意力权重
    
    Args:
        attention_probs: Attention 权重 [num_heads, N, M]
        text_tokens: 文本 token 列表 (长度 M)
        save_path: 保存路径
    """
    # 选择中心的图像 token (例如 token #100000)
    img_token_idx = 100000
    
    # 平均所有头的注意力
    attn_weights = attention_probs[:, img_token_idx, :].mean(dim=0)  # [M]
    attn_weights = attn_weights.cpu().numpy()
    
    # 只显示前 50 个 token (去除 padding)
    text_tokens = text_tokens[:50]
    attn_weights = attn_weights[:50]
    
    # 绘制
    plt.figure(figsize=(15, 6))
    bars = plt.bar(range(len(text_tokens)), attn_weights)
    plt.xlabel("文本 Token")
    plt.ylabel("Attention 权重")
    plt.title(f"图像 Token #{img_token_idx} 对文本的注意力分布")
    plt.xticks(range(len(text_tokens)), text_tokens, rotation=45, ha='right')
    plt.tight_layout()
    
    # 高亮最相关的 token
    top_k = 3
    top_indices = attn_weights.argsort()[-top_k:]
    for idx in top_indices:
        bars[idx].set_color('red')
    
    plt.savefig(save_path, dpi=300)
    print(f"注意力图已保存到: {save_path}")
    
    # 打印 Top-K
    print(f"\n最相关的 {top_k} 个文本 token:")
    for idx in top_indices[::-1]:
        print(f"  [{idx}] {text_tokens[idx]}: {attn_weights[idx]:.4f}")

# ========== 使用示例 ==========
text_tokens = ["一", "只", "猫", "在", "雨", "中", "行", "走"] + ["<pad>"] * 42

# 假设我们已经得到了 attention_probs
# attention_probs: [40, 291600, 512]

visualize_attention(
    attention_probs,
    text_tokens,
    save_path="cross_attention_visualization.png"
)

输出示例

复制代码
注意力图已保存到: cross_attention_visualization.png

最相关的 3 个文本 token:
  [2] 猫: 0.6500
  [4] 雨: 0.2000
  [6] 行: 0.0900

七、Cross-Attention 的优化技巧

7.1 xDiT 中的并行化策略

Tensor Parallel (TP): 切分注意力头

python 复制代码
# xfuser/model_executor/layers/wan_attention.py
if self.tp_degree > 1:
    self.tp_heads = self.heads // self.tp_degree
    
    # 例如: 40 个头, TP=4
    # 每个 GPU 处理 10 个头
    
    # GPU 0: heads [0-9]
    # GPU 1: heads [10-19]
    # GPU 2: heads [20-29]
    # GPU 3: heads [30-39]

Ulysses Parallel (USP): 切分序列长度

python 复制代码
# xfuser/model_executor/layers/usp.py:158-170
def _ft_c_input_all_to_all(x, sp_group=None):
    world_size = get_ulysses_parallel_world_size()
    b, h, s, d = x.shape
    
    # All-to-All 通信
    # 将序列维度 s 切分到 world_size 个 GPU
    # 每个 GPU 处理 s // world_size 的序列

组合策略

复制代码
8 GPU 配置:
  TP = 4: 40 个头 → 每 GPU 10 个头
  USP = 2: 291600 个 token → 每 GPU 145800 个 token
  
  每个 GPU 的 Cross-Attention:
    Query: [B, 10, 145800, 77]
    Key/Value: [B, 10, 512, 77]
    
  内存节省: ~8×
  通信开销: TP (all-reduce) + USP (all-to-all)

7.2 FlashAttention 加速

原理: Kernel 融合 + Tiling

python 复制代码
# 传统实现 (3 步)
scores = Q @ K.T          # [N, M],占用 O(NM) 内存
attn = softmax(scores)    # [N, M]
output = attn @ V         # [N, D]

# FlashAttention (融合)
output = flash_attn_func(Q, K, V)
# 中间结果不存储,内存 O(N)

xDiT 中的使用

python 复制代码
from vllm_flash_attn import flash_attn_varlen_func

output, lse = flash_attn_varlen_func(
    q=query,
    k=key,
    v=value,
    cu_seqlens_q=cu_seqlens_q,
    cu_seqlens_k=cu_seqlens_k,
    max_seqlen_q=max_seqlen_q,
    max_seqlen_k=max_seqlen_k,
    dropout_p=dropout_p,
    softmax_scale=softmax_scale,
    causal=False,  # Cross-Attention 不需要 causal mask
)

加速效果

  • 内存: 减少 50-70%
  • 速度: 提升 2-4×

7.3 SageAttention: INT8 量化

原理: 将 Q、K 量化为 INT8

python 复制代码
def sageattn(i8_q, i8_k, v, q_scale, k_scale):
    """
    INT8 量化的 Attention
    
    内存: FP16 → INT8 (减少 50%)
    速度: INT8 计算更快 (提升 20-40%)
    """
    out, lse = flash_attn_func_int8(
        q=i8_q,
        k=i8_k,
        v=v,
        q_scale=q_scale,
        k_scale=k_scale,
        # ...
    )
    return out

量化策略

Tensor 量化方式 原因
Query (Q) Per-head 量化 保持精度
Key (K) Per-head 量化 影响 Attention 分布

八、常见问题 FAQ

Q1: Cross-Attention 和 Self-Attention 可以同时使用吗?

A : 是的!实际上,DiT 中每个 Transformer Block 都同时包含

python 复制代码
class TransformerBlock(nn.Module):
    def forward(self, x, context):
        # 1. Self-Attention (图像内部交互)
        x = x + self.self_attn(self.norm1(x))
        
        # 2. Cross-Attention (文本条件注入)
        x = x + self.cross_attn(self.norm2(x), context)
        
        # 3. FeedForward (非线性变换)
        x = x + self.ffn(self.norm3(x))
        
        return x

作用分工

  • Self-Attention: 让图像 token 之间相互交流,建立空间/时序一致性
  • Cross-Attention: 让图像 token 查询文本信息,注入语义引导

Q2: Attention Mask 的作用是什么?

A: 防止模型关注无效的 padding token

python 复制代码
# 文本输入: "一只猫" (3 个 token) + 509 个 padding
text_tokens = ["一只", "猫", "<pad>", "<pad>", ..., "<pad>"]
attention_mask = [1, 1, 0, 0, ..., 0]

# Attention 计算时:
scores = Q @ K.T  # [N, 512]
scores = scores.masked_fill(attention_mask == 0, float('-inf'))
attn = softmax(scores)  # padding 位置的权重变为 0

Q3: 多头注意力的"头"是什么意思?

A : 多头 = 多个子空间的并行 Attention

复制代码
单头 Attention (head_dim=3072):
  所有信息在一个 3072 维空间中交互

多头 Attention (40 heads, head_dim=77):
  40 个并行的 77 维子空间,各自独立学习不同的关注模式
  
  Head 1: 可能关注"物体"
  Head 2: 可能关注"动作"
  Head 3: 可能关注"场景"
  ...
  
  最后拼接所有头的输出

好处

  • 捕获多样化的关系
  • 提高表达能力
  • 易于并行化

Q4: 为什么要除以 √d_k?

A : 防止点积过大导致梯度消失

python 复制代码
# 假设 Q, K 各维度独立同分布, 均值 0, 方差 1
# 点积: QK^T 的每个元素 = Σ(q_i * k_i) for i=1 to d_k

# 期望: E[QK^T] = 0
# 方差: Var[QK^T] = d_k  # 随维度线性增长!

# 如果 d_k = 512:
#   QK^T 的标准差 ≈ √512 ≈ 22.6
#   Softmax 后梯度极小 (梯度消失)

# 缩放后:
scores = QK^T / √d_k
# Var[scores] = d_k / d_k = 1
# 标准差恢复到 1,梯度正常

Q5: xDiT 中如何支持超长文本?

A : 分块处理 + Sliding Window

python 复制代码
# 超长文本: 2048 tokens
# GPU 内存限制: 只能处理 512 tokens

# 方案 1: 截断 (信息丢失)
text_embed = text_embed[:, :512, :]

# 方案 2: 分块处理 (xDiT)
chunk_size = 512
outputs = []
for i in range(0, 2048, chunk_size):
    chunk = text_embed[:, i:i+chunk_size, :]
    output = cross_attn(hidden_states, chunk)
    outputs.append(output)

# 聚合输出 (平均或加权)
final_output = torch.mean(torch.stack(outputs), dim=0)

九、核心要点

  1. Cross-Attention 是文本条件注入的核心机制

    • Query 来自图像,Key/Value 来自文本
    • 实现细粒度的跨模态信息融合
  2. Shape 变化规律

    复制代码
    图像: [B, N_img, D_img] → Query: [B, num_heads, N_img, head_dim]
    文本: [B, N_txt, D_txt] → Key/Value: [B, num_heads, N_txt, head_dim]
    Attention: [B, num_heads, N_img, N_txt]
    输出: [B, N_img, D_img]
  3. 不同模型的策略差异

    • WAN/CogVideo: 标准 Cross-Attention
    • FLUX: Joint Attention (拼接 Self-Attention)
    • HunyuanVideo: 时序分离 + Cross-Attention
  4. xDiT 的优化

    • Tensor Parallel: 切分注意力头
    • Ulysses Parallel: 切分序列
    • FlashAttention: Kernel 融合
    • SageAttention: INT8 量化

完整代码示例

A.1 最小化 Cross-Attention 实现

python 复制代码
import torch
import torch.nn as nn
import math

class MinimalCrossAttention(nn.Module):
    """最小化的 Cross-Attention 实现,用于教学"""
    
    def __init__(self, dim: int, context_dim: int, num_heads: int = 8):
        super().__init__()
        self.num_heads = num_heads
        self.head_dim = dim // num_heads
        self.scale = self.head_dim ** -0.5
        
        self.to_q = nn.Linear(dim, dim)
        self.to_k = nn.Linear(context_dim, dim)
        self.to_v = nn.Linear(context_dim, dim)
        self.to_out = nn.Linear(dim, dim)
    
    def forward(self, x, context):
        """
        x: [B, N, dim] - 图像特征
        context: [B, M, context_dim] - 文本特征
        """
        B, N, _ = x.shape
        
        # QKV
        q = self.to_q(x)
        k = self.to_k(context)
        v = self.to_v(context)
        
        # 重塑为多头
        q = q.view(B, N, self.num_heads, self.head_dim).transpose(1, 2)
        k = k.view(B, -1, self.num_heads, self.head_dim).transpose(1, 2)
        v = v.view(B, -1, self.num_heads, self.head_dim).transpose(1, 2)
        
        # Attention
        attn = (q @ k.transpose(-2, -1)) * self.scale
        attn = attn.softmax(dim=-1)
        
        # 加权求和
        out = attn @ v
        out = out.transpose(1, 2).contiguous().view(B, N, -1)
        out = self.to_out(out)
        
        return out

# 使用
model = MinimalCrossAttention(dim=768, context_dim=1024, num_heads=8)
x = torch.randn(2, 100, 768)  # 图像
context = torch.randn(2, 50, 1024)  # 文本
output = model(x, context)  # [2, 100, 768]

A.2 完整的 Transformer Block

python 复制代码
class TransformerBlockWithCrossAttn(nn.Module):
    """包含 Self-Attention 和 Cross-Attention 的完整 Block"""
    
    def __init__(self, dim: int, context_dim: int, num_heads: int = 8):
        super().__init__()
        
        # Self-Attention
        self.norm1 = nn.LayerNorm(dim)
        self.self_attn = MinimalCrossAttention(dim, dim, num_heads)
        
        # Cross-Attention
        self.norm2 = nn.LayerNorm(dim)
        self.cross_attn = MinimalCrossAttention(dim, context_dim, num_heads)
        
        # FeedForward
        self.norm3 = nn.LayerNorm(dim)
        self.ffn = nn.Sequential(
            nn.Linear(dim, dim * 4),
            nn.GELU(),
            nn.Linear(dim * 4, dim),
        )
    
    def forward(self, x, context):
        # Self-Attention
        x = x + self.self_attn(self.norm1(x), self.norm1(x))
        
        # Cross-Attention
        x = x + self.cross_attn(self.norm2(x), context)
        
        # FeedForward
        x = x + self.ffn(self.norm3(x))
        
        return x

参考资料

  1. Attention Is All You Need (Vaswani et al., 2017)

    原始 Attention 机制

  2. Denoising Diffusion Probabilistic Models (Ho et al., 2020)

    扩散模型基础

  3. High-Resolution Image Synthesis with Latent Diffusion Models (Rombach et al., 2022)

    Stable Diffusion, Cross-Attention 在文生图中的应用

  4. Scalable Diffusion Models with Transformers (Peebles et al., 2023)

    DiT 架构

  5. xDiT: Efficient Diffusion Transformer Inference (xDiT Team, 2024)

    xDiT 框架

相关推荐
大模型服务器厂商41 分钟前
人形机器人的技术概况与算力支撑背景
大数据·人工智能
老蒋新思维43 分钟前
创客匠人洞察:AI 时代 IP 变现的认知重构,从流量焦虑到价值深耕的破局之道
网络·人工智能·tcp/ip·重构·知识付费·创始人ip·创客匠人
商汤万象开发者1 小时前
UniParse:让多模态模型真正“读懂”文档的解析引擎
人工智能·多模态模型·ai应用·文档解析·版面分析·内容提取
rit84324991 小时前
压缩感知信号恢复算法:OMP与CoSaMP对比分析
数据库·人工智能·算法
Elastic 中国社区官方博客2 小时前
ES|QL 在 9.2:智能查找连接和时间序列支持
大数据·数据库·人工智能·sql·elasticsearch·搜索引擎·全文检索
齐齐大魔王2 小时前
深度学习(三)
人工智能·深度学习
一个帅气昵称啊2 小时前
Net AI智能体开源框架NetCoreKevin为企业AI智能体系统Saas信息化建设赋能-开启智能应用的无限可能
人工智能·开源
yzx9910132 小时前
卷积神经网络(CNN):深度学习的视觉革命者
人工智能·机器学习
路边草随风2 小时前
python 调用 spring ai sse mcp
人工智能·python·spring