【LLM多模态】视频理解模型Cogvlm-video和MVBench评测基准

note

  • Cogvlm-video模型通过视频抽帧(24帧,每帧大小为224 x 224)后经过ViT进行图像编码(ViT中添加了2x2的卷积核更好的压缩视觉信息),使用adapter模块更好的将视觉特征和文本特征对齐,得到的图像特征和文本特征拼接后,送入语言模型的decoder解码器。
    • 模型结构代码:cogvlm_video_chat/ZhipuAI/cogvlm2-video-llama3-chat/modeling_cogvlm.py
    • 代码的VisionExpertAttention类的Transpose a 3D tensor [B, L, H*HD] into a 4D tensor with size [B H L HD]
  • MVBench评测集准:大多数测试主要集中在静态图像任务上的空间理解,而忽视了动态视频中的时间理解。MVBench评测集准在20个视频理解任务上评测模型,20个任务可以分为九大类。下图展示了 MVBench 评测基准中的 20 种任务,这些任务被分为两大类:空间理解任务(Spatial Understanding: Inferring from a single frame)和 时间理解任务(Temporal Understanding: Reasoning based on entire video)。
    • 自动QA生成:作者设计了一个自动化的QA生成范式,将公共视频注释转换为多项选择QA,以评估MVBench中的每个任务。
  • VideoChat2模型:为了在MVBench上取得良好的性能,作者开发了一个强大的视频MLLM基线模型VideoChat2,并通过渐进式多模态训练与多样化的指令调整数据进行训练。
  • 外部的视频理解微调代码:https://github.com/modelscope/ms-swift/blob/main/docs/source_en/Multi-Modal/cogvlm2-video-best-practice.md

文章目录

  • note
  • 一、cogvlm-video视频理解模型
    • 1. 模型结构
    • 2. 训练过程
      • (1)pre-training
      • (2)post-training
  • 二、视频理解能力
    • 空间理解任务(Spatial Understanding: Inferring from a single frame)
    • 时间理解任务(Temporal Understanding: Reasoning based on entire video)
  • 三、相关实验结论
  • Reference

一、cogvlm-video视频理解模型

  • CogVLM2-Video模型:通过抽取关键帧的方式,实现对连续画面的解读,该模型可以支持最高1分钟的视频(这里1min指cogvlm2-video-llama3-base的效果)。
    • chat模型是取前24帧,base模型是取整个视频的平均24帧
    • 支持英文(但实测有时能回答中文,估计中文训练数据较少)
  • CogVLM2 在预训练阶段和微调阶段都使用具有视觉专家的模型结构,支持高达 1344 × 1344 像素的输入分辨率。视频理解模型CogVLM2-Video 提出了一种自动化时序定位数据构建方法,并引入多帧视频图像和时间戳作为编码器输入。
模型名称cogvlm2-video-llama3-chatcogvlm2-video-llama3-base
基座模型Meta-Llama-3-8B-InstructMeta-Llama-3-8B-Instruct
语言英文英文
任务视频理解, 单轮对话模型视频理解, 基座模型, 不可对话
Int4模型11
文本长度2K2K
图片分辨率224*224(视频, 取前24帧)224*224(视频, 取平均24帧)

1. 模型结构

  • 在视频理解领域,现有的模型通常缺乏时序定位能力,无法准确关联视频帧与具体时间戳;而Cogvlm2-video模型通过融合视频抽帧和时间戳信息,提高了模型在视频理解和时间定位方面的能力。
  • 视频抽帧(24帧,每帧大小为224 x 224)后经过ViT进行图像编码(ViT中添加了2x2的卷积核更好的压缩视觉信息),使用adapter模块更好的将视觉特征和文本特征对齐,得到的图像特征和文本特征拼接后,送入语言模型的decoder解码器。
  • 开源的cogvlm2-video-llama3-base和cogvlm2-video-llama3-chat模型将cogvlm2的语言模型从chatglm改为llama3

论文中的模型架构如下:
在这里插入图片描述

2. 训练过程

(1)pre-training

数据构造策略:用模型在开源数据上打标再人工check、使用合成数据
由于cogvlm2-video是直接加载cogvlm模型权重进行SFT微调,所以pretraining这部分是cogvlm模型的pre-training,即预训练分为两阶段:

  • 第一阶段是基于图文对数据进行image captioning loss的优化
  • 第二阶段是image caption和REC两个数据上进行预训练,这里的REC是bounding box预测任务(只对bounding box的坐标答案计算loss)

