google-deepmind/videoprism
Official repository for "VideoPrism: A Foundational Visual Encoder for Video Understanding" (ICML 2024)
VideoPrism – 通用视频编码器
是什么 – VideoPrism 是一种面向视频的类基础视觉编码器。它是一个 JAX/Flax 模型,能够将原始视频片段转换为丰富的时空嵌入,并且还附带一个配对的视频-文本编码器,用于跨模态检索及相关任务。
为何重要 – 作者在庞大的混合数据集上预训练了该模型(10 亿张图像-文本对、3600 万条高质量视频-文本对,以及 5.82 亿条噪声视频片段)。仅使用单一冻结的骨干网络,就在 33 个公开视频理解基准中的 31 个上取得了最先进(SOTA)的结果,涵盖分类、检索、定位、字幕生成和问答任务。
如何使用 – 安装包后(pip install .),可使用辅助函数 videoprism.models.get_model 和 load_pretrained_weights 加载检查点。README 提供了两个简短的代码片段:
import jax
from videoprism import models as vp
# 仅视频编码器
model = vp.get_model('videoprism_public_v1_base')
state = vp.load_pretrained_weights('videoprism_public_v1_base')
@jax.jit
def encode(video):
return model.apply(state, video, train=False)
对于视频-文本版本,还需加载 SentencePiece 分词器(c4_en),并同时传入视频张量和分词后的文本。
预建演示 – 仓库附带三个 Colab 笔记本,逐步演示:
- 视频编码器演示 – 原始视频 → 令牌嵌入。
- 视频-文本编码器演示 – 计算联合视频-文本嵌入以实现零样本检索。
- 视频分类演示 – 在冻结的骨干网络上微调一个轻量级头部。
已发布的模型 – 四个检查点系列已在 Hugging Face 上提供:
| 变体 | 大小 | 参数量 | 典型输入 | 检查点 |
|---|---|---|---|---|
| VideoPrism‑B(基础) | 458 MB | 114 M | 16帧,288×288 视频片段 | videoprism-base-f16r288 |
| VideoPrism‑L(大型) | 1.42 GB | 354 M | 8帧,288×288 视频片段 | videoprism-large-f8r288 |
| VideoPrism‑LvT‑B(视频-文本基础) | 991 MB | 248 M | – | videoprism-lvt-base-f16r288 |
| VideoPrism‑LvT‑L(视频-文本大型) | 2.30 GB | 580 M | – | videoprism-lvt-large-f8r288 |
性能亮点(冻结骨干) –
- VideoGLUE(分类、动作检测等) – VideoPrism‑L 在 Kinetics‑400 上达到 85.0 %,在 AVA‑K 上达到 34.5 %,超越了之前的 SOTA。
- 零样本视频-文本检索 – VideoPrism‑LvT‑L 在 VATEX(视频→文本)上达到 75.0 % 的 recall@1,在 VATEX(文本→视频)上达到 57 %。
- 零样本视频分类 – VideoPrism‑LvT‑L 在 K400 上达到 72.4 %,超越了早期基线。
路线图 – 列出的唯一 TODO 是增加 PyTorch 支持,这将使模型在 JAX 生态系统之外更具可访问性。
许可与免责声明 – 代码采用 Apache 2.0 许可;模型权重及其他资产采用 CC‑BY 许可。仓库注明此项目为 非 Google 官方产品。
总结 – VideoPrism 为研究者提供了一个即用型、高容量的视频编码器(以及视频-文本变体),可轻松集成到下游任务中,且仅需极少微调,同时附带清晰的 Colab 笔记本和预训练检查点。
相关
- 项目
- 项目
- 项目
- 项目