拓十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

InternVideo零样本视频检索实战:ViCLIP手把手教程,K400 Top-1高达64.8%

InternVideo零样本视频检索实战:ViCLIP手把手教程,K400 Top-1高达64.8%

InternVideo零样本视频检索实战:ViCLIP手把手教程,K400 Top-1高达64.8%

【免费下载链接】InternVideo[ECCV2024] Video Foundation Models & Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo

InternVideo 是 OpenGVLab 开源的视频基础模型全家桶,而其中的ViCLIP模块是"零样本视频检索"的明星实现——无需针对具体任务训练,仅凭一句文字描述就能从视频中检索/匹配对应内容。在 Kinetics-400 零样本动作识别基准上,基于 InternVid-10M-FLT 数据训练的 ViCLIP-L 模型Top-1 准确率达到 64.8%,超过了 CLIP 官方模型的 58.42%,是当前开源视频-文本表征的第一梯队方案。

本文将带你从零开始,完成 ViCLIP 零样本视频检索环境搭建、视频-文本推理 Demo 运行,并复现 K400 零样本评测的完整流程,全程不碰复杂代码,新手也能顺利跑通 🚀

一、ViCLIP 是什么?为什么零样本检索效果这么强

ViCLIP 可以理解为"视频版的 CLIP":

组成作用说明
视频编码器(ViT-L/14)把视频帧序列编码为特征向量初始化为 CLIP 视觉编码器,并升级为时空注意力,理解帧间动态
文本编码器把文字描述编码为特征向量检索时通常冻结,只用视频侧对齐
对比学习损失(InfoNCE)拉近"视频-文本"正样本对的向量距离预训练时配合 90% 的视频掩码提升训练效率

核心性能一览(零样本动作识别,Top-1 / AVG):

模型训练数据K400K600K700
CLIPCLIP400M58.42 / 70.1455.11 / 67.1646.12 / 58.38
ViCLIP-L+ WebVid10M59.88 / 71.0358.66 / 69.8450.23 / 61.86
ViCLIP-L+ InternVid-10M-FLT64.80 / 75.7062.20 / 73.5354.30 / 66.38

可以看到:数据质量 > 数据数量。仅 10M 精心筛选的 InternVid 数据,就让 K400 Top-1 从 59.88 直接跃升到 64.80。完整的性能对比表可在 InternVideo1/Pretrain/ViCLIP/README.md 中查到。

二、快速上手:环境搭建与模型权重获取(5分钟)

2.1 克隆仓库并创建环境

git clone https://gitcode.com/OpenGVLab/InternVideo cd InternVideo/InternVideo1/Pretrain/ViCLIP # 一键创建 conda 环境 conda env create -f viclip.yaml conda activate viclip

环境定义文件为 viclip.yaml,包含 PyTorch、flash-attention 等全部依赖。

2.2 下载 ViCLIP 预训练权重

做零样本检索最推荐ViCLIP-L-14(InternVid-10M-FLT 训练版),即 K400 64.8% 的"满分选手"。仓库提供了多个规格的权重(ViCLIP-L-14 / ViCLIP-B-16,不同训练数据版本),下载地址汇总在 README 的Pretrained Data & Model表格中。

💡 小贴士:推理 Demo 使用ViCLIP-L_InternVid-FLT-10M.pth;若显存紧张(<16G),可先用 ViCLIP-B-16 小模型跑通流程。

三、零样本视频检索 Demo:给视频,选文案

仓库内置了一个即开即用的推理 Notebook:Data/InternVid/demo.ipynb,它演示了最典型的零样本检索场景——给定一段视频 + 一组候选描述,模型自动给出匹配概率排序。

以 Demo 中的雪景视频为例,模型对 10 句候选描述的输出(Top-5):

A playful dog and its owner wrestle in the snowy yard... ~ prob: 0.8192 A man in a gray sweater plays fetch with his dog... ~ prob: 0.1084 A pet dog excitedly runs through the snowy yard... ~ prob: 0.0676

正确描述以 0.82 的概率遥遥领先——这就是零样本检索的全部魔法:不训练、不微调,直接"听懂"视频内容。

Demo 背后只有 3 个核心函数(实现在 Data/InternVid/viclip/init.py):

函数作用
get_viclip(size, pretrain)加载指定规格(l/b)的 ViCLIP 模型
_frame_from_video(video)逐帧读取视频
retrieve_text(frames, texts, topk)内部自动采样8 帧、缩放到 224×224、计算视频/文本特征并返回 Top-K 匹配

也就是说,你只需要把视频路径和候选文本准备好,其余帧采样、归一化、特征计算全部封装好了,非常适合新手集成到自己的视频应用中。

四、复现 K400 零样本评测:64.8% 是怎么跑出来的

如果你想验证基准分数(而不是只做检索 Demo),仓库为每个零样本任务都准备了独立的配置目录,K400 对应 exp/exp_pretrain_ViCLIP/zs_k400/。

运行方式(以 2 卡为例):

bash run_our_230522_resized_10m_cc15m_freeze_unmask_wiseft05.sh

评测配置要点(见 zs_k400/config.py):

  • 输入:测试时取视频中间 8 帧、224×224 分辨率;
  • 模型:ViT-L/14 视频编码器 + 冻结文本编码器(freeze_text=True);
  • 评测:k_test=128帧级集成(eval_frame_ensemble=concat),eval_offload=True自动把大张量卸载到 CPU 省显存;
  • 数据集:Kinetics-400 验证集,需在 configs/data.py 中设置kinetics400_validate.json路径。

⚠️ 运行前务必:

  1. 设置环境变量VL_DATA_DIR指向你的数据根目录(含anno_downstream/kinetics400_validate.json和视频文件);
  2. 通过命令行参数pretrained_path指向 ViCLIP-L 权重路径;
  3. 多卡时设置--rdzv_endpoint=MASTER_NODE:PORT(脚本内有自动生成 MASTER_PORT 的示例)。

五、新手常见问题 FAQ

问题解决方案
报please set environment VL_DATA_DIR运行评测任务前先export VL_DATA_DIR=/你的数据根目录
显存不足 OOM调小batch_size_test,并确认eval_offload=True已开启
想换 MSRVTT/MSVD 视频检索基准直接复用同目录zs_msrvtt_1k/、zs_msvd/下的脚本,只改数据路径即可
Demo 中文本召回率一般候选描述尽量贴近视频动作细节;换 ViCLIP-L 大模型通常比 B 版更准

六、小结:一条清晰的进阶路线

  1. 跑通 Demo:demo.ipynb→ 感受零样本视频检索效果(10 分钟);
  2. 复现基准:zs_k400/脚本 → 验证 K400 Top-1 64.8% 的评测流程;
  3. 迁移业务:把retrieve_text封装进自己的视频搜索/内容审核/短视频推荐管线。

ViCLIP 证明了"简单架构 + 优质数据"在视频理解上的巨大潜力。InternVideo 仓库中还有 UniFormerV2、VideoMAE、InternVideo2 等更多预训练模型与下游任务代码,欢迎继续探索 InternVideo1/Pretrain/ 目录,构建属于你自己的多模态视频应用!

【免费下载链接】InternVideo[ECCV2024] Video Foundation Models & Data for Multimodal Understanding项目地址: https://gitcode.com/OpenGVLab/InternVideo

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

返回列表