最新视频理解大模型之MiniGPT4-video

前言

随着大模型的爆火,多模态大模型也随之卷了起来,基本每隔一小段时间就会冒出一个新模型。

今天给大家带来一个最新发现的关于视频理解的多模态大模型。

它的名字是MiniGPT4-video,可以看的出来其是MiniGPT4的一个分支;MiniGPT4主要是图文理解,而MiniGPT4-video则是沿用其思路将其扩展到视频领域。

项目主页 https://vision-cair.github.io/MiniGPT4-video

论文链接 http://arxiv.org/abs/2404.03413.pdf

代码链接 https://github.com/Vision-CAIR/MiniGPT4-video

效果

废话不多说,先看看效果。

(1)为了测试其真实泛化效果,笔者随机从抖音找了一些视频,本地加载模型进行了尝试

demo

在这里插入图片描述

翻译一下模型的回复是:“这个视频是一个由婴儿和幼儿互相玩耍的片段合集。视频展示了孩子们的天真和好玩,他们参与各种活动,比如爬行、笑声和互相拥抱。视频配有欢快的音乐,氛围轻松愉快,充满了喜悦的气氛。
这个视频似乎没有特定的主题或信息,而是旨在展示年幼儿童的天性好奇和好玩。它可以用作娱乐或教育观众有关幼儿发展阶段的方式,或者仅仅是为了给他们带来微笑。
总的来说,这个视频是对童年的天真和快乐的温馨而令人愉悦的描绘。”

整体上效果还不错。

(2)论文中的一些体感case

(3)论文中的一些benchmark量化效果

怎么做到的呢

其整个模型架构设计沿用MiniGPT4的思路,即讲图像encode和文本encode拼在一起,然后送到一个已经开源的LLM模型中进行训练。具体的其一共分了三步进行逐步训练。

  • stage1 : Large-scale image-text pair pretraining

第一步主要就是训练一个图像特征提取器即一个线性层linear layer。具体的图像先经过EVA-CLIP编码,然后通过linear layer将其映射到LLM,然后使用captioning loss进行更新学习linear layer。

注意这里还没有上升到要处理视频,就是简单的一个图文pair预训练。目的就是让模型先对图片有一个简单的学习和理解。为后面的视频理解打下一个基础。

  • stage2 : Large-scale video-text pair pretraining

经过stage1后,模型已经对单张图片有了一个不错的理解了,现在开始让其对视频进行理解学习。所谓视频其实就是由一些列单个图片在时间序列进行串联组成的。

所以使用了如下模版来作为处理视频的模版:

<s>[INST]<Img><FrameFeature_1><Sub><Subtitle text_1>... <Img> <FrameFeature_N><Sub><Subtitle text_N><Instruction></INST>

其中<s>、[INST]、<Img>、<Sub>、</INST>都是特殊的占位符或者说分割符号。

<FrameFeature_1>位置就是放经过stage1的linear layer得到的图片特征。

其次一个视频除了有图像,还有字幕这个信息源,所以<Subtitle text_1>的位置就是为了放字幕。

<Instruction>就是放用户针对视频要提问的具体文本问题。

可以看到作者就是将一个视频的多张图片和其对应的字幕以及用户的问题直接平铺cat到一起,以此最后送到LLM进行推理理解。 具体在拼接的时候其实是拼接emb。即各个模态先各自过各自的特征网络得到emb,然后再拼接在一起送到上层的LLM也即transformer。

更具体的,作者用的LLM是Llama2-7B,其最大token窗口是4096,作者将一张图片视为64个token。然后每个视频抽45帧,所以一个视频的图像部分用掉了2880个token。同时预留了1000个token给字幕。当然随着用的底座LLM不同,其最大token窗口也是不一样的,那么抽帧数量等等上面也可以适当进行调整,比如论文中也对Mistral进行了训练,感兴趣的同学可以去看一下。

另外需要说明的是stage2这里使用了大量的视频数据,但是这些视频数据对应的输出文本其实都是对视频本身的描述,所以作者的Instruction部分就是预先定义了一些指令池,然后每条样本随机抽一个处理比如:Briefly describe these video.

  • stage3 : Video question answering instruction finetuning

经过stage2后模型已经对视频有了理解的潜力,只不过需要更多样性的指令来激发模型对指令的理解。所以stage3在训练上和stage2没有任何区别,只是训练数据不一样,其<Instruction>更加多样。

这里stage3这里的作用有点类似LLM的SFT。

  • 小结

