当前位置: 首页 > news >正文

流式密集视频字幕

流式密集视频字幕

  • 摘要
  • 1 Introduction
  • Related Work
  • 3 Streaming Dense Video Captioning

Streaming Dense Video Captioning

摘要

对于一个密集视频字幕生成模型,预测在视频中时间上定位的字幕,理想情况下应该能够处理长的输入视频,预测丰富、详细的文本描述,并且在处理完整个视频之前能够生成输出。

然而,目前最先进的模型仅处理固定数量的降采样帧,并且在看完整个视频后做出一次完整的预测。

我们提出了一种流式密集视频字幕生成模型,该模型包含两个创新组件:首先,我们提出了一种新的记忆模块,基于对传入令牌的聚类,该模块能够处理任意长度的视频,因为记忆的大小是固定的。

其次,我们开发了一种流式解码算法,使我们的模型能够在处理完整个视频之前做出预测。 我们的模型实现了这种流式处理能力,并在三个密集视频字幕生成基准测试中显著提高了最先进水平:ActivityNet、YouCook2和ViTT。我们的代码发布在https://github.com/google-research/scenic。

1 Introduction

在现代社会的方方面面,视频迅速成为传输信息最普遍的媒体格式之一。大多数为视频理解设计的计算机视觉模型仅处理少量帧,通常只覆盖几秒钟的时间范围[31, 33, 39, 49, 58],且通常限于将这些短片段分类到固定数量的概念中。

为了实现全面、细粒度的视频理解,我们研究了一种密集视频字幕生成任务——在视频中对事件进行时间上的定位并为之生成字幕。这一目标理想的模型应当能够处理长的输入序列——以推理长时间、未修剪的视频——并且能够处理文本空间中的长输出序列,详细描述视频中的所有事件。

先前的密集视频字幕生成工作并未处理长输入或长输出。对于任何长度的视频,现有最先进模型要么以大步长(例如,6帧[48])采样极少数帧[11, 30, 48](即时间下采样),要么对所有帧保持每帧一个特征[51, 59, 65](即空间下采样)。在长文本输出方面,当前模型完全依赖自回归解码[19]在最后生成多个句子。

在这项工作中,我们设计了一个如图1所示的密集视频字幕生成的“流式”模型。我们的流式模型由于拥有记忆机制,不需要同时访问所有输入帧就能处理视频。此外,我们的模型可以在不处理整个输入序列的情况下因果性地产生输出,这得益于一种新的流式解码算法。像我们的这类流式模型本质上适合处理长视频——因为它们一次只摄取一帧。而且,由于输出是流式的,因此在处理完整视频之前就会产生中间预测。这一特性意味着流式模型理论上可以应用于处理实时视频流,正如视频会议、安全和持续监控等应用所需。

在这里插入图片描述
图1:将我们的流式模型(b)与传统的全局模型(a)进行比较。传统的全局模型一次编码整个视频,并在最后为所有事件产生字幕。我们的模型逐帧编码图像,使用它们更新运行中的记忆,并顺序预测字幕。

我们首先提出了一个新颖的记忆机制,一次接收一帧。记忆模型基于K-means聚类,并使用固定数量的簇中心标记在每个时间戳上表示视频。我们展示了这种方法简单而有效,可以处理可变数量的帧,并且在解码时具有固定的计算预算。

为了开发我们的流式模型,我们还提出了一种流式解码算法,并训练我们的网络,使其在特定时间戳的“解码点”(图2)上,根据该时间戳的记忆特征预测在此之前结束的所有事件字幕。因此,我们的网络被训练成在任何视频时间戳上做出预测,而不仅仅是视频结束处,如传统非流式模型那样。此外,我们将早期解码点的预测作为后来解码点的上下文。这一上下文避免了预测重复的事件,并可以作为自然语言总结早期视频的“显式”记忆。我们的流式输出还源于这样一个事实:随着视频长度的增长,我们的记忆将不可避免地在时间上失去信息,因为其大小是有限的。我们通过在处理整个视频之前进行预测来避免这个问题,并通过语言上下文保持早期信息。
在这里插入图片描述

