【大模型系列】Video-LaVIT(2024.06)

在这里插入图片描述

  • Paper:https://arxiv.org/abs/2402.03161
  • Github:https://video-lavit.github.io/
  • Title:Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional Tokenization
  • Author:Yang Jin, 北大,快手

文章目录

  • 1 Video-LaViT总结(省流版)
    • 1.1 Video-LaViT是什么?
    • 1.2 Video-LaViT能干什么?
      • 1.2.1 图像/视频问答
      • 1.2.2 文生图
      • 1.2.3 文生视频
      • 1.2.4 图生视频
  • 2 Motivation
  • 3 Method
    • 3.1 关键帧与运动信息的获取与motion encoder
    • 3.2 video detokenizer
  • 4 训练细节
  • 参考资料

1 Video-LaViT总结(省流版)

1.1 Video-LaViT是什么?

Video-LaViT是LaViT这篇工作的拓展,详见上一篇博客【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)
,作者同样来自于北大和快手。思路与LaViT类似,通过将视频分解为交替的关键帧和运动向量,关键帧采用LaViT中的Image tokenizer,运动向量则设计了一个Motion tokenizer来进行编码。然后通过[IMG]、[/IMG]和[MOV]、[/MOV]来区分。

1.2 Video-LaViT能干什么?

1.2.1 图像/视频问答

Video-LaViT可以理解图像和视频内容,并根据问题给出答案。
在这里插入图片描述

1.2.2 文生图

根据给定文本,生成对应的图片,毕竟基于LaViT开发的。
在这里插入图片描述

1.2.3 文生视频

根据给定文本,生成对应的视频。

"Sailboat sailing on a sunny day in a mountain lake""A steaming cup of coffee with mountains in the background. Resting during road trip"

1.2.4 图生视频

根据给定图片,生成对应的视频。

2 Motivation

当前一些video tokenization工作的总结:

  • 流行的方式是先将原始视频下采样为一系列的frames,再使用ViT-encoder进行处理,这种方式忽略了帧之间的时间动态信息。
  • VideoPoet(2023):3D video tokenizer,使用long token sequence,导致只能处理短视频,长视频资源消耗太大。

解决上面问题的方式:

  • 视频中存在大量的冗余信息,将视频分解为交替的关键帧(keyframe&motion vectors)【其实就是视频编码的思路】
    分解之后的组合可以用更少的token来表示视频的时间动态;
  • 复用现成的纯图像LLM所获得的视觉知识,而只需专注于对是时间信息(temporal information)进行建模。

3 Method

  • video tokenizer:将视频转化为离散的tokens,其中关键帧keyframe使用现成的image tokenizer(ViT-G/14 of EVA-CLIP);
  • motion encoder:用于将temporal motion也转化为离散的token;
  • video detokenizer:将LLM生成的video token恢复成视频。
    在这里插入图片描述

3.1 关键帧与运动信息的获取与motion encoder

基于MPEG-4压缩技术来获取关键帧和运动信息。视频中的I帧就是关键帧。通常视频帧被分成16x16个宏块,运动信息motion vectors是通过寻找相邻帧之间的最佳就宏块对应关系来确定的。
m ⃗ ( p , q ) = a r g ⁡ min ⁡ i , j ∣ ∣ I t ⁢ ( p , q ) − I t − 1 ⁢ ( p − i , q − j ) ∣ ∣ \vec{m}(p, q) = arg⁡\min_{i,j}||I_t⁢(p,q)−I_{t-1}⁢(p−i,q−j)|| m (p,q)=argi,jmin∣∣It(p,q)It1(pi,qj)∣∣
其中I(p, q)表示宏块在(p, q)的像素值,(i, j)是两个宏块中心的偏移量,于是视频可以分解为关键帧(HxWx3)和后续的T帧的运动矢量(Tx(H/16)x(W/16)x2)。

这段看不懂没关系,后面实际是采用ffmpeg来提取视频的关键帧I帧和运动向量P帧。
在这里插入图片描述
Source: I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系

运动矢量的tokenization与LaVIT的方式类似,先通过一个spatiotemporal encoder得到latent embedding,再与codebook中的向量计算L2距离,选择最近的codebook中的向量代替之,这就是所谓的Motion quantization,得到的结果就是motion vector的token,可参与后续的训练。

整个motion tokenizer通过一个解码器,来将motion token恢复,最后计算重构损失来更新参数。

3.2 video detokenizer

  • key frame关键帧:de-noising U-Net,与LaVIT类似,使用重建的visual features作为条件去控制生成细节
    在这里插入图片描述