可以看到stage1和stage2其实都是在为最终的视频理解打基础,从“看懂图片到看懂视频”打基础,其实大模型领域的预训练pretrain就是在打基础,所以作者也将stage1和stage2过程命名为了是pretraining。

而stage3才是真真的微调finetuning也即在pretrain的基础上通过少量高质量的指令微调数据泛化出最终的视频理解模型。

另外作者所有的训练都是基于Lora进行的,并没有进行全参训练,所以下载模型的时候可以看到各个阶段的模型大小都比较小。

总结

有资源(pretrain阶段需要吃大量的数据,笔者看了一下基本都是按照T起步的)的同学可以做以下两个事情来玩玩:

(1) 奉行scaling law 大法,继续提升性能:比如使用全参训练、尝试基于13B的底座进行训练,又比如使用更多的优质视频数据等等:

Panda-70M:https://github.com/snap-research/Panda-70M

HD-vila-100:https://github.com/microsoft/XPretrain/blob/main/hd-vila-100m/README.md

InternVid:https://github.com/opengvlab/internvideo

相信性能肯定会有一个非常大的提升。

(2)汉化:当前的MiniGPT4-video还是一个以英文为主的模型,还可以尝试将其进行汉化,模型方面可以选择一些中文底座比如qwen等等(其实之前已经有人对MiniGPT4进行了汉化:https://github.com/Coobiw/MiniGPT4Qwen),数据方面可以进行翻译获得。

相信不久MiniGPT4-video的一些汉化工作就会出现。

总的来说上面的工作都可以拿来练练技术和实践。至于有什么实际用处的话,笔者觉得可以多发散想想,比如目前比较火的sora,很多团队在复现其工作,其中数据就是个难点,如果MiniGPT4-video最终的效果还不错,可以考虑拿来做视频打标工作(最起码做银标数据也不错)。

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

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

相关文章

root管理员用户启动kibana报错

问题描述: CentOS7.9.2009环境,以root管理员用户启动kibana7.11.1程序报如下错误: Kibana should not be run as root. Use --allow-root to continue. [root@elasticsearch bin]# whoami root [root@elasticsearch bin]# pwd /usr/local/kibana-7.11.1-linux-x86_64/bi…

STM32利用软件I2C通讯读MPU6050的ID号

今天的读ID号是建立在上篇文章中有了底层的I2C通讯的6个基本时序来编写的。首先需要完成的就是MPU6050的初始化函数 然后就是编写 指定地址写函数&#xff1a; 一&#xff1a;开始 二&#xff1a;发送 从机地址读写位&#xff08;1&#xff1a;读 0&#xff1…

ESP-IDF移植lvgl 驱动 ST7789

文章目录 1 前言2 准备3 移植LVGL3.1 工程准备3.2 修改 CMakeLists.txt文件编译 LVGL3.3 编译LVGL 4 编译 ST7789 LCD驱动5 发现问题 1 前言 本教程开始学习 LVGL的&#xff0c;开始之前要把环境配置好&#xff0c;首先就需要移植 lvgl&#xff0c;使用的是 esp32 环境&#xf…

【Vue】前端Crypto-js加密库md5加密转成二进制/十六进制/Base64格式

MD5是一种常用的哈希函数&#xff0c;用于生成数据的消息摘要&#xff0c;在前端开发中&#xff0c;我们经常需要对数据进行加密&#xff0c;以确保数据的安全性。 Crypto-js是一个常用的JavaScript加密库&#xff0c;它提供了MD5算法的实现&#xff0c;并且支持将加密结果转换…

C++_ 头指针在链表的操作中用来标识链表的起始位置

链表&#xff08;linked list&#xff09;是一种常见的数据结构&#xff0c;用于存储一系列元素。它由一系列节点组成&#xff0c;每个节点包含数据和指向下一个节点的指针。 在 C 中&#xff0c;可以使用结构体来表示链表节点&#xff0c;然后使用指针将这些节点连接起来。 -…

kafka学习记录

文章目录 windows单机版kafka搭建步骤主题的增删改查操作消息的生产与消费 Windows集群版kafka搭建步骤 prettyZoo 尚硅谷Kafka教程&#xff0c;2024新版kafka视频&#xff0c;零基础入门到实战 【尚硅谷】Kafka3.x教程&#xff08;从入门到调优&#xff0c;深入全面&#xff0…

分库分表-简单了解

通过下面这些文章&#xff0c;我知道了什么是分库分表&#xff0c; 以及 什么时候需要分库分表&#xff0c; 还有分库分表带来的问题。 我说MySQL单表超过2000w就要分库分表&#xff0c;面试官让我回去等通知&#xff1f; 目前还没有学习到分布式&#xff0c;微服务&#xf…

plsql developer 一键格式化sql/美化sql

PL/SQL 格式化工具 以 Oracle SQL Developer 为例&#xff0c;使用一键格式化的步骤如下&#xff1a; 打开 Oracle SQL Developer。在“文件”菜单中&#xff0c;选择“打开文件”&#xff0c;然后选择你的 PL/SQL 文件。打开文件后&#xff0c;你可以通过右键菜单选择“格式…

vue3 知识点的补充 之 第一节

01 vue2与vue3的区别 vue2 采用object.defuneProperty()实现 对数组不友好 重写了数组的方法&#xff0c;同时无法监听数组length长度的改变。对于对象只能劫持设置好的数据 新增需要使用vue.set vue3 采用proxy进行代理&#xff0c;不需要重写数组的方法 同时可以监听数组长度…

gdb相关指令

背景知识 通过上图&#xff0c;可以看到&#xff0c;gcc 和 g 默认形成的可执行程序是release的&#xff01;&#xff01;&#xff01;故无法直接被调试。因此带 -g 选项表示使用 Debug 模式进行编译&#xff0c;而且我们可以看到&#xff0c;Debug 模式下编译形成的可执…

OSCP靶场--ClamAV

OSCP靶场–ClamAV 考点 1.nmap扫描 ##┌──(root㉿kali)-[~/Desktop] └─# nmap -sV -sC 192.168.153.42 -p- -Pn --min-rate 2500 Starting Nmap 7.92 ( https://nmap.org ) at 2024-04-13 10:01 EDT Nmap scan report for 192.168.153.42 Host is up (0.24s latency). N…

ssl认证 生成证书的代码 java

网上流行的 InstallCert.java&#xff0c;应该出自于官网。但现在也找不到了&#xff0c;只能找到2011年的一篇文章&#xff08;在文章底下的参考链接&#xff09;。 以下是生成证书的代码&#xff1a; import java.io.BufferedReader; import java.io.File; import java.io.…

题目一 搭建电商平台WordPress

创建VPC01和VPC02&#xff0c;两个安全组&#xff08;按考试时拓扑图中实际要求的名称来创建&#xff0c;可能VPC 的名称是&#xff1a;web-active, db&#xff0c;上海容灾的VPC名称是&#xff1a; web-dril1&#xff09;&#xff0c;安全组要求最小化放行&#xff0c;包括业务…

033. 字母异位词分组

给定一个字符串数组 strs &#xff0c;将 变位词 组合在一起。 可以按任意顺序返回结果列表。 注意&#xff1a;若两个字符串中每个字符出现的次数都相同&#xff0c;则称它们互为变位词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出…

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…

VNC Viewer 连接远程主机及常见错误处理(The connection closed unexpectedly)

搭建可接收vnc连接的环境 1、下载镜像 https://github.com/fcwu/docker-ubuntu-vnc-desktop 该镜像是含有ubuntu 通过docker运行的桌面环境&#xff0c;并接受vnc 的连接 docker pull dorowu/ubuntu-desktop-lxde-vnc 2、运行容器 1&#xff09;只暴露容器的80端口&#…

二叉树练习day.9

669.修剪二叉搜索树 链接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 给你二叉搜索树的根节点 root &#xff0c;同时给定最小边界low 和最大边界 high。通过修剪二叉搜索树&#xff0c;使得所有节点的值在[low, high]中。修剪树 不应该 改变…

多模态 Multi-Module的创新点

最近在改论文 用了多模态 记得最早找创新点时 记录了关于多模态相关的一些值得深入研究的方向 记录于此 希望分享交流 *注:多模态不止多信息源; 除了不同的感知模态(如视觉、听觉、触觉等)之外,多模态还可以涉及到不同的数据表示、不同的特征空间、不同的数据类型等…

【从零单排Golang】第十六话:channel的用法和基本原则

在基于Golang的后端开发中&#xff0c;channel是一个必须要掌握的并发编程概念。和python的queue一样&#xff0c;channel在不同的goroutine里承担着传递信息的作用&#xff0c;使得业务逻辑的状态上下文可以在不同的goroutine中共享。今天&#xff0c;我们就来看一下channel的…

C语言隐藏执行其他程序

WinExec函数 #include<windows.h> int main() {WinExec("notepad.exe", SW_HIDE);return 0; }SW_HIDE 隐藏SW_SHOW 显示 ShellExecute函数 在C语言中使用ShellExecute函数可以执行外部程序&#xff0c;比如打开一个文件、运行一个程序等。 #include <wi…