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 (清晰图像)
但这里有一个核心问题:如何让模型知道我们想生成什么?
- 用户输入:
"一只猫在雨中行走"(文本) - 模型生成:? (图像/视频)
传统方案的局限:
-
简单拼接 (Concatenation)
pythoncombined = torch.cat([noise_latent, text_embed], dim=-1)- 文本和图像维度不匹配
- 无法精确对齐语义
-
条件嵌入 (Conditional Embedding)
pythonlatent = latent + text_embed # 简单相加- 文本信息被平均稀释
- 无法建立细粒度对应关系
1.2 Cross-Attention 的突破
Cross-Attention 的核心思想:
让图像的每一个 patch 都能"查询"文本中相关的信息
文本: "一只猫在雨中行走"
↓ 分词编码
["一只", "猫", "在", "雨中", "行走"]
↓
图像 Patch 1 (左上角):
- Query: "这个区域应该画什么?"
- 从文本中查询: "雨中" (权重 0.7), "猫" (权重 0.3)
- 生成: 下雨的背景
图像 Patch 2 (中心):
- Query: "这个区域应该画什么?"
- 从文本中查询: "猫" (权重 0.9), "行走" (权重 0.1)
- 生成: 猫的主体
优势:
- 细粒度对齐:每个图像 patch 可以关注不同的文本部分
- 动态权重:Attention 权重可学习,自适应调整
- 信息保留:文本语义不被稀释
二、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 代码位置与调用流程
主要涉及的文件:
- Pipeline :
xfuser/model_executor/pipelines/piple_wan.py - Transformer :
xfuser/model_executor/models/transformers/wan_transformer_3d.py - 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
关键点:
-
to_q, to_k, to_v 是线性投影层
pythonself.to_q = nn.Linear(dim, dim) self.to_k = nn.Linear(cross_attention_dim, dim) self.to_v = nn.Linear(cross_attention_dim, dim) -
维度匹配
hidden_states: 图像 latent 的维度(如 3072)encoder_hidden_states: 文本 embed 的维度(如 4096)to_k和to_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)
九、核心要点
-
Cross-Attention 是文本条件注入的核心机制
- Query 来自图像,Key/Value 来自文本
- 实现细粒度的跨模态信息融合
-
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] -
不同模型的策略差异
- WAN/CogVideo: 标准 Cross-Attention
- FLUX: Joint Attention (拼接 Self-Attention)
- HunyuanVideo: 时序分离 + Cross-Attention
-
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
参考资料
-
Attention Is All You Need (Vaswani et al., 2017)
原始 Attention 机制
-
Denoising Diffusion Probabilistic Models (Ho et al., 2020)
扩散模型基础
-
High-Resolution Image Synthesis with Latent Diffusion Models (Rombach et al., 2022)
Stable Diffusion, Cross-Attention 在文生图中的应用
-
Scalable Diffusion Models with Transformers (Peebles et al., 2023)
DiT 架构
-
xDiT: Efficient Diffusion Transformer Inference (xDiT Team, 2024)
xDiT 框架