多模态系列-综述Video Understanding with Large Language Models: A Survey

news2024/11/17 6:23:39

本文是LLM系列文章,针对《Video Understanding with Large Language Models: A Survey》的翻译。

论文链接:https://arxiv.org/pdf/2312.17432v2.pdf

代码链接:https://github.com/yunlong10/Awesome-LLMs-for-Video-Understanding

大型语言模型下的视频理解研究综述
  • 摘要
  • 1 引言
  • 2 基础
    • 2.1 与LLM的视觉集成
    • 2.2 语言在视频理解中的角色
    • 2.3 其他模态
    • 2.4 训练策略
  • 3 VID-LLMs:模型
    • 3.1 基于LLM的视频代理
    • 3.2 Vid-LLM预训练
    • 3.3 Vid-LLM指令调整
      • 3.3.1 连接适配器微调
      • 3.3.2 插入式适配器微调
      • 3.3.3 混合适配器微调
    • 3.4 混合方法
  • 4 任务、数据集、基线
    • 4.1 识别和预测
      • 4.1.1 数据集概述
      • 4.1.2 评估标准
    • 4.2 标注和描述
      • 4.2.1 数据集概述
      • 4.2.2 评估标准
    • 4.3 基线和检索
      • 4.3.1 数据集概述
      • 4.3.2 评估标准
    • 4.4 问答
      • 4.1.1 数据集概述
      • 4.1.2 评估标准
    • 4.5 视频指令调整
      • 4.5.1 数据集概述
      • 4.5.2 评估标准
  • 5 应用
    • 5.1 媒体和娱乐
    • 5.2 交互式和以用户为中心的技术
    • 5.3 医疗保健和安全应用
  • 6 未来方向与应用
    • 6.1 局限和未来工作
    • 6.2 结论

摘要.

随着在线视频平台的蓬勃发展和视频内容量的急剧增长,对高效视频理解工具的需求显著增强。鉴于大型语言模型(LLMs)在语言和多模态任务中展现出的强大功能,本综述详细梳理了利用LLMs进行视频理解领域研究的最新进展,特别是在视频理解大型语言模型(Vid-LLMs)方面的突破。Vid-LLMs展现出的新兴能力极为先进,特别是其结合常识知识进行开放性时空推理的能力,预示着未来视频理解的一个极具潜力的发展路径。我们考察了Vid-LLMs的独特特性和能力,将其方法论归纳为四大类型:基于LLMs的视频代理、Vid-LLMs预训练、Vid-LLMs指令调优和混合方法。此外,本综述还对Vid-LLMs涉及的任务、数据集和评估方法进行了全面研究,并探讨了Vid-LLMs在各个领域的广泛应用,突显了其在现实世界视频理解挑战中表现出的强大可扩展性和多功能性。最后,本综述总结了现有Vid-LLMs的局限性,并指出了未来研究的方向。更多详情请访问GitHub仓库:https://github.com/yunlong10/Awesome-LLMs-for-Video-Understanding。

1 引言

我们生活在一个多模态世界中,视频已成为主导形式的媒体。随着在线视频平台的迅速扩张以及监控、娱乐和自动驾驶领域摄像头的日益普及,视频内容已成为一种高度引人入胜且丰富的媒介,凭借其深度和吸引力,超越了传统的文本和图像-文本组合。这一进步推动了视频制作的指数级增长,每天创作数百万个视频。然而,手动处理如此庞大量的视频内容被证明既费力又耗时。因此,人们对能够有效管理、分析和处理这些大量视频内容的工具需求日益增长。为了满足这一需求,视频理解方法和分析技术应运而生,利用智能分析技术自动识别和解释视频内容,从而显著减轻人类操作员的工作负担。此外,这些方法的持续进步正在增强它们的任务解决能力,使其能够以日益娴熟的方式处理各种视频理解任务。

如图1所示,视频理解方法的演变可以分为四个阶段:
1. 传统方法

