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

Video-LLaMA论文解读和项目部署教程

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding

相关工作
大型语言模型:

        本文的工作基于这些LLM,并提供即插即用插件,使其能够理解视频中的视觉和听觉内容。

多模态大型语言模型:

        现有的方法可以分为两大类。

        第一类包括使用LLM作为控制器和利用现有的多模态模型作为工具。

        当接收到用户的文本指令时,LLM识别出用户的注意力,并决定调用哪些工具。然后,它通过整合从这些现成的多模态模型中获得的结果,生成全面的响应。

        第二类集中于训练基本的大规模多模态模型。

        关键思想是将用于其他模态的预训练基础模型与文本LLM对齐。

        本文的工作属于第二类,训练基本模型来理解视频中的视觉和听觉内容。

 与之前专注于静态图像的视觉LLM不同,如(MiniGPT-4/LLaVA),Video-LLaMA主要解决了两个挑战

        捕捉视觉场景中的时间变化:提出一种视频QFormer,将预训练的图像编码器组装到我们的视频编码器中,并引入视频到文本生成任务来学习视频语言对应关系。
        整合视听信号:利用ImageBind,这是一种将多个模态对齐的通用嵌入模型,作为预训练的音频编码器,并在ImageBind之上引入音频Q-Former,以学习LLM模块的合理听觉查询嵌入。
为了使视觉和音频编码器的输入与LLM的嵌入空间对齐,使用大量指令调整(instruct-tuned)数据集训练Video-LLaMA。

视频语言模型: 由一个用于从视频帧中提取特征的冻结视觉encoder,一个用于将时间信息注入视频帧的位置嵌入曾,一个聚合帧表示的视频Q-Former和一个将输出视频表示映射到LLM的线性层。
如图1的左部所示,它包括

        一个冻结的预训练图像编码器,用于从视频帧中提取特征;文章使用Blip-2中的视觉预训练组件作为冻结的视觉encoder来提取图像的特征,encoder包括一个Vit模型与一个预训练好的Q-former。

        一个位置嵌入层,用于将时间信息注入视频帧;文章在分支中加入了位置嵌入层作为指示器来将时间信息注入视频帧。

  来自冻结图像编码器的帧表示 v_{i} 是在不考虑任何时间信息的条件下进行计算的,因此需要加入位置嵌入作为帧的事件表示。然后将位置编码的帧表示送入视频Q-Former以获得维度为

\widetilde{v} \epsilon R^{K_{v}*d_{v}} 的视频嵌入向量。给定N个帧组成视频,Visual Encoder首先将每个帧映射到K_{f}个图像嵌入向量中,产生视频帧表示为V = [v1,v2,v3,vN],其中v_{i} \epsilon R^{K_{f}*d_{f}} 是对应于第i个帧的df维图像嵌入的集合。

        一个视频Q-former,用于聚合帧级表示;视频Q-former被训练来得到含文本信息量最大的的视觉嵌入向量。

        一个线性层,用于将输出视频表示投影到与LLM的文本嵌入相同的维度。为了使视频表示适应LLM的输入,文章添加了一个线性层,将不定长的视频嵌入向量转换为固定维数的视频查询向量。视频查询向量将被连接到输入文本嵌入中,作为视频软提示,引导冻结的LLM根据视频内容生成文本。  添加一个线性层,将视频嵌入转化为视频Query查询,Query查询向量与LLM文本嵌入维度相同,以便输入。在前向传递过程中,连接到输入文本嵌入作为视频prompt,引导冻结的LLM生成相关文本。利用BLIP-2(李等,2023b)的预训练视觉组件作为冻结视觉编码器,它包括来自EVA-CLIP(方等,2022)的ViT G/14和预训练Q-former。

音频语言模块:
如图1的右部所示,它包括

        一个预训练的音频编码器,用于在给定一小段原始音频的情况下计算特征;文章使用ImageBind作为音频的encoder,ImageBind强大的多模态对齐能力可以使音频与语言对齐。

        一个位置嵌入层,用于将时间信息注入音频段;

        一个音频Q-former,用于融合不同音频段的特征;

        一个线性层,用于将音频表示映射到LLMs的嵌入空间。

