如何发现并解锁隐藏在视频中的数据

2 阅读9分钟

\n\n本文探讨了如何通过 AI 技术解锁视频中隐藏的丰富数据。文章分析了视频处理的挑战,提出了基于关键场景检测、向量嵌入和 VLM 描述的预处理方法,并推荐使用 Vespa 实现高效的多模态检索。

译自:How to find and unlock the data hidden within videos

作者:Kai Borgen

视频在当今世界无处不在,产生的视频内容比以往任何时候都要多。据估计,每分钟有超过 500 小时的素材被上传到 YouTube。

企业和组织开始意识到搜索视频内容中丰富数据的价值。从用于电子商务发现的产品检测,到利用会议录音和大学讲座中大量高质量信息,再到搜索现场调查素材,视频管理系统正成为发掘锁定在视频文件中信息的宝贵资产。与其忽略视频素材或单独寻找它,如果能将其与你的其他相关文档一起检索,并精确定位信息在视频中的位置,那该多好?

“与其忽略视频素材或单独寻找它,如果能将其与你的其他相关文档一起检索,并精确定位信息在视频中的位置,那该多好?”

从视频中提取信息开启了新的机遇。大学可以为学生提供讲座的快速搜索,也许六年前的一位讲师非常擅长解释拉普拉斯变换或期权定价?视频流媒体提供商可能感兴趣与电子商务平台建立合作伙伴关系,以检测与平台上电影中显示的类似物品:詹姆斯·邦德戴的那只手表看起来很漂亮,我在哪里能找到它?保险公司可能需要查看一堆监控或行车记录仪素材,看看红绿灯处到底发生了什么。或者我们可能好奇在监测种群健康的野生动物摄像头上发现了多少次某种鸟类?

挑战

那么,为什么视频在很大程度上仍然无法搜索呢?一个问题是视频本质上是一种难以处理的数据类型。首先,视频中的视觉数据分析起来并不直观。大多数视频格式依赖于关键帧(或 I 帧,即帧内编码帧)和预测帧(P 帧)。I 帧是完整的图像,因此易于分析,但大多数帧是 P 帧,它们巧妙地仅编码前一帧和后一帧之间的差异。

这些 P 帧利用了这样一个事实:从一帧到下一帧的视觉信息通常差别很小,这就是为什么一段 10 分钟 1080p@30fps 的视频可以是 150 MB 而不是 11.2 GB。然而,P 帧在孤立状态下通常没有用处,在提取有意义的内容之前需要进行处理。

另一个问题是音频数据和视觉数据的处理方式根本不同。视频格式并不是视频和音频作为统一表示存在的数据类型;相反,它们是两个独立的轨道,进行对齐和同步。

这意味着,在某种程度上,处理全模态视频需要分别为音频和视频建立处理流水线。为了保留视频文件中的信息,独立的流水线必须包含确保音频与视频保持对齐的逻辑,这并不一定简单。

由于视频复杂的、多模态的性质,没有单一的正确处理方法。一些视频侧重于视觉元素(例如素材库视频),而另一些则更侧重于音频方面(例如播客或讲座录音)。因此,你处理视频的方式取决于你视频检索的目的以及你拥有的内容类型。

在这里,我将重点关注视频的视觉元素,以展示如何在视频中搜索视觉内容。

技术栈

实现视频内和通过视频进行搜索需要两个关键要素。

  1. 视频预处理
  2. 一个能够容纳并索引处理后数据的检索引擎

预处理

这个预处理流水线旨在支持在视频中寻找视觉时刻的用例,类似于寻找素材视频。在实践中,这意味着我们将把视频视为一系列图像。有几种方法可以实现这一点,也需要进行几层优化才能使该方法具有实用性。

为了在视频中进行搜索,我推荐一种使用图像嵌入和生成的文本描述的混合搜索方法。一种幼稚的实现是提取视频中的所有帧,对它们进行嵌入(CLIP 开源嵌入模型仍然是入门的好方法,尽管它正在变老),使用 LLM 生成描述,并搜索结果。