在视频理解的早期阶段,手工特征提取技术如尺度不变特征变换(SIFT)[1]、加速稳健特征(SURF)[2]和梯度直方图(HOG)[3]被用于捕捉视频中的关键信息。背景减除[4]、光流方法[5]和改进的密集轨迹(IDT)[6, 7]被用于建模用于跟踪的运动信息。由于视频可以被视为时间序列数据,时间序列分析技术如隐马尔可夫模型(HMM)[8]也被用于理解视频内容。在深度学习流行之前,基本的机器学习算法如支持向量机(SVM)[9]、决策树[10]和随机森林也被用于视频分类和识别任务。用于对视频段进行聚类分析的聚类分析[11],或用于数据降维的主成分分析(PCA)[12, 13]也是视频分析中常用的方法。
2. 神经视频模型

与传统方法相比,用于视频理解的深度学习方法具有更强大的任务解决能力。DeepVideo [14]是最早引入深度神经网络,特别是卷积神经网络(CNN),用于视频理解的方法。然而,由于对运动信息的不充分利用,其性能并不优于最佳的手工特征方法。双流网络[15]结合了CNN和IDT来捕捉运动信息以提高性能,验证了深度神经网络在视频理解方面的能力。为了处理长格式视频理解,采用了长短期记忆(LSTM)。时序段网络(TSN)也被设计用于长格式视频理解,通过分析视频段并将它们聚合。基于TSN,引入了Fisher向量编码、双线性编码和局部聚合描述符向量编码。这些方法提高了在UCF-101和HMDB51数据集上的性能。不同于双流网络,3D网络通过引入3D卷积神经网络到视频理解(C3D)开启了另一个分支。膨胀的3D ConvNets(I3D)利用了2D卷积神经网络Inception的初始化和架构,在UCF-101和HMDB51数据集上取得了巨大的改进。随后,人们开始使用Kinetics-400和Something-Something数据集来评估模型在更具挑战性场景下的性能。ResNet、ResNeXt和SENet也从2D转向3D,出现了R3D、MFNet和STC。为了提高效率,3D网络在各种研究中被分解为2D和1D网络。LTC、T3D、Non-local和V4D专注于长格式时间建模,而CSN、SlowFast和X3D倾向于实现高效率。引入Vision Transformers促进了一系列杰出的模型。

3. 自监督视频预训练

自监督预训练模型在视频理解中的可转移性允许它们在最小额外标记的情况下横跨多样任务进行泛化,克服了早期深度学习模型对大量任务特定数据的需求。VideoBERT是对视频预训练的早期尝试。基于双向语言模型BERT,设计了自监督学习的相关任务。它使用分层k均值对视频特征进行标记。预训练模型可以微调以处理多个下游任务,包括动作分类和视频字幕。许多研究探索了用于视频理解的预训练模型,尤其是视频语言模型。它们使用不同的架构或预训练和微调策略。

4. 大语言模型用于视频理解

最近,大语言模型迅速发展。在广泛数据集上预训练的大语言模型的出现引入了一种新的上下文学习能力。这使它们能够使用提示来处理各种任务,而无需微调。ChatGPT是建立在这一基础上的第一个突破性应用。这包括生成代码和调用其他模型的工具或API的能力。许多研究正在探索使用大语言模型像ChatGPT调用视觉模型API来解决计算机视觉领域的问题。指导微调的出现进一步增强了这些模型对用户请求的有效响应和执行特定任务的能力。集成视频理解能力的大语言模型提供了更复杂的多模态理解优势,使其能够处理和解释视觉和文本数据之间的复杂交互。类似于它们在自然语言处理中的影响,这些模型作为更通用的任务解决者,擅长利用其广泛的知识库和从大量多模态数据中获得的上下文理解来处理更广泛的任务。这使它们不仅能理解视觉内容,还能以更符合人类理解的方式推理。许多作品还探索了在视频理解任务中使用大语言模型,即Vid-LLMs。

之前的论文要么研究视频理解领域中的特定子任务,要么关注超越视频理解范畴的方法论。例如,[76]研究了用于一般视觉-语言任务的多模态基础模型,其中包括图像和视频应用。[77]和[78]分别专注于研究视频字幕生成和视频动作识别任务。其他视频理解任务,如视频问答和定位,未被考虑。此外,[79]和[80]研究了视频相关的方法论 - 视频扩散模型和LLMs,但缺乏对视频理解的关注。之前的研究论文在基于大型语言模型的一般视频理解任务研究中存在空白,本文通过对使用大型语言模型进行视频理解任务的全面调研来填补这一空白。

本论文结构如下:

第2节提供了全面的概述,强调利用LLMs能力的方法,并详细说明这些方法解决的具体任务和数据集。