video detokenizer依赖于motion vector的引导,来生成关键帧之后T帧的恢复。有2种不同的motion conditon forms:
1、给定motion vector:(Tx(H/16)x(W/16)x2),采用最近邻插值的方式,使其与UNet的输入相匹配;
2、关键帧key frame的latent state I(VAE产生)重复T以提供visual condition;
3、motion vector、key frame latent I和noisy video frame按通道拼接,作为video dekoenizer的输入;
4、使用3DUnet中的spatial temporal cross-attention block引入motion feature embedding来增强生成效果;

为了缓解单独解码带来的不同clip之间的细粒度视觉细节不一致,在解码关键帧时加入了明确的噪声约束。通过反转DDIM采样将最新一帧从先前生成的状态转化为中间的噪声状态。

4 训练细节

训练说明:

  • [MOV][/MOV]用于区分运动模态
  • 交换多模态数据对的顺序:[video⁢(image),text]和 [text,video⁢(image)]
  • 以自回归的形式进行训练(在上一个预测的基础上预测下一个)

训练分为3个阶段:
Step1: 训练tokenizer和detokenizer,该阶段只需要视频数据,无需对应的captions,以生成视频的tokens,

  • WebVid-10M,包含10M视频-文本对,含有水印;
  • 训练detokenizer的时候,使用InterVid-14M-aesthetic数据的子集来去除生成视频中的水印,并提升生成视频的美感;

Step2: LLM训练,学习不同模态之间数据的关联;

  • 混合视频、图像和文本数据:
    • WebVid-10M
    • Conceptual Caption 93M
    • SBU
    • BLIP-Capfit
    • RedPajama英文语料库:用于保留LLM原本的语言理解能力

Step3: Instruction tuning:以适应不同的任务。

  • LLaVA v1.5的665k图像文本指令数据集
  • Video-ChatGPT的100k视频-文本指令数据集

参考资料

[1] I帧、P帧、B帧、GOP、IDR 和PTS, DTS之间的关系
[2] 【大模型系列】Language-Vision Transformer(LaVIT, ICLR2024)

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

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

相关文章

Java面试八股之@Qualifier的作用

Qualifier的作用 Qualifier 是 Spring 框架中的一个非常有用的注解,它主要用于解决在依赖注入过程中出现的歧义问题。当 Spring 容器中有多个相同类型的 Bean 时,Qualifier 可以帮助指明应该使用哪一个具体的 Bean 进行注入。 Qualifier 的作用&#x…

外设购物平台

目 录 一、系统分析 二、系统设计 2.1 系统功能设计 2.2 数据库设计 三、系统实现 3.1 注册功能 3.2 登录功能 3.3 分页查询所有商品信息功能 3.4 分页条件(精确、模糊)查询商品信息功能 3.5 购物车功能 3.6 订单管理功能 四、项…

【Opencv】模糊

消除噪声 用该像素周围的平均值代替该像素值 4个函数 blur():最经典的 import os import cv2 img cv2.imread(os.path.join(.,dog.jpg)) k_size 7 #窗口大小,数字越大,模糊越强 img_blur cv2.blur(img,(k_size,k_size)) #窗口是正方形&#xff…

云计算实训16——关于web,http协议,https协议,apache,nginx的学习与认知

一、web基本概念和常识 1.Web Web 服务是动态的、可交互的、跨平台的和图形化的为⽤户提供的⼀种在互联⽹上浏览信息的服务。 2.web服务器(web server) 也称HTTP服务器(HTTP server),主要有 Nginx、Apache、Tomcat 等。…

C#使用csvhelper实现csv的操作

新建控制台项目 安装csvhelper 33.0.1 写入csv 新建Foo.cs namespace CsvSut02;public class Foo {public int Id { get; set; }public string Name { get; set; } }批量写入 using System.Globalization; using CsvHelper; using CsvHelper.Configuration;namespace Csv…

[数据集][目标检测]金属罐缺陷检测数据集VOC+YOLO格式8095张4类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):8095 标注数量(xml文件个数):8095 标注数量(txt文件个数):8095 标注…

使用Process Explorer和Dependency Walker排查dll动态库加载失败的问题

目录 1、问题描述 2、如何调试Release版本的代码? 3、使用Process Explorer查看exe主程序加载的dll库列表,发现mediaplay.dll没有加载起来 4、使用Dependency Walker查看rtcmpdll.dll的库依赖关系和接口调用情况,定位问题 4.1、使用Depe…

Javascript面试基础6【每日更新10】

