架构核心解析
Seedance 2.0 面向的是高保真视频生成,主打双分支扩散变换器(Dual-Branch Diffusion Transformer)。它最关键的地方,不是把模型做得更大,而是把时空建模拆开了:一条分支处理帧内空间语义,另一条分支盯住跨帧时序变化。和把时空维度直接揉在一起的单流 Transformer 比,这种拆法更细,也更容易把细节和运动各自管住。
双分支协同机制
空间分支用的是分层 ViT,输入先做 16×16 patch 嵌入,再逐级下采样,尽量保住局部纹理和结构信息。时间分支则把同一空间位置在多帧里的 token 沿时间轴堆起来,用轻量级时序注意力去建模运动变化。两路输出最后交给 Cross-Gating Fusion(CGF)融合,门控权重由共享的上下文感知投影器动态生成。
class CrossGatingFusion(nn.Module):
def __init__(self, dim):
super().__init__()
self.proj_s = nn.Linear(dim, dim) # 空间分支门控投影
self.proj_t = nn.Linear(dim, dim) # 时间分支门控投影
self.sigmoid = nn.Sigmoid()
def forward(self, x_s, x_t):
# x_s: [B, T, H*W, D], x_t: [B, T, H*W, D]
gate_s = self.sigmoid(self.proj_s(x_t)) # 用时间特征调控空间分支
gate_t = self.sigmoid(self.proj_t(x_s)) # 用空间特征调控时间分支
return x_s * gate_s + x_t * gate_t # 加权融合
这类设计的好处很直接:空间分支不会被运动噪声拖着走,时间分支也不需要硬扛全部纹理建模,融合点只负责把两者对齐。
性能对比
| 模型 | FVD↓ | PSNR↑ | 参数量(M) |
|---|---|---|---|
| VideoDiffusion | 142.3 | 28.7 | 1240 |
| Seedance 1.0 | 118.9 | 30.2 | 985 |
| Seedance 2.0 | 96.4 | 32.6 | 1052 |
从这组数据看,Seedance 2.0 在画面质量和时序一致性上都更稳,参数量也没有失控。它不是单纯靠堆参数换来的提升。
训练流程要点
- 先做渐进式分支解冻:前 5K 步只更新空间分支,后 10K 步再联合微调