第3节深入探讨了最近利用LLMs进行视频理解的研究细节,展示它们在领域中的独特方法和影响。

第4节提供了各种任务、相关数据集和评估指标的详细总结和分析。

第5节探讨了Video-LLMs在多个重要领域中的应用。

第6节总结,概括了关键发现,并确定了未解决的挑战和未来研究的潜在领域
除了这项调查外,我们建立了一个GitHub存储库,汇总了各种支持视频理解与大型语言模型(Vid-LLMs)的资源:GitHub - yunlong10/Awesome-LLMs-for-Video-Understanding: 🔥🔥🔥Latest Papers, Codes and Datasets on Vid-LLMs.

2 基础

视频理解是一个挑战,激发了许多创新任务的创建,以增强模型的视频解释能力。该领域已经从基础任务,如视频分类和动作识别,演变为涵盖更复杂任务的范围。这些任务包括为视频加上详细描述和回答有关视频内容的问题。后者不仅需要理解视频,还涉及与逻辑和常识知识推理。随着领域的发展,任务变得越来越复杂和具有挑战性,需要具有接近人类水平的视频解释能力的模型。我们总结视频理解的主要任务有以下4种:
1. 识别和预测(Recognition and Anticipation):这些任务在视频理解中紧密相关,着重于视频内的时间连续性和进展。
2. 描述和摘要(Captioning and Summarization):这些任务侧重于更精细的细节,涉及为每个时刻创建准确和具体的文本描述,提炼视频的本质,从而概括其主题和关键叙述。它们为视频内容提供了详细和广泛的视角。
3. 定位和检索(Grounding and Retrieval):将视觉内容与文本上下文无缝链接,属于这一类别的任务要求模型识别与提供的文本描述准确对应的具体视频或片段。
4. 问答(Question Answering):这些任务强调模型在理解视频的视觉和听觉组成部分方面的熟练

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1567960.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python学习笔记-Flask接收post请求数据并存储数据库

1.引包 from flask import Flask, request, jsonify from flask_sqlalchemy import SQLAlchemy 2.配置连接,替换为自己的MySQL 数据库的实际用户名、密码和数据库名 app Flask(__name__) #创建应用实列 app.config[SQLALCHEMY_DATABASE_URI] mysqlpymysql://ro…

Linux笔记之制作基于ubuntu20.4的最小OpenGL C++开发docker镜像

Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像 —— 2024-04-03 夜 code review! 文章目录 Linux笔记之制作基于ubuntu20.4的最小OpenGL C开发docker镜像1.这里把这本书的例程代码放在了Dockerfile所在的文件夹内以使镜像预装例程代码2.创建Dockerfile3.构建Do…

c++前言

目录 1. 什么是 C 2. C 发展史 3. C 的重要性 4. 如何学习 C 5. 关于本门课程 1. 什么是C C语言是结构化和模块化的语言,适合处理较小规模的程序。对于复杂的问题,规模较大的 程序,需要高度的抽象和建模时, C 语言则不合适…

ShardingJdbc+Mybatis实现多数据源

Mybatis多数据源 这个是对shardingjdbc应用的一个升级,如果对于shardingjdbc的整合还没看过之前的文章的,可以先看看文章https://blog.csdn.net/Think_and_work/article/details/137174049?spm1001.2014.3001.5501 整合步骤 1、依赖 和全新项目的单…

【异常错误】 Expected to have finished reduction in the prior iteration before star、find_unused_parameters

运行代码时出现了错误: RuntimeError: Expected to have finished reduction in the prior iteration before starting a new one. This error indicates that your module has parameters that were not used in producing loss. You can enable unused parameter …

VSCODE使用VSIX安装扩展

VSCode安装扩展特别慢,使用命令行安装告别龟速: code --install-extension当然,我这个是在WSL 的linux上安装的,Windows一样的。 VSCode扩展商店网页链接:https://marketplace.visualstudio.com/vscode

Ceph分布式存储系统以及高可用原理

Ceph分布式存储系统以及高可用原理 1. Ceph原理和架构1.1 分布式存储系统抽象1.2 Ceph基本组件 2 Ceph中的策略层2.1 CRUSH进行数据分发和定位2.2 PG(Placement Group): 集群管理的基本单元2.3 PG的代理primary OSD2.4 轻量级的集群元数据ClusterMap2.5 对PG的罗辑分组&#xf…