(2)post-training

在这里插入图片描述
数据构造策略:

  • 大量VQA数据
  • TQA数据:用VLM逐帧理解视频,然后使用GPT-4o进行数据过滤(会过滤场景内容变化较小的video,使用的prompt如下)
We extracted several frames from this video and described each frame using an image caption model, stored in the dictionary variable 'image_captions: Dict[str:str]'. In 'image_captions', the key is the second at which the image appears in the video, and the value is a detailed description of the image at that moment. Our image captions may contain hallucinations and errors. If you find any information that seems incorrect, please ignore the erroneous information. image_captions={images_caption} Please determine whether there are significant scene changes in each second of the video based on the frame descriptions. If there are significant changes, output \"Yes\"; otherwise, output \"No\".For example, if the description continuously mentions a pool scene or a kitchen scene, then return \"No\". If the description first mentions an indoor scene and then a beach scene, then return \"Yes\". Output your final answers directly. Do not give out your reason.
  • 注意这里的训练数据包括时间问答数据(如问某个动作在第几秒等)
  • 构建数据(构建视频的问答对)使用的prompt如下:
We extracted several frames from this video and described each frame using an image caption model, stored in the dictionary variable 'image_captions: Dict[str:str]'. In 'image_captions', the key is the second at which the image appears in the video, and the value is a detailed description of the image at that moment. You will play two roles: a human asking a question related to the biggest change in the video and an intelligent chatbot designed for video understanding.Your question and answer should be based on the information provided by 'image_captions'.\n" "image_captions={images_caption}\nPlease generate the response in the form of a Python dictionary string with keys \"Human\" for question and \"Bot\" for answer. Each corresponding value should be the question and answer text respectively. For example, your response should look like this: {\"Human\": \"Your question here...\", \"Bot\": \"Your answer here...\"}. Do not mention variables like 'image_captions' in your response. Always generate the question and the answer as if you are directly looking at the video.The questions you generate should focus on the biggest scene change. Do not generate questions that can be easily answered from a single image. Here are some examples of what we expect:\nExample 1: {\"Human\": \"At what second does the girl appear?\", \"Bot\": \"The girl appears at the 3rd second in the video.\"}\nExample 2: {\"Human\": \"When does the video switch from the swimming pool to the grass?\", \"Bot\": \"At the 3rd second.\"}\nExample 3: {\"Human\": \"When does a significant scene change occur in the video? \", \"Bot\": \"At the 10th second, the scene changes from the playground to the classroom.\"}\nIf you think it is not possible to generate such questions and answers from the given image captions, output \"None\" directly. Keep your answers concise and accurate and generate only one question and answer pair.

训练策略:
(一)CogVLM2和GLM-4V在post-training阶段:

  1. 第一阶段:
  • 在这个阶段,模型使用所有视觉问答(VQA)训练数据集和大约300K的对齐语料库进行训练,以增强模型的基础能力。
  • 模型进行3000次迭代,学习率为1e-5,全局批次大小为2340。
  • 这个阶段的目的是提升模型对图像相关问题回答的能力,同时保持对图像内容的准确理解。
  1. 第二阶段:
  • 在第二阶段,模型使用一部分VQA数据集和大约50K的偏好对齐数据进行(DPO)训练,以优化模型的输出风格,使其更符合人类的偏好。
  • 这个阶段将全局批次大小减少到1150,并进行750步的训练。
  • 这个阶段的目标是使其更加符合人类的表达方式和偏好,提高模型在实际应用中的可用性和准确性。
    注意:
  • 两阶段都是全参微调
  • 为了增强训练的稳定性和效果,视觉编码器的参数也会被更新,并将其学习率调整为一般情况lr的1/10

(二)CogVLM-video的SFT过程:指令微调(Instruction Tuning)和时间定位微调(Temporal Grounding Tuning)

  1. 指令微调(Instruction Tuning):
  • 这个阶段的目标是提高模型对视频理解的一般能力,特别是处理视频字幕和问答任务。
  • 模型使用处理好的caption数据集和公开可用的问题回答数据进行训练。
  • 学习率为4e-6,主要使用VideoChat2提供的指令微调数据,不包括简单的字幕数据集。
  • 在指令微调阶段,总共使用了330k视频样本。
  1. 时间定位微调(Temporal Grounding Tuning):
  • 这个阶段的目标是训练CogVLM2-Video模型处理时间定位问题,即能够理解视频中特定时间点信息。
  • 模型在时间定位问答(TQA)数据集上进行训练,学习率为1e-6。
  • 通过这个训练过程,CogVLM2-Video不仅在公共基准测试中表现出色,而且还具备了大多数先前视频模型所缺乏的时间问题回答能力。
    注意:这两个阶段都是全参微调