多分支跨模态训练-视频文本:  分别训练视觉与音频分支,第一阶段,使用大规模的视觉字幕数据集进行训练,第二阶段,使用高质量的指令跟随数据集进行微调。
阶段一:

        目标:使用大数据,使视频特征包含尽可能多的视觉知识。

        问题:视频表示使用冻结的LLMs生成的文本,不足以描述完整的视频。

        原因:视频语义与视频文本语义并不完全一致

        数据集:

                Webvid-2M:短视频数据集

                CC59K:CC3M过滤的图像字幕数据集

        结果:能够生成视频信息内容,但遵循指令能力下降

-------------------------------------------------------------------------------------------------------------------------

阶段二:

        目标:视觉文本对齐 指令跟随能力——>使用高质量数据集微调

        数据集:

                MiniGPT4:图像细节描述数据集

                LLaVA:图像指令数据集

                Video-chat: 视频指令数据集

        结果:理解图像和视频方面表现出非凡的能力

多分支跨模态训练-音频文本
目的:将冻结音频编码器的输出嵌入与LLM的嵌入空间对准

问题:音频文本数据的稀缺

解决:变通思路

        ImageBind音频编码器,具有将不同模态的beddings排列到一个公共空间的能力,在跨模态检索和生成任务中表现优秀。

        鉴于音频文本数据的稀缺和视觉文本数据的丰富,使用视觉文本数据训练音频语言分支,遵循与视觉分支相同的数据和过程。

结果:由于ImageBind提供的共享嵌入空间,Video-LLaMA在推理过程中表现出理解音频的能力,即使音频接口从未在音频数据上训练过。

项目部署:

项目地址:Video-LLaMA:[EMNLP 2023 Demo] Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding - GitCode

论文链接:https://arxiv.org/pdf/2306.02858.pdf

代码链接:https://github.com/DAMO-NLP-SG/Video-LLaMA

展示样例:https://www.youtube.com/watch?v=RDNYs3Rswhc&feature=youtu.be

Video-LLaMA-main资源-CSDN文库

  • [2024年06月03日] 🚀🚀 我们正式推出了VideoLLaMA2,具有更强性能和更易用的代码库,快来尝试吧!

  • [2023年11月14日] ⭐️ 当前的README文件仅适用于Video-LLaMA-2(使用LLaMA-2-Chat作为语言解码器),关于使用上一版本Video-LLaMA(使用Vicuna作为语言解码器)的说明,请参阅此处。
  • [2023年08月03日] 🚀🚀 发布Video-LLaMA-2,采用Llama-2-7B/13B-Chat作为语言解码器
    • 不再提供增量权重和单独的Q-形成器权重,运行Video-LLaMA所需的完整权重都在这里:[7B][13B]
    • 支持从我们的预训练检查点开始进一步定制:[7B预训练][13B预训练]
  • [2023年06月14日] 注意:当前在线互动演示主要用于英文聊天,提问中文问题可能不是最佳选择,因为Vicuna/LLaMA对中文文本的支持不够好。
  • [2023年06月13日] 注意:目前音频支持仅限于Vicuna-7B,尽管我们有其他解码器的多个VL检查点可用。
  • [2023年06月10日] 注意:我们尚未更新HF演示,因为整个框架(包括音频分支)在A10-24G上无法正常运行。当前运行的演示仍然是之前版本的Video-LLaMA,我们将会很快解决这个问题。
  • [2023年06月08日] 🚀🚀 发布了带有音频支持的Video-LLaMA的检查点。文档和示例输出也已更新。
  • [2023年05月22日] 🚀🚀 互动演示上线,在Hugging Face和ModelScope试试我们的Video-LLaMA(使用Vicuna-7B作为语言解码器)!
  • [2023年05月22日] ⭐️ 发布基于Vicuna-7B构建的Video-LLaMA v2
  • [2023年05月18日] 🚀🚀 支持中文的视频对话
    • Video-LLaMA-BiLLA:我们引入了 BiLLa-7B-SFT作为语言解码器,并使用机器翻译的VideoChat指令来微调视频与语言对齐的模型(即阶段1模型)。
    • Video-LLaMA-Ziya:类似于Video-LLaMA-BiLLA,但更换了语言解码器为Ziya-13B。
  • [2023年05月18日] ⭐️ 创建了一个Hugging Face 仓库,以存储Video-LLaMA所有变体的模型权重。
  • [2023年05月15日] ⭐️ 发布Video-LLaMA v2的检查点:利用VideoChat提供的训练数据,进一步增强了Video-LLaMA遵循指令的能力。
  • [2023年05月07日] 发布Video-LLaMA的初始版本,包括其预训练和指令微调的检查点。