Gulp gulp是前端开发过程中一种基于流的代码构建工具,是自动化项目的构建利器;它不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成 Gulp的核心概念:流 流,简单来说就是建立在面向对象基础上的一种抽象的…

多微信聚合神器:高效沟通,一个界面全搞定!

大家都知道,频繁的来回切换微信,不仅浪费时间,还容易错过重要的信息。 今天,我要向大家推荐一款多微信管理神器——个微管理系统,助你实现统一管理,聚合聊天,让沟通变得更加高效。 1、网页扫码…

基于MindIE实现通义千问Qwen推理加速

一、昇腾开发者平台申请镜像 登录Ascend官网昇腾社区-官网丨昇腾万里 让智能无所不及 二、登录并下载mindie镜像 #登录docker login -u XXX#密码XXX#下载镜像docker pull XXX 三、下载Qwen的镜像 使用wget命令下载Qwen1.5-0.5B-Chat镜像,放在/mnt/Qwen/Qwen1.5-…

【无标题】Git(仓库,分支,分支冲突)

Git 一种分布式版本控制系统,用于跟踪和管理代码的变更 一.Git的主要功能: 二.准备git机器 修改静态ip,主机名 三.git仓库的建立: 1.安装git [rootgit ~]# yum -y install git 2.创建一个…

【策略工厂模式】记录策略工厂模式简单实现

策略工厂模式 1. 需求背景2. 代码实现2.1 定义基类接口2.2 排序策略接口定义2.3 定义抽象类,实现策略接口2.4 具体的排序策略实现类2.5 实现策略工厂类2.6 控制类 3. 启动测试4. 总结 1. 需求背景 现在需要你创建一个策略工厂类,来根据策略实现各种排序…

【JAVA】记录一次前端无能造成的 线上bug

有一个需求是 当方式切换 垫资时 清空 当前所选细单商品 但是前端的奇葩 操作是,只是在页面上清空 细单。 不请求 后台删除 细单 让前端 必须 清空同时 请求后台 删除细单 但是 该前端 技术不行, 嫌麻烦 不做 只好 后台 判断该类型时 进行删除操作…

AutoMQ 开源可观测性方案:夜莺 Flashcat

01 引言 在现代企业中,随着数据处理需求的不断增长,AutoMQ [1] 作为一种高效、低成本的流处理系统,逐渐成为企业实时数据处理的关键组件。然而,随着集群规模的扩大和业务复杂性的增加,确保 AutoMQ 集群的稳定性、高可…

权限管理的概述以及vue开发前端的路由、菜单、按钮权限控制实现方案

1. 权限管理概念 1.1 权限定义 权限管理是确保用户只能访问被授权资源的机制。在计算机系统中,权限通常指对特定数据或功能的访问权。权限的设置和控制对于保护数据安全和系统安全至关重要。 1.2 前端权限控制重要性 前端权限控制是用户与应用交互的第一道防线。…

黑马头条Day12-项目部署_持续集成

一、今日内容介绍 1. 什么是持续集成 持续集成(Continuous integration,简称CI),指的是频繁地(一天多次)将代码集成到主干。 持续集成的组成要素: 一个自动构建过程,从检出代码、…

jdk版本管理利器-sdkman

1.什么是sdkman? sdkman是一个轻量级、支持多平台的开源开发工具管理器,可以通过它安装任意主流发行版本(例如OpenJDK、Kona、GraalVM等等)的任意版本的JDK。通过下面的命令可以轻易安装sdkman: 2.安装 curl -s "https://…

什么是 5G?

什么是 5G? 5G 是第五代无线蜂窝技术,与以前的网络相比,它提供了更高的上传和下载速度、更一致的连接以及更高的容量。5G 比目前流行的 4G 网络更快、更可靠,并有可能改变我们使用互联网访问应用程序、社交网络和信息的方式。例如…

通过 WSL 2 在Windows 上挂载 Linux 磁盘

原文查看 曾为了传输或者共享不同系统的文件频繁地在 Windows 和 Linux 系统之间切换,效率过低,所以尝试通过 WSL 2 在Windows 上挂载 Linux 磁盘。 先决条件 需要在Windows 10 2004 及更高版本(Build 19041 及更高版本)或 Win…

Redis 缓存

安装 安装 Redis 下载: Releases tporadowski/redis (github.com) winr ----services.msc-----将redis 设置为手动(只是学习,如果经常用可以设置为自动) 安装 redis-py 库 pip install redis-py Redis 和 StrictRedis redis-py 提供 Redis 和 Str…