二、视频理解能力

下图显示了 CogVLM2-Video在 MVBench、VideoChatGPT-Bench和 Zero-shot VideoQA 数据集 (MSVD-QA、MSRVTT-QA、ActivityNet-QA) 上的性能。
在这里插入图片描述
CogVLM2-Video 在 MVBench 数据集上的表现:
在这里插入图片描述
MVBench评测集准:
大多数测试主要集中在静态图像任务上的空间理解,而忽视了动态视频中的时间理解。MVBench评测集准在20个视频理解任务上评测模型,20个任务可以分为九大类。下图展示了 MVBench 评测基准中的 20 种任务,这些任务被分为两大类:空间理解任务(Spatial Understanding: Inferring from a single frame)和 时间理解任务(Temporal Understanding: Reasoning based on entire video)。每类任务包含若干具体子任务:
在这里插入图片描述

空间理解任务(Spatial Understanding: Inferring from a single frame)

根据视频的单帧图像进行推理和理解的任务:

  1. Action(动作):
  • 任务示例:What’s the man doing?(这个人在做什么?)
  • 解释:识别和描述图像中的动作。
  1. Object(物体):
  • 任务示例:What’s on the table?(桌子上有什么?)
  • 解释:识别图像中的物体。
  1. Position(位置):
  • 任务示例:Is the man on the stage?(那个人在舞台上吗?)
  • 解释:确定图像中物体或人物的位置。
  1. Count(计数):
  • 任务示例:How many chairs?(有多少把椅子?)
  • 解释:计算图像中某类物体的数量。
  1. Scene(场景):
  • 任务示例:Where’s the man?(这个人在哪里?)
  • 解释:识别图像中的场景。
  1. Pose(姿态):
  • 任务示例:What’s the man’s pose?(这个人的姿势是什么?)
  • 解释:确定图像中文物或人物的姿态。
  1. Attribute(属性):
  • 任务示例:What color is the desk?(桌子是什么颜色的?)
  • 解释:描述图像中物体的属性。
  1. Character(字幕):
  • 任务示例:What are the subtitles?(字幕是什么?)
  • 解释:识别和读取图像中的文本信息。
  1. Cognition(认知):
  • 任务示例:Why is the man singing in the canteen?(为什么那个人在食堂里唱歌?)
  • 解释:进行更高层次的理解和推理,回答“为什么”类的问题。

时间理解任务(Temporal Understanding: Reasoning based on entire video)

这是根据整段视频进行推理和理解的任务:

  1. Action(动作):
  • Action Sequence(动作序列):识别动作发生的顺序。
  • Action Antonym(动作反义词):识别相反的动作。
  • Action Prediction(动作预测):预测未发生的动作。
  • Unexpected Action(意外动作):识别意外发生的动作。
  • Fine-grained Action(细粒度动作):识别细微的动作变化。
  1. Object(对象):
  • Object Shuffle(物体打乱):识别物体的重新排列或位置变化。
  • Object Existence(物体存在):判断某物体是否存在。
  • Object Interaction(物体交互):识别物体之间的交互行为。
  1. Position(位置):
  • Moving Direction(移动方向):识别物体或人的移动方向。
  • Action Localization(动作定位):定位特定动作发生的位置。
  1. Count(计数):
  • Action Count(动作计数):计算特定动作的发生次数。
  • Moving Count(移动计数):计算移动的物体或人物数量。
  1. Scene(场景):
  • Scene Transition(场景转换):识别场景变化和转换点。
  1. Pose(姿态):
  • Fine-grained Pose(细粒度姿态):识别细微的姿态变化。
  1. Attribute(属性):
  • State Change(状态变化):识别物体或人物的状态变化。
  • Moving Attribute(移动属性):识别物体或人物移动时的属性变化。
  1. Character(字幕):
  • Character Order(字幕顺序):识别字符出现的顺序。
  1. Cognition(认知):
  • Episodic Reasoning(情节推理):理解影片的剧情发展和情节关系。
  • Egocentric Navigation(自我Navigation):基于视频中的视角进行Navigation和推理。
  • Counterfactual Inference(反事实推理):推理假设情景中“如果……会怎么样”的问题。