简介

  • Video-LLaMA基于BLIP-2和MiniGPT-4构建,主要由两个核心组件构成:(1) 视觉-语言(VL)分支和(2) 音频-语言(AL)分支。
    • VL分支(视觉编码器:ViT-G/14 + BLIP-2 Q-Former)
      • 引入两层视频Q-Former及帧嵌入层,计算视频表示。
      • 在Webvid-2M视频字幕数据集上训练VL分支,以执行视频到文本生成任务。同时,添加来自LLaVA的约59.5万个图像标题对到预训练数据中,以增强静态视觉概念的理解。
      • 预训练后,我们使用来自MiniGPT-4、LLaVA和VideoChat的指令微调数据进一步细调我们的VL分支。
    • AL分支(音频编码器:ImageBind-Huge)
      • 引入两层音频Q-Former及音频段嵌入层,用于计算音频表示。
      • 由于使用的音频编码器(即ImageBind)已在多种模态之间对齐,我们仅在视频/图像指令数据上训练AL分支,仅连接ImageBind的输出至语言解码器。
  • 在跨模态训练期间,只有视频/音频Q-Former、位置嵌入层和线性层是可训练的。

使用方法

环境准备

首先,安装ffmpeg。

apt update
apt install ffmpeg

然后创建一个conda环境:

conda env create -f environment.yml
conda activate videollama

先决条件

不需要做任何事!

如何本地运行演示

首先,在eval_configs/video_llama_eval_withaudio.yaml中相应地设置llama_model(语言解码器路径)、imagebind_ckpt_path(音频编码器路径)、ckpt(VL分支路径)和ckpt_2(AL分支路径)。接着运行脚本:

python demo_audiovideo.py \--cfg-path eval_configs/video_llama_eval_withaudio.yaml \--model_type llama_v2 \ # 或者 vicuna--gpu-id 0

 更改权重文件路径:

运行demo_audiovideo.py进行演示

遇到的问题:

下载:镜像网站比如modelscope就非常好用,魔搭社区网速非常快!

版本问题:video-llama由于快速迭代有一些依赖包的一些方法被弃用了,这导致你直接pip install -r requirements.txt所下载的东西无法使用!主要原因就是因为requirements.txt没有指定相应的版本号

tqdm
decord
timm
einops
opencv_python==4.8.0.74
torchvision==0.14.0
torch==1.13.0
bitsandbytes
omegaconf
iopath
webdataset
ftfy
SentencePiece
transformers==4.28.0
gradio==3.24.1
pytorchvideo
gradio-client==0.0.8
torchaudio

 运行结果:

相关文章:

Video-LLaMA论文解读和项目部署教程

Video-LLaMA: An Instruction-tuned Audio-Visual Language Model for Video Understanding 相关工作 大型语言模型: 本文的工作基于这些LLM,并提供即插即用插件,使其能够理解视频中的视觉和听觉内容。 多模态大型语言模型: 现有…...

Elasticsearch设置 X-Pack认证,设置账号和密码

前言 以下Elasticsearch版本:7.9.3 ES自带的X-Pack密码验证: X-Pack是elasticsearch的一个扩展包,将安全,警告,监视,图形和报告功能捆绑在一个易于安装的软件包中,所以我们想要开启账号密码验证…...