图2:我们的框架说明。 每个帧一次通过图像编码器。基于聚类的记忆模型从开始到当前帧维持压缩的视觉特征。
在特定的帧上,即“解码点”,我们从记忆中解码出字幕和时间戳。如果有的话,早期的文本预测也会作为后续解码
点的语言解码器的前缀传递。我们的模型可以运行在任意长度的视频上,因为记忆具有恒定的大小,还可以在处
理整个视频之前输出预测。

我们在三个流行的密集视频字幕生成数据集上评估了我们的方法:ActivityNet[29]、YouCook2[64]和ViTT[23]。我们的结果显示,与不可避免地使用更少的帧或特征的最先进技术相比,我们的流式模型显著提高了性能,最多提高了11.0 CIDEr点。我们证明了我们的方法在GIT[48]和Vid2Seq[59]架构上具有泛化能力。最后,我们提出的记忆机制也可以应用于段落字幕生成,将基线提高了1-5 CIDEr点。

Related Work

密集视频字幕生成。 密集视频字幕生成需要标注事件,并在时间上对其进行定位。传统上,先前的研究采用两阶段方法,首先在视频中定位事件,然后随后对其进行字幕生成[24, 25, 29, 47, 50]。更近期的端到端方法包括PDVC [66],它使用类似DETR [10]的模型来推断事件字幕和时间戳。Vid2Seq [59]用时间戳标记扩展了语言模型的词汇,使它们能够像常规字幕生成模型一样生成连接的事件字幕。我们也使用了[59]的输出表述,因为它与基础视觉-语言模型[48]整合得很好。一个相关但不同的问题是电影中的音频描述[20, 21, 43],这需要为视障人士生成必须补充对话的字幕,并且经常使用辅助的非因果模型来识别角色或他们的对话[21]。

据我们所知,所有先前的密集字幕生成模型都不是因果模型,因为它们一次编码整个视频。此外,为了处理长视频,它们通常使用经过大幅下采样的视觉特征(通过选择几帧[11, 30, 48],或者每帧进行空间池化特征[51, 59, 65])。相比之下,我们以流式方式处理视频,用一个记忆模块一次处理一个帧的长输入序列,并使用一种新颖的解码算法流输出句子。
长视频的模型。 处理较长视频的常见方式是使用记忆机制来提供过去事件的紧凑表示。使用变压器,记忆可以通过将过去观察的标记作为当前时间步的输入来实现[13, 36, 56]。在视觉中的例子包括[22, 35, 53, 54],它们离线预提取特征并在推理时检索它们,因此不是因果模型。MemViT [55]使用前一时间步的标记激活作为当前时间步的输入。然而,这意味着序列长度会随时间增长,因此它无法处理任意长的视频。将记忆视为将先前观察到的标记压缩成较小、固定大小的集合以在未来的时间步使用的另一种观点。Token Turing Machines [41]使用[40]的标记总结模块总结过去和当前的观察。MovieChat [44]遵循类似的想法,但使用Token Merging [5]的一个变体来进行总结。TeSTra [62]使用指数移动平均来整合视频特征。这种方法的优点是记忆库具有固定大小,因此无论视频的长度如何,计算成本都保持有限。我们的记忆模型具有这一同样理想的属性。然而,我们的记忆基于聚类,使用类似K-means算法的中心来总结每个时间步的标记,我们通过实验证明这优于其他选择。

视频中的因果模型。 我们的流式模型是因果模型,这意味着其输出仅依赖于当前和过去的帧,没有访问未来帧。尽管我们不知道先前的因果模型用于密集视频字幕生成,但在许多其他视觉领域中有因果模型。在线动作检测[14, 28, 62, 63]旨在在实时视频中预测动作标签,不访问未来帧。类似地,在线时间动作定位[7, 26, 42]模型在观察动作后也预测动作的开始和结束时间。大多数对象跟踪[3, 52]和视频对象/实例分割[9, 32, 34]的模型也是因果模型。

上述任务的一个共同主题是模型必须对视频的每个帧进行预测。相比之下,我们专注于密集视频字幕生成[29],这是具有挑战性的,因为输出字幕与视频帧不是一一对应的。我们通过提出一种流式解码算法来解决这一问题。