三、相关实验结论

  • 1min内的视频总结效果较好
  • 改变默认帧数(frame_num=24,表示模型一次处理的帧数),帧数越多则效果越差。
  • 分段再合并的测试结论:
    • 对于电影等视频,分段再合并后不容易衔接片段间信息(比如肖生克的救赎电影片段)
    • 分段再总结的方法,也不适用于用户对话的情况

Reference

[1] https://modelscope.cn/models/ZhipuAI/cogvlm2-video-llama3-chat/files
[2] https://modelscope.cn/models/ZhipuAI/cogvlm2-video-llama3-base
[3] https://cogvlm2-video.github.io/
[4] 技术博客:https://cogvlm2-video.github.io/
[5] 评估脚本:https://github.com/magic-research/PLLaVA/blob/main/README.md
[6] 【论文分享】PLLaVA : Parameter-free LLaVA Extension from Images to Videos for Video Dense Captioning
[7] LVM视频理解模型
[8] [CVPR2024 Highlight] MVBench多模态视频理解能力的全面评测:https://zhuanlan.zhihu.com/p/669658267

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

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

相关文章

5--苍穹外卖-SpringBoot项目中菜品管理 详解(一)

目录 公共字段自动填充 问题分析 实现思路 代码开发 步骤一 步骤二 功能测试 新增菜品 需求分析和设计 代码开发 文件上传接口 功能测试 1--苍穹外卖-SpringBoot项目介绍及环境搭建 详解-CSDN博客 2--苍穹外卖-SpringBoot项目中员工管理 详解(一&#…

python绘制图像

柱状图 import os# 输入想要存储图像的路径 os.chdir(D:)import matplotlib.pyplot as plt import numpy as np # 改变绘图风格 import seaborn as snssns.set(color_codesTrue)cell [gen7, xgspon, 3081GB, vettel, totalplay, other] pvalue [21, 20, 18, 13, 7, 34]width…

【GUI设计】基于图像分割的GUI系统(6),matlab实现

博主简介: 如需获取设计的完整源代码或者有matlab图像代码项目需求/合作,可联系主页个人简介提供的联系方式或者文末的二维码。博客内容有疑问可联系沟通(博主邮箱:3249726188qq.com)。 ~~~~~~~~~~~~~~~~~~~~~~~…

实现简易 vuedraggable 的拖拽排序功能

一、案例效果 拖拽计数4实现手动排序 二、案例代码 <draggable:list"searchResult.indicator":group"{ name: indicators }"item-key"field"handle".drag-handle-icon"><divclass"field-item"v-for"(item…

快速创建第一个Spring Boot 项目

一、介绍 Spring Boot 是一个开源的 Java 基础框架&#xff0c;它基于 Spring 框架&#xff0c;用于创建独立、生产级别的基于 Spring 的应用程序&#xff0c;你可以“跑起来”&#xff08;run&#xff09;你的 Spring 应用程序。Spring Boot 让基于 Spring 的应用开发变得更容…

对onlyoffice进行定制化开发

基于onlyoffice8.0源码&#xff0c;进行二次开发&#xff0c;可实现包括但不限于以下的功能 1、内容控件的插入 2、内容空间的批量替换 3、插入文本 4、插入图片 5、添加&#xff0c;去除水印 6、修改同时在线人数限制 7、内容域的删除 8、页面UI的定制化 9、新增插件开发 10、…

生信初学者教程(四):软件

文章目录 RRstudioLinux系统其他软件本书是使用R语言编写的教程,用户需要下载R和RStudio软件用于进行分析。 版权归生信学习者所有,禁止商业和盗版使用,侵权必究 R R语言是一种免费的统计计算和图形化编程语言,是一种用于数据分析和统计建模的强大工具。它具有丰富的统计…

C语言 | Leetcode C语言题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; #define MAX_LEVE_SIZE 1000 #define MAX_NODE_SIZE 10000int** levelOrder(struct Node* root, int* returnSize, int** returnColumnSizes) {int ** ans (int **)malloc(sizeof(int *) * MAX_LEVE_SIZE);*returnColumnSizes (int *)mal…

ArcGIS Desktop使用入门(三)常用工具条——拓扑(下篇:地理数据库拓扑)

系列文章目录 ArcGIS Desktop使用入门&#xff08;一&#xff09;软件初认识 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——标准工具 ArcGIS Desktop使用入门&#xff08;二&#xff09;常用工具条——编辑器 ArcGIS Desktop使用入门&#xff08;二&#x…

WordPress最佳恶意软件扫描插件:入门级指南

在现代互联网环境中&#xff0c;网站安全已经成为每个网站管理员必须重视的问题。特别是对于使用WordPress的用户来说&#xff0c;由于其普及度高&#xff0c;WordPress网站常常成为黑客的首要攻击目标。幸运的是&#xff0c;有许多优秀的恶意软件扫描插件可以帮助我们保护网站…

[附源码]网上订餐系统+SpringBoot+前后端分离

今天带来一款优秀的项目&#xff1a;网上订餐系统源码 。 系统采用的流行的前后端分离结构&#xff0c;包含了“管理端”&#xff0c;“商家管理端”&#xff0c;“用户购买端” 如果您有任何问题&#xff0c;也请联系小编&#xff0c;小编是经验丰富的程序员&#xff01; 一.…

[000-002-01].第29节:MySQL数据库缓冲池

1、什么是数据缓冲池&#xff1a; 1.InnoDB 存储引擎是以页为单位来管理存储空间的&#xff0c;我们进行的增删改查操作其实本质上都是在访问页面&#xff08;包括读页面、写页面、创建新页面等操作&#xff09;&#xff0c;而磁盘 I/O 需要消耗的时间很多&#xff0c;而在内存…

【Python报错已解决】TypeError: tuple indices must be integers or slices, not str

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 专栏介绍 在软件开发和日常使用中&#xff0c;BUG是不可避免的。本专栏致力于为广大开发者和技术爱好者提供一个关于BUG解决的经…

华为HarmonyOS灵活高效的消息推送服务(Push Kit) -- 7 推送卡片刷新消息

场景介绍 如今衣食住行娱乐影音应用占据了大多数人的手机&#xff0c;一部手机可以满足日常大多需求&#xff0c;但对需要经常查看或进行简单操作的应用来说&#xff0c;总需要用户点开应用体验较繁琐。针对此种场景&#xff0c;HarmonyOS提供了Form Kit&#xff08;卡片开发服…

Python | Leetcode Python题解之第437题路径总和III

题目&#xff1a; 题解&#xff1a; class Solution:def pathSum(self, root: TreeNode, targetSum: int) -> int:prefix collections.defaultdict(int)prefix[0] 1def dfs(root, curr):if not root:return 0ret 0curr root.valret prefix[curr - targetSum]prefix[cu…

知识管理数据库

知识管理数据库&#xff0c;可以分为几类&#xff1a; 灵感库、卡片库、作品库。 灵感库&#xff0c;通常是素材&#xff0c;想法。 片库&#xff0c;是完整的&#xff0c;成段落的文字。 作品库&#xff0c;是文章、专栏&#xff0c;或者书籍。 这三者的关系&#xff0c;好比…

Java文件上传同时传入JSON参数

前言 此篇文章用于解决一个接口内同时完成文件的上传及JSON参数的传入(生产环境已验证); 1.准备接口 import cn.cdjs.vo.UserVO; import cn.hutool.json.JSONUtil; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFi…

黑马头条day3-3自媒体接口作业

黑马头条day3-3自媒体接口作业 1)素材管理 1.1)图片删除 接口描述 说明接口路径/api/v1/material/del_picture/{id}请求方式GET参数Integer id响应结果ResponseResult 返回结果实例&#xff1a; 实现思路 感觉删除比较难写 因为需要判断图片是不是和文章挂钩了 gpt帮了很…

Spring Cloud 教程(二) | 搭建SpringCloudAlibaba

Spring Cloud 教程&#xff08;二&#xff09; | 搭建SpringCloudAlibaba 前言一、SpringBoot 与 SpringCloud 版本对应关系&#xff1a;二、SpringCloud 与 SpringCloudAlibaba版本对应关系&#xff1a;三、SpringCloudAlibaba版本 与 组件版本 对应关系&#xff1a;四、搭建S…

【Redis】主从复制(上)

文章目录 1.主从复制的基本概念基本概念主从复制的作用 2.在一个服务器上建立一个主从结构的redis集群建立主从关系断开主从关系redis中重要配置安全性只读传输延迟 3.主从关系--拓扑结构一主一从一主多从树形主从结构 1.主从复制的基本概念 基本概念 Redis 的主从复制&#…