【大模型系列】Grounded-VideoLLM(2024.10)

- Paper:https://arxiv.org/pdf/2410.03290
- Github:https://github.com/WHB139426/Grounded-Video-LLM
- Huggingface:https://huggingface.co/WHB139426/Grounded-Video-LLM
- Author:Haibo Wang et al. 加州大学,复旦
动机: 当前的video-LLMs由于缺少对时间信息的编码而导致其在细粒度的视频理解(fine-grained temporal grouding)能力受限。
关于fine-grained temporal grouding的三大基础能力:
- temporal referring:模型能识别某个具体时间段发生的事件
- temporal localizaing:模型能识别某个事件发生的时间段
- temporal reasoning:模型能推理某个时间段发生的事件与其他时间段事件之家的关系

解决方案:
- Two-Stream encoding:加入额外的时间流连编码帧之间的关系,即image encoder用于编码空间信息,video encoder用于编码时间信息
- Temporal tokens:用离散temporal tokens来视频中的相对时间位置
文章目录
- 1 模型结构
- 1.1 Two-stream encoding
- 1.1.1 Spatial stream
- 1.1.2 Temporal stram
- 1.1.3 特征融合
- 1.2 Unified temporal tokens
- 2 训练过程
- 2.1 Stage1: Video-Caption Alignment
- 2.2 Stage2: Temporal Token Alignment
- 2.3 Stage3: Multi-Task Instruction Tuning
- 3 Grouned VideoQA dataset generation
- 4 指标情况
- 4.1 grounding任务
- 4.2 VideoQA任务
- 5 总结
1 模型结构

- Image encoder:CLIP
- video encoder:InternVideo2-1B
- LLM:Phi3.5-Vision-Instruct-3.8B
- 时间编码到实际时间的转换:(当前token编码 / 总token编码)* 总视频时长
- 视频:采样成96帧,分成12个片段
1.1 Two-stream encoding
给定一个视频V(包含T帧),先将其分成K个视频片段,然后使用分组编码策略。由于视频中连续帧存在冗余性,于是每个视频片段都可以表示成2个部分:空间(spatial)和时间(temporal)。
- 空间:每个视频片段用一个独立关键帧(每个片段最中间的1帧)来表示空间信息
- 时间:用连续的帧来获取片段内的动作变化
1.1.1 Spatial stream
- 关键帧:每个视频片段的中间帧
- image encoder:CLIP
- 使用池化策略来减少token数量:2d池化尺寸为2x2
1.1.2 Temporal stram
- video encoder:InternVideo2-1B
- 每个视频片段包含96 / 12 = 8帧
- 使用池化策略来减少token数量,也只在空间维度上池化,2d池化尺寸为4x4
1.1.3 特征融合
直接使用concat,在token数量维度上进行拼接。
F S e g = C o n c a t [ F l a t t e n ( f ( F S ) ) ; F l a t t e n ( g ( F T ) ) ] F_{Seg} = Concat [Flatten(f(F_S)); Flatten(g(F_T ))] FSeg=Concat[Flatten(f(FS));Flatten(g(FT))]
f和g分别代表2层MLP,用于对齐LLM的维度需求。最后再将K组 F s e g F_{seg} Fseg拼接到一起得到视频的编码 F v i d F_{vid} Fvid。
1.2 Unified temporal tokens
使用相对时间表示,将连续的时间戳表示为离散的temporal tokens。其具体表示如下:
- 给定一个视频V,长度为L秒,均匀的将其划分为M(M=300),这样就可以得到M+1个离散时间点(<0> ~ <m>,<0>一般表示视频开始时间,<m>表示视频结束时间)
- 一个连续的时间戳转为temporal tokens:
t = R o u n d ( M × τ L ) τ = L × t M t = Round(M\times \frac{τ}{L}) \\ τ = L \times \frac{t}{M} t=Round(M×Lτ)τ=L×Mt
于是视频片段及其内容可表示为:

其中:
- <s>和</s>表示squence的开始和结束
- <video>和</video>表示视频的编码
- <grounded>是一个特殊token用于告诉模型输出grounded timestamps
2 训练过程
从pre-trained image-based MLLM开始,采用渐进式策略增强fine-grained temporal grounding能力。分为三个阶段。

