CatV2TON 深度解读
Part 1 · 为什么“视频试穿”不能只是逐帧换衣服
虚拟试穿(Virtual Try-On, VTON)看起来像是一个单一任务:给一张人物图和一件衣服,让模型生成“穿上之后”的结果。但一旦从图片走到视频,问题的性质会立刻改变。图片试穿只需要把一帧做得像;视频试穿还必须让衣服的纹理、褶皱、边缘、颜色和人体运动在几十甚至上百帧里保持一致。逐帧调用图像试穿模型,常常能得到漂亮的单帧,却会在视频里出现闪烁、颜色漂移和局部结构跳变。
CatV2TON 的切入点正是在这里:能不能不再为图像试穿和视频试穿分别设计两套模型,而是让一个模型同时处理静态图片和动态视频?论文给出的答案是:可以。关键不在于堆一个更复杂的 GarmentNet 或 ReferenceNet,而是把服装与人物条件放到 Transformer 最擅长的交互空间里,让 self-attention 自己学习两者关系。作者把这个思想称为 temporal concatenation,也就是沿时间维度拼接 garment 与 person 条件。论文在 arXiv 上提交于 2025 年 1 月,官方仓库标注为 CVPR 2025 Workshop 工作 #CatV2TON。
Part 2 · 两套模型、两种代价:现有 VTON 为什么割裂
现有方法大致分为两类。第一类是 image-based VTON,例如 OOTDiffusion、IDM-VTON、StableGarment、GP-VTON、CatVTON,它们擅长静态图片的服装保真、纹理迁移和人体姿态适配 #CatVTON。第二类是 video-based VTON,例如 ViViD、ClothFormer、WildVidFit、Tunnel Try-On,它们更关心跨帧一致性和动态动作中的服装变形 #ViViD。
二者的问题也刚好互补:图像方法逐帧处理视频会缺少时序约束;视频方法虽然具备动态建模能力,却往往在静态图像试穿质量上不如专用图像模型。更麻烦的是,许多扩散式试穿方法还要额外引入 ReferenceNet、GarmentNet 或双流注意力网络,让训练和部署成本上升。
flowchart LR A[Person Image / Video] --> B[Masked Person + Mask] C[Garment Image] --> D[Garment Condition + Zero Mask] B --> E[Temporal Concatenation] D --> E F[DensePose] --> G[Lightweight Pose Encoder] E --> H[DiT Self-Attention] G --> H H --> I[Image / Video Try-On Result] I --> J[Overlapping Clip Inference] J --> K[AdaCN for Long Video Consistency]
| 路线 | 代表方法 | 优势 | 局限 |
|---|---|---|---|
| 图像试穿 | OOTDiffusion、IDM-VTON、CatVTON | 单帧纹理与细节好 | 视频逐帧应用会产生闪烁 |
| 视频试穿 | ViViD、ClothFormer、WildVidFit | 有时序建模能力 | 图像任务不一定强,结构常较复杂 |
| CatV2TON | 本文 | 图像/视频统一,参数高效 | 清晰度和物理一致性仍受基础视频模型限制 |
Part 3 · 方法核心:temporal concatenation 如何让 DiT 自己学会试穿
CatV2TON 的 backbone 来自 EasyAnimateV4,这是一个基于 Diffusion Transformer 的视频生成模型;视频 VAE 使用预训练 MagViT。作者删除了文本相关的 cross-attention,因为试穿任务并不需要 CLIP 或文本条件,而是需要人物、mask、pose 和 garment 之间的视觉条件交互 #EasyAnimate。
输入侧可以分成三组条件。第一组是 person-related conditions:作者先用 mask 遮住原人物中要替换的衣服区域,得到 masked person,再把 masked person 与 mask 沿 channel dimension 拼接。第二组是 garment-related conditions:为了让 garment 条件和 person 条件形态对齐,作者给 garment 配一个 all-zero mask,然后再把 garment 条件与 person 条件沿 temporal dimension 拼起来。第三组是 pose conditions:论文使用 DensePose 而不是 OpenPose/MMPose 骨架,因为 DensePose 能给出更细粒度的人体表面对应关系。
这个 temporal concatenation 是全文最关键的设计。传统双流试穿模型会把 garment 当成另一个分支,让它通过 cross-attention 或额外编码器影响生成结果。CatV2TON 则更“懒”:把 garment 放进时间序列,让 DiT 的 self-attention 自己学习 garment token 与 person token 的关系。这种做法的好处是结构极简,且天然适配视频模型,因为视频 DiT 本来就在处理时空 token。
CatV2TON 的条件交互方式
masked person 与 mask 先在通道维拼接;garment 侧用 all-zero mask 对齐;person 条件和 garment 条件再在时间维拼接。最终,try-on 关系不是通过额外网络硬编码,而是在 DiT self-attention 中学习。
Pose Encoder 的设计也很节制。作者没有引入一个大型控制分支,而是复制第一个 DiT block 作为 Pose Encoder,并在第一个 backbone block 后用 element-wise addition 注入。Pose Encoder 完全解锁训练,而 backbone 中只解锁涉及交互的 self-attention layers。最终可训练参数只有 89.90M,少于 backbone 总参数的 20% #CatV2TON。
这里有一个容易误读的点:Pose Encoder 不是 MMDiT 那种双流 joint attention,也不是完整 ControlNet。它更像一个轻量姿态适配器:先把 DensePose 编成与主干 hidden states 对齐的特征,再通过加法把姿态信息注入主干。这解释了为什么它既能提升复杂姿态下的生成质量,又不会把模型复杂度拉高。
从代码仓看,论文的“轻量”不是口号
官方仓库同样支持这个判断。代码组织里有 modules、easyanimate、densepose、eval_image_try_on.py、eval_video_try_on.py 等入口,说明作者不是只给出论文图,而是把图像评测、视频评测、姿态条件和 EasyAnimate 主干都拆成了可运行模块。对读者来说,这一点很重要:CatV2TON 的核心不依赖一个隐藏的巨大 garment branch,而是把已有视频生成主干改造成试穿模型。
Temporal concatenation 的形式化理解
可以把人物条件记作 $C_{person}$,服装条件记作 $C_{garment}$。CatV2TON 做的不是额外构造一个 cross-attention 分支,而是把二者沿时间维拼成统一条件序列:
这不是论文额外提出的新损失函数,而是对架构图中“temporal concatenation”操作的等价说明。它帮助我们理解:服装信息之所以能影响人物生成,是因为二者被放进同一个 DiT token 序列,由 self-attention 完成交互。
Part 4 · 长视频生成:overlap + AdaCN 的统计对齐
统一图像和短视频之后,另一个难点是长视频。一次性生成完整长视频会消耗大量显存和时间;把长视频切段生成又会带来片段之间的颜色漂移、动作错位和纹理不连续。CatV2TON 的策略是 overlapping clip-based inference:把长视频切成多个重叠片段,每段生成完之后,将末尾的 $k$ 帧作为下一段的 prompt frames。
但 prompt frames 本身会经历 denoising,特征统计会发生偏移。于是下一段虽然“看到了”上一段末尾,却可能在颜色或局部纹理上对不上。AdaCN 就是为了解决这个问题。它借鉴 AdaIN 的思想,把图像风格迁移中的统计量对齐扩展到 video clip 级别。
Adaptive Clip Normalization
公式为:
其中 $x$ 是当前 clip,$y$ 是 prompt frame features,$x_0$ 是 denoised prompt frames;$\mu_y, \sigma_y$ 来自提示帧,$\mu_x, \sigma_x$ 来自去噪后的提示帧。直觉上,它先把当前片段按自己的统计量归一化,再用上一段提示帧的统计量重新缩放,使片段边界更连续。
消融图展示了 AdaCN 的实际意义:不用 AdaCN 时,视频越长,服装区域越容易出现累积色差;使用 AdaCN 后,跨片段颜色和纹理更稳定。需要注意的是,论文表格中个别指标并不是 full model 全部最优,因此更准确的结论是:AdaCN 对视觉连续性和部分视频质量指标有帮助,尤其缓解了长视频中的颜色漂移,而不是“所有指标都绝对提升”。
Part 5 · 训练、数据与实验:统一模型有没有付出代价
CatV2TON 的训练是三阶段 progressive strategy。第一阶段在 256×192 分辨率上训练,使用 DressCode、VITON-HD、ViViD、VVT,72 帧、batch size 16、128K steps;第二阶段升到 512×384,使用 DressCode、VITON-HD、ViViD,48 帧、batch size 8、64K steps;第三阶段升到 832×624,使用 DressCode、VITON-HD、ViViD-S,32 帧、batch size 1。所有阶段使用 AdamW,constant learning rate 为 1e-5,gradient clipping 为 1.0,训练硬件是 4 张 NVIDIA A100 #CatV2TON。
ViViD-S 是本文容易被忽略但很重要的贡献。原始视频试穿数据里有大量背面帧,但服装图通常只有正面视角,这会让模型学习一个信息不充分的问题。作者训练 EfficientNet 朝向分类器,从 7,759 个 ViViD 训练视频中筛出 6,064 个视频、513,896 个正面帧;又用 3D Mask Smoothing 缓解逐帧人体解析带来的 mask 抖动 #CatV2TON。
| 数据集 | CatV2TON 关键结果 | 解读 |
|---|---|---|
| VITON-HD | SSIM 0.8902、LPIPS 0.0570、unpaired KID 2.986 最优 | 统一模型没有牺牲图像试穿质量。 |
| DressCode | SSIM 0.9222、LPIPS 0.0367、unpaired FID 8.627、KID 3.838 最优 | 跨服装类别泛化较强。 |
| VVT | paired VFID_I 1.778、VFID_R 0.0103、LPIPS 0.0385 最优 | 视频质量指标显著优于传统视频试穿 baseline。 |
| ViViD | paired VFID_I 13.5962、SSIM 0.8727、LPIPS 0.0639;unpaired VFID_I 19.5131 全部最优 | 在更贴近本文数据构造的视频场景中优势最明显。 |
从实验上看,CatV2TON 最有说服力的地方不是某一个指标绝对第一,而是它在两个任务族上同时站住了。VITON-HD 和 DressCode 说明它没有因为支持视频而牺牲图像质量;VVT 和 ViViD 则说明它比逐帧图像试穿、图像试穿 + MagicAnimate、以及已有视频试穿 baseline 更稳定。换句话说,统一模型没有明显付出“什么都能做但什么都不强”的代价。
Part 6 · 讨论与启发:不是堆模块,而是改变条件交互方式
CatV2TON 最值得带走的启发,是它把试穿问题从“我要设计一个服装专用网络”转成了“我要让条件在合适的 token 维度上交互”。CatVTON 用 spatial concatenation 证明了图像试穿里拼接足够强;CatV2TON 用 temporal concatenation 进一步说明,在视频 DiT 里,服装可以作为时间维条件参与 self-attention。这是一条很有工程价值的路线:当基础生成模型足够强时,任务适配未必需要大规模新增模块,而可能只需要重新组织输入条件。
当然,论文也明确承认了局限。第一,视频清晰度仍不足。虽然 832×624 的像素数不算低,但动态视频中的清晰度和细节稳定性仍难满足真实应用。第二,服装运动需要遵守物理规律,而现有视频基础模型还不能准确模拟衣物在动作中的真实形变。第三,ViViD-S 通过过滤背面帧提升数据质量,但这也意味着模型尚未真正解决“只有正面服装图却要生成背面效果”的信息缺失问题 #CatV2TON。
参考来源
- #CatV2TON — Chong et al., CatV2TON: Taming Diffusion Transformers for Vision-Based Virtual Try-On with Temporal Concatenation, 2025
- #CatVTON — CatVTON: Concatenation Is All You Need for Virtual Try-On with Diffusion Models
- #EasyAnimate — EasyAnimate: A High-Performance Long Video Generation Method Based on Transformer Architecture
- #ViViD — ViViD: Video Virtual Try-On using Diffusion Models