跳转到内容

JEDi

jedi(JEPA Embedding Distance)衡量一批预测视频与一批参考视频在特征分布上的差距,定位是 FVD 的替代品。它来自 Beyond FVD [Luo et al., 2025]:把 I3D 特征空间换成 V-JEPA 特征空间,把 Fréchet 距离换成多项式核 MMD。

WorldAtlas 通过 jedi backend 调用仓内的 oooolga/JEDi 官方实现(thirdparty/JEDi,包名 videojedi)。与 fvmd 一样,它是 suite 级分布指标:整个 suite 只出一个分数。

  • 预测视频集合的特征分布是否接近参考视频集合,同时覆盖单帧质量、时序一致性与内容多样性。
  • 分布层面的塌缩:如果模型只会生成某一类外观或某一种运动,即使单条视频看起来不错,分布距离也会拉大。
  • 不测逐样本质量:它无法回答”这一条视频得几分”,这类问题应交给 perceptual_quality、image_quality 等逐样本指标。
  • 不测 prompt 遵循与几何正确性。

FVD 的可靠性建立在两个前提上,而 Beyond FVD 的分析表明两者都不成立。

第一,I3D 特征不服从多元高斯分布。 Fréchet 距离只比较分布的前两阶矩,这在高斯假设下才等价于比较分布本身。论文在 11 个视频数据集上抽取 48,501 个特征,用 Mardia 偏度、Mardia 峰度和 Henze-Zirkler 正态性检验逐一检查,正态性原假设在所有数据集、所有检验上都被强烈拒绝(p=0p = 0)。降维到 PCA/LDA 空间可视化后可以看到,特征是按数据集聚成簇的,而不是单一高斯。视频越长,这种偏离越明显。

第二,I3D 特征对时序失真不敏感。 这是更严重的问题。论文给测试集加入轻微的逐帧模糊后,FVD 从 69.0 反而降到 68.1——它认为加了噪声的视频更接近真实分布,等于把质量下降读成了质量提升。I3D 对椒盐噪声这类空间失真过度敏感,对时序失真却相对迟钝。

第三,Fréchet 距离的样本效率最差。 协方差矩阵需要估计 k(k+1)/2k(k+1)/2 个参数,而 I3D 是 400 维、V-JEPA 是 1280 维;样本数少于维度时协方差矩阵直接奇异。论文实测 FVD 在 UCF-101 上需要 4,350 个样本、在 SSv2 上需要 4,700 个样本才能收敛到 5% 误差带内,而很多常用数据集根本没有这么多不重复的视频。常见的绕法是把视频切成部分重叠的短片段,但这会因数据重复而系统性地扭曲指标。

JEDi 针对这三点各换一个部件:用 MMD 取代 Fréchet 距离,从而不需要任何参数化分布假设;用 V-JEPA 特征取代 I3D 特征,因为它对时序失真更敏感、与人类判断更一致。论文测得的收益是:达到稳定值只需 16% 的样本量(UCF-101 上 700 对 4,350),与人类评价的对齐度平均提升 34%。

  1. WorldAtlas 收集当前 suite 的全部 prediction 视频。参考侧来自参考语料库(见 参考语料库),而不是每个样本自己的 reference 资产,因此两侧是规模不同的独立集合。
  2. 每个视频先重采样到 sample_fps = 8,再切成 16 帧、224×224224 \times 224 的 clip,即固定 2 秒窗口(clip_frame_count = 16、analysis_size = 224)。prediction 取 1 个窗口,语料视频最多取 2 个。
  3. GPU 编码前,参考集先经过独立于模型的 CPU 预筛选:排除确认解码异常、原生帧率低于 sample_fps 或采样后不足 16 帧的视频。完整清单与原因保存在 reference_selection.json,绑定全部候选视频内容与采样协议,各模型复用同一清单。ffprobe -count_frames 时限至少 600 秒并按文件大小放大(上限 7200 秒);超时是操作失败,不会把该参考标成不合格。预测视频不使用此筛选;预测解码失败、或已入选参考视频在编码阶段失败,仍使本次评测失败,不能临时缩小集合后发布分数。与逐样本解码相同:若 OpenCV 容器帧数比实际解码帧数多 1,按实际帧数重采样,该视频仍进入集合。
  4. reference clip 作为 train_loader、prediction clip 作为 test_loader 传给 JEDiMetric。
  5. V-JEPA ViT-Huge/16 编码器加 SSv2 attentive probe 提取每个 clip 的 1280 维特征;batch_size = 4,num_samples 取两侧 clip 数的较大值。
  6. 在两组特征上计算 degree-2 多项式核 MMD。
  7. 结果乘以 100 得到 raw 分数。
  8. WorldAtlas 按 lower = 0.0、upper = 100.0、越低越好做有界归一化。

raw 分数越低,说明两批视频的特征分布越接近。

num_samples 这里需要说明:上游对两侧使用同一个上限,feature_aggregator 会把每一侧截断到该值。若取两侧的较小值,参考语料就会被截断回 prediction 的数量,固定语料库的意义也就没了;因此取较大值,两侧都不被截断。