面试总结------2024/04/04

1.面试官提问:你说你在项目中使用springsecurity jwt 实现了登录功能,能简单讲一下怎么实现的吗? 2.使用RabbitMQ实现订单超时取消功能 订单状态定义 首先,我们需要定义订单的不同状态。在这个示例中,我们可以定义以下…

分享three.js实现乐高小汽车

前言 Web脚本语言JavaScript入门容易,但是想要熟练掌握却需要几年的学习与实践,还要在弱类型开发语言中习惯于使用模块来构建你的代码,就像小时候玩的乐高积木一样。 应用程序的模块化理念,通过将实现隐藏在一个简单的接口后面&a…

shell的编写

文章目录 1.框架2.命令行3.获取用户命令字符串4.命令行字符串分割5.执行命令和内建命令6.完整代码: 1.框架 我们知道shell是一直存在的,所以首先我们第一步就是要搭建一个框架,使其一直存在。 那么也很简单,一个while循环就可以完…

(科研实践篇)大模型相关知识

1.embedding 1.介绍: embedding就是用一个低纬的向量表示一个物品。而这个embedding向量的实质就是使距离相似的向量所对应的物品具有相似的含义(参考皮尔逊算法和cos余弦式子:计算相似度)简单来说,就是用空间去表示…

1.Docker简介和安装

1 Docker 简介 1.1 Docker 是什么? docker是一个开源的应用容器引擎。 1.2 容器是什么? 容器是一种轻量级的虚拟化技术 ,它是一个由应用运行环境、容器基础镜像组成的集合。 以 Web 服务 Nginx 为例,如下图所示:Ngin…

【并发编程】CountDownLatch

📝个人主页:五敷有你 🔥系列专栏:并发编程 ⛺️稳中求进,晒太阳 CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器,…

贝锐蒲公英企业路由器双机热备,保障异地组网可靠、不中断

对于关键业务,比如:在线支付系统、远程医疗监控系统、重要数据中心等,一旦网络发生故障,可能导致巨大的损失或影响,因此需确保网络拥有极高的可靠性、稳定性和容错能力。 面对此类场景和需求,贝锐蒲公英异…

优秀网站收藏——持续更新

1、Uiverse.io 官网:Open-Source UI elements for any project Uiverse.io是一个开源免费的UI组件库,直接使用HTML和CSS组成,可以方便的使用在任何前端框架上。它包含了丰富的UI组件类型,如按钮、复选框、开关、卡片、加载动画、…

在s390x架构机器上构建frps/frpc镜像 —— 筑梦之路

源码:GitHub - fatedier/frp: A fast reverse proxy to help you expose a local server behind a NAT or firewall to the internet. # 克隆代码git clone https://github.com/fatedier/frp.git# 切换目录cd frp# 构建frps服务端docker build -t frps:s390x -f …

ALPHA开发板上的PHY芯片驱动:LAN8720驱动

一. 简介 前面文章了解到,Linux内核是有提供 PHY通用驱动的。 本文来简单了解一下ALPHA开发板上的 PHY网络芯片LAN8720的驱动。是 LAN8720芯片的公司提供的 PHY驱动。 二. ALPHA开发板上的PHY芯片驱动:LAN8720驱动 我 们 来 看 一 下 LAN8720A 的 …

【算法每日一练]-数论(保姆级教程 篇1 埃氏筛,欧拉筛)

目录 保证给你讲透讲懂 第一种:埃氏筛法 第二种:欧拉筛法 题目:质数率 题目:不喜欢的数 思路: 问题:1~n 中筛选出所有素数(质数) 有两种经典的时间复杂度较低的筛法&#xff0…

LeetCode-98. 验证二叉搜索树【树 深度优先搜索 二叉搜索树 二叉树】

LeetCode-98. 验证二叉搜索树【树 深度优先搜索 二叉搜索树 二叉树】 题目描述:解题思路一:中序遍历解题思路二:0解题思路三:0 题目描述: 给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树…

Exchanger 怎么用J.U.C

Exchanger简介 Exchanger通常用来解决以下类似场景的问题,如下:两个线程间需要交换数据的问题,在多线程编程中,经常会有这样的场景:两个线程各自持有一些数据,并且需要在某个点上交换这些数据,…