机器学习——量子机器学习(Quantum Machine Learning)

机器学习——量子机器学习(Quantum Machine Learning) 量子机器学习(Quantum Machine Learning)——未来的智能计算量子机器学习的核心概念使用Qiskit进行量子机器学习——代码示例代码解析量子机器学习的应用结论 量子机器学习&a…...

Android Studio 的 Gradle 任务列表只显示测试任务

问题现象如下: 问题原因: 这是因为Android Studio 设置中勾选了屏蔽其他gradle任务的选项。 解决方法: File -> Settings -> Experimental 取消勾选Only include test tasks in the Gradle task list generated during Gradle Sync&…...

Keepalived:高可用性的守护神

Keepalived:高可用性的守护神 在现代企业IT系统中,高可用性是确保业务连续性和服务质量的关键要素。系统面对硬件故障、软件错误、人为失误或自然灾害时,依然能保持正常运行,这样的能力对于企业来说至关重要。为此,业界开发了一系列高可用性解决方案,其中Keepalived以其…...

Golang笔记_day08

Go面试题(一) 1、空切片 和 nil 切片 区别 空切片: 空切片是指长度和容量都为0的切片。它不包含任何元素,但仍然具有切片的容量属性。在Go语言中,可以使用内置的make函数创建一个空切片,例如:…...

如何在 React 中更新状态对象的某个值

在 React 中,我们经常需要更新组件的状态来反映 UI 的变化。如果状态是一个复杂的对象,比如一个包含多个筛选条件的对象,我们希望只更新其中的某个键,而不是整个状态对象。今天,我将向大家展示如何在更新状态时保留已有…...

edge浏览器:你的连接不是专用连接

最近在使用edge浏览器打开github时,发现打不开了,提升你的连接不是专用连接。试了很多种方法甚至重装了浏览器,都没有用。 直到看到了这篇文章,才得到解决: 10 个修复此站点在 Windows Edge 上的连接不安全的问题htt…...

PDF 软件如何帮助您编辑、转换和保护文件

如何找到最好的 PDF 编辑器。 无论您是在为您的企业寻找更高效的 PDF 解决方案,还是尝试组织和编辑主文档,PDF 编辑器都可以在一个地方提供您需要的所有工具。市面上有很多 PDF 编辑器 — 在决定哪个最适合您时,请考虑这些因素。 1. 确定您的…...

如何使用Java爬虫处理API接口返回的JSON数据?

处理API接口返回的JSON数据是Java爬虫开发中的一个常见任务。在Java中,有多个库可以帮助我们解析JSON数据,其中最流行的是Jackson和Gson。以下是使用这两个库处理JSON数据的基本步骤和示例代码。 使用Jackson处理JSON Jackson是一个功能强大的JSON处理…...

Ajax是什么?

Ajax是什么? Ajax是创建交互式网页应用的网页开发技术。简单来说就是网页在不加载的情况下,可以跟服务器交换数据,并更新页面的内容。 原理: 1. 创建xhr(xmlHttpRequest)对象; 2, 通过xhr对象的open()方法和…...

技术方向简介

掌握 Java基础,包括OOP思想、集合、常用的设计模式;熟悉基本的数据结构和算法; 掌握JVM虚拟机和Java多线程并发编程,熟悉线程池、线程安全机制、锁的使用; 熟悉MySQL、Oracle等关系型数据库锁、事务、索引相关知识,了解DDL原理&…...

延迟队列实现及其原理详解

1.绪论 本文主要讲解常见的几种延迟队列的实现方式,以及其原理。 2.延迟队列的使用场景 延迟队列主要用于解决每个被调度的任务开始执行的时间不一致的场景,主要包含如下场景: 1.比如订单超过15分钟后,关闭未关闭的订单。 2.比如用户可以…...

web APIs

目录 Web APIs第一天Dom获取&属性操作Web API基本认知变量声明作用和分类什么是DOMDOM树DOM对象 获取Dom对象根据CSS选择器来获取DOM元素(重点)其他获取DOM元素方法(了解) 操作元素内容对象.innerText 属性对象.innerHTML 属性…...