然而,这在处理和查询方面的成本将非常昂贵;对于每秒 30fps 的素材,我们需要生成 30 个嵌入和描述。一种稍微实用一点的方法是按预定的间隔拍摄快照。虽然我们失去了准确性,但这大大减少了所需的处理量;即使每秒拍摄一个快照,我们也减少了 30 倍。

然而,更好的方法是检测视频中显著的场景变化,并仅在视觉内容发生实质性变化时拍摄快照。

有些视频的场景可能会持续数秒,甚至数分钟或数小时,而视觉内容没有显著变化。如果连续存储数百帧,而除了序列中的第一帧之外没有发现任何有意义的信息,那将是一种浪费。幸运的是,这种分析非常适合图像嵌入。我们可以先按设定的间隔(例如每秒 3 次)拍摄快照,使信息损失最小化,然后根据快照与前一个快照的向量相似度来修剪快照。

通过为快照之间的相似度设置一个合理的阈值,我们可以有效地衡量当前的视觉内容是否与上一个快照有足够的不同,从而值得将其添加为新场景。我们甚至可以添加更具体的规则,例如要求快照与过去 5 个快照在视觉上有区别,以避免场景中快速的来回切换被标记为独立场景。

通过这种方式,我们可以极大地减少精确定位视频中视觉时刻所需的数据。例如,对于《无敌李小龙》(Bruce Li the Invincible),这是一部属于 Bruceploitation 类型的 90 分钟电影(值得一读!),我能够将其压缩为 1,167 个独立的视觉快照,平均每 4.6 秒一个快照。

为了丰富检索的上下文,我们还可以通过将选定的快照输入 VLM 来创建文本图像描述。这是一项计算成本昂贵的任务,需要良好的硬件或 API,但由于我们已经极大地优化了需要处理的视觉内容量,这项操作变得不再那么耗时和昂贵。

检索引擎

我们现在有了一个准备视频以供搜索的可行流程,但这只解决了一半的问题。剩下的就是服务这些数据的基础设施。

为了实现对视频的搜索,我们需要存储每个视频的嵌入列表,以及它的文本描述和元数据。

为此,我建议使用检索平台,例如开源的 Vespa 搜索平台。它允许我们为每个视频存储多个向量以及相应的文本描述。这意味着我们可以将每个快照视为一个独立的评分时刻,同时在数据层中将视频保持为单个实体。

拥有原生的多向量和 张量能力 大大简化了跨多个信号和模态检索数据所需的基础设施。Vespa 提供了一体化的馈送、搜索和多阶段排序解决方案,而不是使用几种不同的系统和管理逻辑将它们粘合在一起。可扩展性是粘合架构的另一个常见痛点,而像这样的统一架构对此有很大帮助。

但也许 Vespa 让我们做的最令人兴奋的事情是轻松地根据所有可用信息对我们的视频快照进行排序。

“排序表达式为我们调整想要强调的结果提供了无限的灵活性。”

我们不需要仅仅依赖对嵌入的 向量搜索,也不需要仅仅依赖描述中的关键词搜索;我们可以在单个排序表达式中结合这两种信号。排序表达式为我们调整想要强调的结果提供了无限的灵活性。也许我们想更多地依赖嵌入,或者文本描述的权重应该更高?在排序中包含元数据也很容易。我们是否应该让较短的视频排名更高?添加此类功能只需在排序函数中包含视频长度即可。

进一步改进

这篇文章展示了实现视频搜索的一种方法,但我们可以添加许多层来改变和改进它的使用。一些嵌入模型和 VLM 现在已经能够原生理解视频,有些甚至能理解音频内容,这将为我们提供更丰富的嵌入上下文。还可以从视频中转录音频,并在我们的排序表达式中包含转录本的 BM-25 分数。

只要我们转录带有时间戳的音频,音频信息就可以与图像嵌入和描述对齐,确保信息保持同步和完整。

由于我们使用的是灵活的搜索平台,在检索流水线中添加新模型或信号是微不足道的。如果我们想添加更好的嵌入模型,更新它很容易,更改排序表达式只需几行代码。对于在快速发展的场景中的多模态检索系统来说,这种灵活性是一个巨大的优势!

查看 Vespa 视频搜索演示 的示例应用,它展示了 Vespa 如何快速搜索多模态数据。端 工智能