3 Streaming Dense Video Captioning

标题生成模型通常由一个视觉编码器和一个文本解码器组成。我们概述了这些方法,并展示了它们如何扩展到密集标题生成。

视觉编码器。 第一步是将视频编码为特征 ,其中 是特征分辨率(对于基于变换器的编码器,这是令牌的数量), 是特征维度。视觉特征编码器 可以是一个原生的视频骨干网络[1, 4],或者是一个应用于每一帧的图像编码器[37, 60]。在后一种情况下,视频特征是图像特征的堆叠,,其中 是每帧的令牌数。我们使用逐帧编码,但不是从整个视频中预先提取它们,而是使用一个记忆机制以因果、流式的方式处理特征(第3.2节),这种方式可以推广到更长的视频时长。

文本解码器。 给定视觉特征 和可选的文本前缀令牌 ,文本解码器 从它们生成一系列单词令牌 。我们使用自回归[19, 45]解码器,它根据之前的单词 和(如果有的话)前缀生成下一个单词令牌 ,即 。注意,在标题生成任务中通常不使用前缀令牌,但在问题回答(QA)任务中使用它们来编码输入问题。具体来说,文本解码器 是一系列在视觉特征 和前缀的词嵌入[38, 48]的连接上操作的变换层[45]。这种架构在图像和视频的标题生成和QA任务中都被证明是有效的[11, 30, 48]。

带时间戳的密集视频标题生成。 结合上述视觉编码器和文本解码器,为视频标题生成提供了一个基本架构。为了将其扩展为带有开始和结束时间戳的多个事件的标题生成,Vid2Seq[59]引入了两项主要修改:首先,它扩展了标题生成模型的词汇表 ,加入了时间令牌 和 ,分别代表开始和结束时间。因此,一个单独的事件表示为 ,且 ,其中 ∣ V ∣ ≤ w s < w e ≤ ∣ v ′ ∣ |V|\leq w^{s}<w^{e}\leq|v^{\prime}| Vws<wev ∣ t ∣ |t| t 是时间令牌的数量。其次,vid2seq按开始时间顺序将所有定时标题连接成一个长的标题: c = " [ c 1 ′ , c 2 ′ , ⋯ , c " n e ′ ] \mathbf{c}="[\mathbf{c}^{\prime}_{1},\mathbf{c}^{\prime}_{2},\cdots,\mathbf{c}" ^{\prime}_{n_{e}}] c="[c1,c2,,c"ne],其中=“” n e n_{e} ne=“” 是事件的数量。因此,密集视频标题生成可以形式化为具有目标=“” c \mathbf{c} c=“” 的标准视频标题生成。<=“” p=“”>

尽管Vid2Seq[59](广义)架构很有效,但它有几个关键局限性:首先,它将整个视频的视觉特征 通过解码器,这意味着它不能有效地扩展到更长的视频和更多的令牌。此外,由于Vid2Seq在处理整个视频后一次预测所有事件标题,它在预测长而详细标题方面存在困难。为了解决这些问题,我们引入了流式密集视频标题生成模型,我们使用一个记忆模块一次处理一个输入,以限制计算成本,并流式输出,这样我们可以在处理整个视频之前做出预测。

相关文章:

流式密集视频字幕

流式密集视频字幕 摘要1 IntroductionRelated Work3 Streaming Dense Video Captioning Streaming Dense Video Captioning 摘要 对于一个密集视频字幕生成模型&#xff0c;预测在视频中时间上定位的字幕&#xff0c;理想情况下应该能够处理长的输入视频&#xff0c;预测丰富、…...

【教程】iOS Swift应用加固

&#x1f512; 保护您的iOS应用免受恶意攻击&#xff01;在本篇博客中&#xff0c;我们将介绍如何使用HTTPCORE DES加密来加固您的应用程序&#xff0c;并优化其安全性。通过以下步骤&#xff0c;您可以确保您的应用在运行过程中不会遭受数据泄露和未授权访问的风险。 摘要 …...

新型基础设施建设(新基建)