【Web前端概述】

HTML 是用来描述网页的一种语言,全称是 Hyper-Text Markup Language,即超文本标记语言。我们浏览网页时看到的文字、按钮、图片、视频等元素,它们都是通过 HTML 书写并通过浏览器来呈现的。 一、HTML简史 1991年10月:一个非正式…...

文献阅读:一种基于艾伦脑图谱的空间表达数据可视化、空间异质性描绘和单细胞配准工具

::: block-1 文献介绍 文献题目: AllenDigger,一种基于艾伦脑图谱的空间表达数据可视化、空间异质性描绘和单细胞配准的工具 研究团队: 王晓群(北京师范大学) 发表时间: 2023-03-16 发表期刊&#xff1a…...

Redis学习笔记(三)--Redis客户端

文章目录 一、命令行客户端二、图形界面客户端1、Redis Desktop Manager2、RedisPlus 三、java代码客户端 本文参考: Redis学习汇总(已完结) Redis超详细入门教程(基础篇) Redis视频从入门到高级,redis视频…...

面试知识梳理

一、vue篇章 1.vue2和vue3性能方面的提升最主要的原因是什么? 1、1响应式的系统优化: vue3使用了es6的proxy对象来实现响应式系统,取代了vue2中基于Object.defineProperty的方法。Proxy提供了更强大和灵活的拦截能力,可以更有效地…...

Unity3D ScrollView 滚动视图组件详解及代码实现

前言 在Unity3D中,ScrollView(滚动视图)是一种常用的UI组件,它允许用户通过滚动来查看超出当前视图范围的内容。ScrollView通常用于显示长列表、大量文本或图像等。本文将详细介绍Unity3D中的ScrollView组件,并提供代…...

13.java面向对象:封装

java面向对象:封装 我们程序设计要追求“高内聚,低耦合”。高内聚就是类的内部数据操作细节自己完成,不允许外部干涉;低耦合:仅暴露少量的方法给外部使用。 封装(数据的隐藏)通常应禁止直接访问一个对象中…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

day52 ResNet18 CBAM

在深度学习的旅程中,我们不断探索如何提升模型的性能。今天,我将分享我在 ResNet18 模型中插入 CBAM(Convolutional Block Attention Module)模块,并采用分阶段微调策略的实践过程。通过这个过程,我不仅提升…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

【学习笔记】深入理解Java虚拟机学习笔记——第4章 虚拟机性能监控,故障处理工具

第2章 虚拟机性能监控&#xff0c;故障处理工具 4.1 概述 略 4.2 基础故障处理工具 4.2.1 jps:虚拟机进程状况工具 命令&#xff1a;jps [options] [hostid] 功能&#xff1a;本地虚拟机进程显示进程ID&#xff08;与ps相同&#xff09;&#xff0c;可同时显示主类&#x…...

现有的 Redis 分布式锁库(如 Redisson)提供了哪些便利?

现有的 Redis 分布式锁库&#xff08;如 Redisson&#xff09;相比于开发者自己基于 Redis 命令&#xff08;如 SETNX, EXPIRE, DEL&#xff09;手动实现分布式锁&#xff0c;提供了巨大的便利性和健壮性。主要体现在以下几个方面&#xff1a; 原子性保证 (Atomicity)&#xff…...

Spring Security 认证流程——补充

一、认证流程概述 Spring Security 的认证流程基于 过滤器链&#xff08;Filter Chain&#xff09;&#xff0c;核心组件包括 UsernamePasswordAuthenticationFilter、AuthenticationManager、UserDetailsService 等。整个流程可分为以下步骤&#xff1a; 用户提交登录请求拦…...

git: early EOF

macOS报错&#xff1a; Initialized empty Git repository in /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/.git/ remote: Enumerating objects: 2691797, done. remote: Counting objects: 100% (1760/1760), done. remote: Compressing objects: 100% (636/636…...