2.1 Stage1: Video-Caption Alignment
使用video-caption数据来实现模态对齐,其他层冻结,只训练映射层MLP(f(·), g(·))。
2.2 Stage2: Temporal Token Alignment
引入temporal tokens和grounded数据,持续微调。训练参数为:
- 映射层MLP(f(·), g(·))
- word embedding matrix(add temporal tokens)
- final classifier of LLM
2.3 Stage3: Multi-Task Instruction Tuning
引入instruct数据微调,训练参数与stage类似:
- 映射层MLP(f(·), g(·))
- word embedding matrix(add temporal tokens)
- LoRA微调LLM
3 Grouned VideoQA dataset generation
- 使用OpenAI ChatGPT-4辅助数据生成
- 基于开源的已经包含temporal label信息的数据集如ActivityNet-Caption、QVHighlights
- 转化为多选任务multi-choice problem

具体步骤如下:
- 构造QA-pairs:首先将时间与描述输入到GPT中得到QA-pairs

- 构造选项:使用余弦相似度,检索50个与当前问题相似的问题,并从这50个答案中随机选择4个与答案相似的构造选项,答案相似度从0.2~0.9
4 指标情况
4.1 grounding任务

4.2 VideoQA任务

5 总结
时间编码的思路可以借鉴,不过仍然存在几个问题:
- 针对长视频,均有抽取96帧还是否有效?
- 关键帧选取每个片段的中间帧是否合理?理想情况下每个片段场景应该类似,但是实际中,每个片段可能出现不同的镜头拍摄角度。以关键帧作为间隔来分割会更合理但是会出现不均匀分割的现象。
相关文章:
【大模型系列】Grounded-VideoLLM(2024.10)
Paper:https://arxiv.org/pdf/2410.03290Github:https://github.com/WHB139426/Grounded-Video-LLMHuggingface:https://huggingface.co/WHB139426/Grounded-Video-LLMAuthor:Haibo Wang et al. 加州大学,复旦 动机&a…...
EV录屏好用吗?盘点2024年10款专业好用的录屏软件。
EV录屏的方式有很多种,它设置了很多模式,并且录制高清,可以免费使用。但是现在很多的录屏工具都有着与这个软件相似的功能,在这里我可以给大家列举一些。 1、福昕电脑录屏 这个软件为用户提供了多种录制模式,让视频录…...
Pandas | 理性判断数据是否存在缺失值的一种方法
理性判断 一般思路进一步思考df[B].explode() 一般思路 tcc.info()上述信息info显示没有缺失值 但是真实的情况还是要根据业务实际分析tcc.isnull().sum() # 和tcc.info()作用和tcc.info() 其实是一样的 进一步思考 在此过程中,我们需要检验是否存在采用别的值来表…...
ENSP (虚拟路由冗余协议)VRRP配置
VRRP(Virtual Router Redundancy Protocol,虚拟路由冗余协议)是一种用于提高网络可用性和可靠性的协议。它通过在多个路由器之间共享一个虚拟IP地址,确保即使一台路由器发生故障,网络依然能够正常运行,防止…...
move_base
move_base 官方介绍:http://wiki.ros.org/move_base 如果在仿真环境下, sensor source、odometry source 和 sensor transforms 都已提供好,我们只需要完成以下部分: 一、编写导航程序 ①创建 ROS 工作空间 和 pkg 包 mkdir -p …...
Android Intent 跳转常见系统设置
常量值描述android.settings.DATA_ROAMING_SETTINGS显示 2G/3G 选择的设置android.settings.SETTINGS显示系统设置android.settings.WIFI_SETTINGS显示设置以允许配置 Wi-Fiandroid.intent.action.POWER_USAGE_SUMMARY显示电池 … 更多GO 官网...
[复健计划][紫书]Chapter 7 暴力求解法
7.1 简单枚举 例7-1 Division uva725 输入正整数n,按从小到大的顺序输出所有形如abcde/fghij n的表达式,其中a~j恰好为数字0~9的一个排列(可以有前导0),2≤n≤79。枚举fghij,验证a…...
基于SpringBoot的社区讯息服务小程序【附源码】
基于SpringBoot的社区讯息服务小程序 效果如下: 系统登陆页面 管理员主页面 用户管理页面 社区活动管理页面 设施报修管理页面 缴费信息管理页面 用户主页面 用户登录页面 社区活动页面 研究背景 随着移动互联网技术的飞速发展,社区生活日益依赖于数字…...
springboot图书管理系统(一个简单的单体架构项目,适合小白)
期末作业 为了水一水期末作业,打算写一个简易的单体架构图书管理系统。以下为后端主要技术栈(后期可能更新,打算一个星期左右写完吧)。 springbootredismysqlspringcachespringsecurity … 数据库设计 第一次从0开始搭建后续可能还会多更新一些表。 -- 角…...
《CLR via C#》读书笔记--CLR的执行模型
将源代码编译成托管模块将托管模块合并成程序集加载公共语言运行时执行程序集的代码本机代码生成器:NGen.exeFramework 类库入门通用类型系统公共语言规范(CLS)与非托管代码的互操作性 将源代码编译程托管模块 公共语言运行时(Co…...
Javascript常见数据结构及其应用场景
Basic 以下是对JavaScript中常见数据结构及其应用场景的详细扩展: 数组(Array) 定义与特性:数组是由一组按顺序排列的值组成,每个值都有一个对应的索引(下标),可以通过索引访问和修…...
简单的签到程序 python笔记
简单的人脸识别签到程序 在看完以下代码后,略微修改一番,你就能够组装出自己的“简单的人脸识别签到程序”了。 请注意库的安装,否则会不可用。 你可以通过在cmd中使用:pip install来安装。 以下代码运行python 3.8 UI界面 使…...
30天如何成功转行成为AI产品经理?如果你也想转行到AI,赶紧进来抄作业!!!
前言 随着AI技术的快速发展,AI产品经理成为了备受瞩目的职业。如果您也想抓住这个机遇,不妨跟随这份30天快速入门指南,开始您的AI产品经理转型之旅。 一、学习路线 第一阶段(5天):初阶应用 该阶段让大家…...
基于Python+Vue开发的蛋糕商城管理系统
项目简介 该项目是基于PythonVue开发的蛋糕商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Python编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Python的蛋糕商…...
WSL开发--利用Git连接远程仓库(详细步骤)
这篇文章主要介绍了如何将本地项目推送到 GitLab 上,并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版: 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…...
VLAN高级+以太网安全
VLAN聚合 MUX VLAN QinQ 以下是这三种VLAN技术的作用及其在项目中的应用实例: VLAN聚合 (VLAN Aggregation) VLAN聚合通常用于将多个VLAN数据聚合到一个物理链路上,以减少链路数量、提高链路利用率。这样可以在一个物理链路上同时传输不同VLAN的数据包&…...
R7:糖尿病预测模型优化探索
🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 一、实验目的: 探索本案例是否还有进一步优化的空间 二、实验环境: 语言环境:python 3.8编译器:Jupyter notebo…...
Spring核心:探索IoC容器与依赖注入的奥秘
目录 一、什么是Spring? 二、什么是 Ioc ? 2.1 控制反转的实现方式 2.1.1 依赖注入 2.1.2 依赖查找 2.1.3 优点分析 2.2 理解 Ioc 一、什么是Spring? 我们通常所说的 Spring 指的是 Spring Framework(Spring 框架ÿ…...
15分钟学 Go 实践项目二:打造博客系统
打造博客系统 项目概述 在本项目中,我们将创建一个简单的博客系统,重点实现CRUD(创建、读取、更新、删除)操作和用户管理。这个博客系统将使用户能够发布文章,评论,并管理其个人账户信息。 目标 实现用…...
Follow软件的使用入门教程
开篇 看到很多兄弟还不知道怎么用这个当下爆火的浏览器!在这里简单给需要入门的小伙伴一些建议: 介绍 简单解释一下,RSS 意思是简易信息聚合,用户可以通过 RSS 阅读器或聚合工具自主订阅并浏览各个平台的内容源,不用…...
生成xcframework
打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式,可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...
shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...
均衡后的SNRSINR
本文主要摘自参考文献中的前两篇,相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程,其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt 根发送天线, n r n_r nr 根接收天线的 MIMO 系…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