新型基础设施建设&#xff08;新基建&#xff09;主要包括七个方面&#xff0c;即5G基站建设、特高压、城际高速铁路和城市轨道交通、新能源汽车充电桩、大数据中心、人工智能和工业互联网。 以下是新型基础设施的详细内容&#xff1a; 一、5G基站建设。5G网络的扩展和优化&a…...

蓝桥杯 第 9 场 小白入门赛 字符迁移

题目&#xff1a; 3.字符迁移【算法赛】 - 蓝桥云课 (lanqiao.cn) 思路&#xff1a; 此题通过把小写字母映射成数字&#xff0c;进行差分即可。 AC代码&#xff1a; #include<iostream> #include<cstring> #include<algorithm>using namespace std;typed…...

泰迪智能科技人工智能应用工程师(中级)特训营

随着人工智能技术的迅猛发展和应用的不断拓展&#xff0c;掌握人工智能技术已成为现代职业发展和企业创新的关键。为此&#xff0c;人工智能技能提升特训营应运而生&#xff0c;以全面、系统的课程设置&#xff0c;帮助学员深入掌握相关的理论知识&#xff0c;实践操作技能。特…...

【数据结构】考研真题攻克与重点知识点剖析 - 第 6 篇:图

前言 本文基础知识部分来自于b站&#xff1a;分享笔记的好人儿的思维导图与王道考研课程&#xff0c;感谢大佬的开源精神&#xff0c;习题来自老师划的重点以及考研真题。此前我尝试了完全使用Python或是结合大语言模型对考研真题进行数据清洗与可视化分析&#xff0c;本人技术…...

java的基本数据类型

在Java编程语言中&#xff0c;基本数据类型是构成Java程序的基础元素&#xff0c;它们用于存储简单值。Java的基本数据类型可以分为两大类&#xff1a;原始类型&#xff08;Primitive Types&#xff09;和引用类型&#xff08;Reference Types&#xff09;。原始类型包括整型、…...

0104练习与思考题-算法基础-算法导论第三版

2.3-1 归并示意图 问题&#xff1a;使用图2-4作为模型&#xff0c;说明归并排序再数组 A ( 3 , 41 , 52 , 26 , 38 , 57 , 9 , 49 ) A(3,41,52,26,38,57,9,49) A(3,41,52,26,38,57,9,49)上的操作。图示&#xff1a; tips:&#xff1a;有不少在线算法可视化工具&#xff08;软…...

烤羊肉串引来的思考--命令模式

1.1 吃羊肉串&#xff01; 烧烤摊旁边等着拿肉串的人七嘴八舌地叫开了。场面有些混乱&#xff0c;由于人实在太多&#xff0c;烤羊肉串的老板已经分不清谁是谁&#xff0c;造成分发错误&#xff0c;收钱错误&#xff0c;烤肉质量不过关等。 外面打游击烤羊肉串和这种开门店做烤…...

Python 描述符

文章目录 类型&#xff1a;数据描述符&#xff1a;方法描述符&#xff1a;描述符的要包括以下几点:方法描述符实现缓存 描述符(Descriptor)是 Python 中一个非常强大的特性,它允许我们自定义属性的访问行为。使用描述符,我们可以创建一些特殊的属性,在访问这些属性时执行自定义…...

Go语言创建HTTP服务器

Web服务器可提供网页、Web服务和文件,而Go语言为创建Web服务器提供了强大的支持。 1.通过Hello World Web 服务器宣告您的存在 标准库中的net/http包提供了多种创建HTTP服务器的方法,它还提供了一个基本的路由器。 package mainimport ("net/http" )func helloWo…...

【LeetCode热题100】【栈】柱状图中最大的矩形

题目链接&#xff1a;84. 柱状图中最大的矩形 - 力扣&#xff08;LeetCode&#xff09; 要找最大的矩形就是要找以每根柱子为高度往两边延申的边界&#xff0c;要作为柱子的边界就必须高度不能低于该柱子&#xff0c;否则矩形无法同高&#xff0c;也就是需要找出以每根柱子为高…...

谷歌浏览器插件开发速成指南:弹窗