clip 是按墙钟时长切分的,而不是按原始帧数。若固定取连续若干帧,不同帧率的视频覆盖的时长不同,一段 16 fps 的生成 rollout 与一段 30 fps 的采集视频就会在不同的时间跨度上被比较。sample_fps 先把两侧重采样到同一帧率;并且拒绝上采样,因为复制帧会造出并不存在的运动。这一点对 fvmd 最关键(它的特征就是逐帧位移),在这里也能让 V-JEPA 的时序感受野保持一致。

V-JEPA 是自监督训练范式,通过在抽象表征空间中预测被 mask 的视频片段来学习表示,而不是在像素空间重建。这与 VideoMAE 的掩码自编码目标不同,也是论文认为它对时序失真更敏感的原因:它的训练目标本身就要求模型理解视频在表征空间中如何随时间演化。

当前配置走的是论文中的 V-JEPASSv2\text{V-JEPA}_{\text{SSv2}} 变体,即预训练编码器加上在 Something-Something-v2 上训练的 attentive classification probe,取 pre-logit 特征用于分布分析。这一点很重要:论文的消融显示 V-JEPAPT\text{V-JEPA}_{\text{PT}}(纯预训练)在训练时长实验中无法捕捉渐进改进,只有 V-JEPASSv2\text{V-JEPA}_{\text{SSv2}} 做到了。

组件当前配置
配置文件thirdparty/JEDi/configs/vith16_ssv2_16x2x3.yaml
编码器V-JEPA ViT-Huge/16,ckpt/JEDi/vith16.pth.tar
ProbeSSv2 attentive probe,ckpt/JEDi/ssv2-probe.pth.tar
特征维度1280
Clip 规格16 帧、224×224224 \times 224、tubelet size 2、patch size 16

Maximum Mean Discrepancy 把两个分布映射到再生核希尔伯特空间,比较它们的均值嵌入之差。它不假设分布形状,因此绕开了 FVD 的高斯性前提。JEDi 使用的多项式核为:

其中 dd 与 c0c_0 由上游显式指定,γ\gamma 未指定而落到 scikit-learn 的默认值 1/nfeatures1 / n_{\text{features}},在 1280 维特征下即 1/12801/1280。

给定参考特征集合 X={xi}i=1mX = \{x_i\}_{i=1}^{m} 与预测特征集合 Y={yj}j=1nY = \{y_j\}_{j=1}^{n},上游使用包含对角项的有偏估计:

最终 raw 分数是它乘以 100:

其中 Φ\Phi 是 V-JEPA 特征提取器。这个 100 倍缩放没有统计含义,纯粹是论文为了可读性引入的——原始 MMD 值通常在 10−210^{-2} 量级(论文实测无噪声时为 0.017,高强度模糊时为 0.571)。归一化上界 upper = 100.0 与这个量级相匹配。

参考侧是由 benchmark.reference_corpus 配置、经 worldatlas build-reference-corpus 建立索引的采集视频语料库。由此带来两个结果。

图像条件的 suite 现在也有分布分数了。 此前参考侧是每个样本自己的资产,而 image_static / image_dynamic 那里放的是一张静图,于是这两个 suite 被静默排除。现在只要求 prediction 是视频。

参考分布不再被 prediction 数量卡住。 配对方式让参考侧的 clip 数恰好等于 prediction 数,这远低于 MMD 估计所需的样本量——论文测得 UCF-101 上约需 700 个样本才收敛。语料库能提供数千个,且与本次评测了多少样本无关。

静态 prediction 会被算两次:一次覆盖整个静态语料库(主表数字),一次按 (style, environment) 分层,从而能把分布偏移归因到某种风格或某个场景域。按 style 分层至少和按 environment 一样重要——photorealistic 与 stylized 在 V-JEPA 特征空间里的差距足够大,语料构成不匹配会让模型因为风格而非质量被惩罚。

分层结果是诊断,不是主表数字。某个分层的 clip 数低于 min_prediction_clips 或 min_reference_clips 时记为 not_applicable,而不是给出一个不稳定的分数,主表数字不受影响。

语料库的内容签名写入 run_manifest.json 的 reference_corpus。不同语料版本之间的分数不可比。

上游 JEDiMetric.load_features() 对 train.npy 与 test.npy 是分别检查的:哪一侧的文件存在就从磁盘加载,不存在才计算。WorldAtlas 基于这一点把语料特征跨 run 缓存下来。

参考特征存放在 benchmark.reference_corpus.cache_dir,签名由语料文件身份(路径、大小、mtime_ns)、clip 采样规格,以及 vith16.pth.tar、ssv2-probe.pth.tar 与配置文件的 checkpoint 状态共同决定。命中缓存时该文件被链接进本次 run 的特征目录,于是 V-JEPA 只跑 prediction,语料视频连解码都不需要。prediction 特征单独计签名,两个模型之间不会互相复用。

签名刻意基于文件身份而非解码后的像素。像早期版本那样哈希像素字节,意味着为了判断”能否命中缓存”就得先把整个语料解码一遍——在任何工作被省下来之前先做几个 GB 的哈希。