诸神缄默不语-个人CSDN博文目录 本文介绍谷歌浏览器插件开发的入门教程&#xff0c;阅读完本文后应该就能开发一个简单的“hello world”插件&#xff0c;效果是出现写有“Hello Extensions”的弹窗。 作为系列文章的第一篇&#xff0c;本文还希望读者阅读后能够简要了解在此基…...

Lakehouse 大数据概念

“Lakehouse” 是一个相对新的概念,是大数据理论中的一个重要发展方向。它试图结合传统的数据湖(Data Lake)和数据仓库(Data Warehouse)的优点,以创造一种更为灵活和强大的数据管理体系。 在传统的大数据架构中,数据湖用于存储原始、未加工的数据,而数据仓库则用于存储…...

MySQL学习笔记(二)

1、把查询结果中去除重复记录 2、连接查询 从一张表中单独查询&#xff0c;称为单表查询。emp表和dept表联合起来查询数据&#xff0c;从emp表中取员工名字&#xff0c;从dept表中取部门名字&#xff0c;这种跨表查询&#xff0c;多张表联合起来查询数据&#xff0c;被称为连…...

Verilog语法——按位取反“~“和位宽扩展的优先级

前言 先说结论&#xff0c;如下图所示&#xff0c;在Verilog中“~ ”按位取反的优先级是最高的&#xff0c;但是在等式计算时&#xff0c;有时候会遇到位宽扩展&#xff0c;此时需要注意的是位宽扩展的优先级高于“~”。 验证 仿真代码&#xff0c;下面代码验证的是“~”按位取…...

Navicat工具使用

Navicat的本质&#xff1a; 在创立连接时提前拥有了数据库用户名和密码 双击数据库时&#xff0c;相当于建立了一个链接关系 点击运行时&#xff0c;远程执行命令&#xff0c;就像在xshell上操作Linux服务器一样&#xff0c;将图像化操作转换成SQL语句去后台执行 一、打开Navi…...

linux常用指令(一)——mv、rm、which、find

mv命令&#xff1a; 用于查看文件内容 语法&#xff1a;mv 参数1 参数2 参数1&#xff0c;linux路径&#xff0c;表示被移动的文件或文件夹 参数2&#xff0c;linux路径&#xff0c;表示要移动去的地方&#xff0c;如果目标不存在&#xff0c;则进行改名 rm命令&#xff1a…...

lottery-攻防世界

题目 flag在这里要用钱买&#xff0c;这是个赌博网站。注册个账号&#xff0c;然后输入七位数字&#xff0c;中奖会得到相应奖励。 githacker获取网站源码 &#xff0c;但是找到了flag文件但是没用。 bp 抓包发现api.php&#xff0c;并且出现我们的输入数字。 根据题目给的附…...

深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针、函数中指针变量

目录 1、数组名理解 2、一维数组传参本质 3、二级指针 4、指针数组和数组指针 5、函数指针变量 1、数组名理解 首先来看一段代码&#xff1a; int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", sizeof(arr));return 0; } 输出的结果是&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

日语AI面试高效通关秘籍:专业解读与青柚面试智能助攻

在如今就业市场竞争日益激烈的背景下&#xff0c;越来越多的求职者将目光投向了日本及中日双语岗位。但是&#xff0c;一场日语面试往往让许多人感到步履维艰。你是否也曾因为面试官抛出的“刁钻问题”而心生畏惧&#xff1f;面对生疏的日语交流环境&#xff0c;即便提前恶补了…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

站群服务器的应用场景都有哪些?

站群服务器主要是为了多个网站的托管和管理所设计的&#xff0c;可以通过集中管理和高效资源的分配&#xff0c;来支持多个独立的网站同时运行&#xff0c;让每一个网站都可以分配到独立的IP地址&#xff0c;避免出现IP关联的风险&#xff0c;用户还可以通过控制面板进行管理功…...

Golang——6、指针和结构体

指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

PostgreSQL——环境搭建

一、Linux # 安装 PostgreSQL 15 仓库 sudo dnf install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-$(rpm -E %{rhel})-x86_64/pgdg-redhat-repo-latest.noarch.rpm# 安装之前先确认是否已经存在PostgreSQL rpm -qa | grep postgres# 如果存在&#xff0…...