jedi 与 fvmd 一同登记在 SUITE_LEVEL_METRICS 中,不会被实例化成逐样本 Metric 对象:

  • Shard worker 阶段:worker 只收集 prediction 视频,不在 shard 内部计算 JEDi。
  • Merge 阶段:合并全部 shard 后重建 prediction 集合,再对每个 suite 的完整集合各算一次。

MMD 的三项求和都跨越整个集合,按 shard 分别计算再平均在数学上不等于全集上的 MMD。分布指标必须在合并后计算。

项目当前实现
预测输入当前 suite 内全部 prediction 视频,各取一个 2 秒 clip,作为 test_loader
参考输入对应的参考语料分组,每个视频最多 2 个 clip,作为 train_loader,与 prediction 数量无关
标注输入无
适用 suiteimage_static、image_dynamic、video_static、video_dynamic
聚合维度quality
Raw 输出整个 suite 一个标量,等于 MMD 乘以 100,越低越好
归一化输出一个 [0, 1] 标量,lower = 0.0、upper = 100.0、越低越好
结果落盘distribution_metric_details.json 的 <suite>.jedi,含 raw、normalized、backend、details 与 groups;并在 distribution_group_breakdown.json 中汇总
细节字段prediction 与 reference 的 clip 构建报告(candidate_video_count、used_video_count、clip_count、skipped_video_count、skipped_videos_preview、source_fps_min/median/max)、prediction_clip_spec、reference_clip_spec、prediction_signature、reference_signature、reference_selection_sha256、reference_population、reference_cache_hit、reference_cache_dir、feature_dir、reference_feature_count、prediction_feature_count、model_dir、config_path、batch_size、num_samples、raw_direction、repo_root、torch_home
无监督形式当前 suite 没有 prediction 视频、没有对应参考分组、或 clip 数低于 min_prediction_clips / min_reference_clips 时记为 not_applicable
失败形式有效 clip 数少于 min_clip_count = 2 时整个指标失败并记入 failure_summary,不会被记为 0
运行依赖需要 GPU;V-JEPA 包装会初始化 gloo 进程组,即使单卡也走 distributed 路径
项目结论
当前聚合状态在 image_static、image_dynamic 中只要产出数值分数就是 official,并计入 quality 维度。video_static / video_dynamic 只作参考分布
论文可用性结论主表可用,是本仓分布级质量指标里样本效率最好的一项,但仍需标注样本量与语料版本
  • 在分布级质量指标里,它是当前最值得信任的一项。论文的人类研究中,V-JEPA 特征空间上的距离在 UCF-101 与 Sky Scene 上都明显优于 I3D 和 VideoMAE;训练时长实验中只有 JEDi 的 Spearman 相关性达到 −1-1 且具统计显著性,FVD 只有 −0.6-0.6。
  • 样本效率好,但不等于样本量无关。 论文口径下 JEDi 在 UCF-101 上需要约 700 个样本收敛,在 T2VQA-DB 上需要 100 到 300 个。语料库能保证参考侧足够,但 prediction 侧受本次评测样本量限制,分层还会进一步切分。跨模型比较时应确认 prediction.clip_count 相当,并把分层结果当诊断而非主表数字。
  • 参考集合的角色需要说明。 论文里的 train 是真实视频分布,test 是待评生成分布。本仓把参考语料库当作 train,因此这个分数衡量的是”预测分布与该语料库的距离”,而不是与某个通用真实视频分布的距离。报告数值时应一并给出 run_manifest.json 里的 reference_corpus.signature。
  • 要对着 real-vs-real 地板值读。 scripts/calibrate_distribution_metrics.py 把语料库对半切开互相评分。两半都是真实视频,所以结果就是完美模型能达到的地板值,同时也是整条链路的 sanity check:地板值远高于 0 说明问题在 clip 采样或样本量,而不在任何模型。语料签名 7e8b304026f0b043dc53、每半 200 条视频的实测 raw 地板值(已经乘过 100)为:dynamic 0.096,static photorealistic indoor 0.037 / outdoor 0.078,static stylized indoor 0.062 / outdoor 0.062,static 并集 0.057。这些值落在 0.04–0.10,说明采样与帧率对齐是通的;当前 upper = 100.0 仍按论文量级留着,等有模型侧分数再收紧。完整记录在 artifacts/benchmark/reports/distribution_calibration/calibration_summary.json。
  • 它在 quality 维度下与 fvmd 形成分工:jedi 落在 quality,覆盖整体分布质量;fvmd 落在 physics,只看运动分布。两者的特征空间与距离度量都不同,不应互相替代。
  • 它同样不是逐样本诊断工具。分数变差只说明分布整体偏移,不指向具体哪些视频有问题;定位问题样本仍需依赖逐样本指标与 skipped_pairs_preview 之类的运行细节。

BibTeX
@inproceedings{luo2025beyondfvd,
title = {Beyond {FVD}: An Enhanced Metric for Evaluating Video Generation Distribution Quality},
author = {Luo, Ge Ya and Favero, Gian Mario and Luo, Zhi Hao and Jolicoeur-Martineau, Alexia and Pal, Christopher},
booktitle = {International Conference on Learning Representations ({ICLR})},
year = {2025},
}