ViViT: 一种视频视觉Transformer

摘要

我们提出了基于纯transformer的视频分类模型,借鉴了这种模型在图像分类中的成功经验。我们的模型从输入视频中提取时空token,然后通过一系列transformer层进行编码。为了处理视频中遇到的长序列token,我们提出了几种高效的模型变种,这些变种将输入的空间和时间维度进行了分解。尽管基于transformer的模型通常只有在有大量训练数据时才有效,但我们展示了如何在训练过程中有效地正则化模型,并利用预训练的图像模型,在相对较小的数据集上进行训练。我们进行了彻底的消融研究,并在多个视频分类基准测试上取得了最先进的结果,包括Kinetics 400和600、Epic Kitchens、Something-Something v2和Moments in Time,超过了基于深度3D卷积网络的先前方法。为了促进进一步的研究,我们在https://github.com/google-research/scenic发布了代码。

1. 引言

基于深度卷积神经网络的方法自AlexNet [38]以来,已经推动了视觉问题标准数据集上的最先进技术。同时,序列到序列建模(例如自然语言处理)中最突出的架构是transformer [68],它不使用卷积,而是基于多头自注意力机制。该操作在建模长程依赖关系方面特别有效,允许模型在输入序列的所有元素之间进行注意力操作。这与卷积的“感受野”形成鲜明对比,后者是有限的,并随着网络深度的增加而线性增长。

自注意力模型在自然语言处理中的成功,最近激发了计算机视觉领域的研究,尝试将transformer集成到CNN中 [75, 7],以及一些完全替代卷积的尝试 [49, 3, 53]。然而,直到最近,纯transformer架构在图像分类中超越了其卷积对手,这一成就出现在Vision Transformer (ViT) [18]中。Dosovitskiy 等人 [18] 紧跟[68]的原始transformer架构,并注意到其主要优势是在大规模数据上得到体现——由于transformer缺乏卷积的一些归纳偏置(如平移不变性),它们似乎需要更多的数据 [18] 或更强的正则化 [64]。

受ViT启发,并考虑到自注意力架构在建模视频中的长程上下文关系时的直观性,我们开发了几种基于transformer的视频分类模型。目前,性能最好的模型基于深度3D卷积架构 [8, 20, 21],这些模型是图像分类CNN [27, 60] 的自然扩展。最近,这些模型通过在其后层引入自注意力机制,以更好地捕捉长程依赖关系 [75, 23, 79, 1]。

如图1所示,我们提出了用于视频分类的纯transformer模型。该架构中执行的主要操作是自注意力,并且它是计算在从输入视频中提取的时空token序列上。为了有效处理视频中可能遇到的大量时空token,我们提出了几种沿空间和时间维度分解模型的方法,以提高效率和可扩展性。此外,为了在较小的数据集上有效训练我们的模型,我们展示了如何在训练过程中对模型进行正则化,并利用预训练的图像模型。

我们还注意到,卷积模型已经由社区开发了多年,因此与这些模型相关的“最佳实践”已经有了很多。由于纯transformer模型具有不同的特性,我们需要确定这些架构的最佳设计选择。我们对token化策略、模型架构和正则化方法进行了彻底的消融分析。在此分析的基础上,我们在多个标准视频分类基准测试中取得了最先进的结果,包括Kinetics 400和600 [35]、Epic Kitchens 100 [13]、Something-Something v2 [26] 和 Moments in Time [45]。
在这里插入图片描述

2. 相关工作

视频理解的架构与图像识别的进展相一致。早期的视频研究使用手工提取的特征来编码外观和运动信息 [41, 69]。AlexNet 在 ImageNet [38, 16] 上的成功最初促使了 2D 图像卷积网络 (CNN) 被用于视频处理,形成了“二流”网络 [34, 56, 47]。这些模型分别处理 RGB 帧和光流图像,然后在最后进行融合。随着像 Kinetics [35] 这样的更大视频分类数据集的出现,推动了时空 3D CNN 的训练 [8, 22, 65],这些模型拥有显著更多的参数,因此需要更大的训练数据集。由于 3D 卷积网络比图像卷积网络需要更多的计算,许多架构在空间和时间维度上对卷积进行了分解,或使用了分组卷积 [59, 66, 67, 81, 20]。我们也利用了视频的空间和时间维度的分解来提高效率,但是在基于 transformer 的模型中进行的。

与此同时,在自然语言处理 (NLP) 领域,Vaswani 等人 [68] 通过用只包含自注意力、层归一化和多层感知机 (MLP) 操作的 transformer 网络替代卷积和递归网络,取得了最先进的结果。目前,NLP 领域的最先进架构 [17, 52] 仍然是基于 transformer 的,并且已被扩展到 Web 规模的数据集 [5]。为了减少处理更长序列时自注意力的计算成本,许多 transformer 变体也被提出 [10, 11, 37, 62, 63, 73],并且为了提高参数效率 [40, 14],这些变体在许多任务中得到了应用。尽管自注意力在计算机视觉中得到了广泛应用,但与此不同的是,它通常被集成到网络的后期阶段或通过残差块 [30, 6, 9, 57] 来增强 ResNet 架构中的一层 [27]。

虽然之前的工作曾试图在视觉架构中替代卷积 [49, 53, 55],但直到最近,Dosovitskiy 等人 [18] 通过他们的 ViT 架构表明,类似于 NLP 中使用的纯 transformer 网络,也可以在图像分类中取得最先进的结果。作者展示了这种模型只有在大规模数据集下才有效,因为 transformer 缺乏卷积网络的一些归纳偏置(如平移不变性),因此需要比常见的 ImageNet ILSVRC 数据集 [16] 更大的数据集来进行训练。ViT 激发了社区中的大量后续工作,我们注意到有一些同时的研究尝试将其扩展到计算机视觉中的其他任务 [71, 74, 84, 85],以及提高其数据效率的研究 [64, 48]。特别是,文献 [4, 46] 也提出了用于视频的 transformer 模型。

本文中,我们开发了用于视频分类的纯 transformer 架构。我们提出了几种模型变体,其中包括通过分解输入视频的空间和时间维度来提高效率的变体。我们还展示了如何利用额外的正则化和预训练模型来应对视频数据集不像 ViT 最初训练的图像数据集那样庞大的问题。此外,我们在五个流行数据集上超越了最先进的技术。

3. 视频 Vision Transformer

我们首先在第 3.1 节简要介绍最近提出的 Vision Transformer [18],然后在第 3.2 节讨论两种从视频中提取 token 的方法。最后,我们在第 3.3 和第 3.4 节中提出几种用于视频分类的基于 transformer 的架构。

3.1 Vision Transformer (ViT) 概述

Vision Transformer(ViT)[18] 将 [68] 中的 transformer 架构最小化修改后应用于处理二维图像。具体而言,ViT 从图像中提取 N N N个不重叠的图像 patch, x i ∈ R h × w x_i \in \mathbb{R}^{h \times w} xiRh×w,对其进行线性投影后展开为一维 token z i ∈ R d z_i \in \mathbb{R}^d ziRd。输入到后续 transformer 编码器中的 token 序列为:

z = [ z c l s , E x 1 , E x 2 , … , E x N ] + p , (1) \mathbf{z} = [z_{cls}, \mathbf{E}x_1, \mathbf{E}x_2, \ldots, \mathbf{E}x_N] + \mathbf{p}, \tag{1} z=[zcls,Ex1,Ex2,,ExN]+p,(1)

其中 E \mathbf{E} E表示线性投影操作,其本质等价于一个 2D 卷积。如图 1 所示,一个可学习的分类 token z c l s z_{cls} zcls会被加在序列开头,并在 transformer 编码器的最终层中作为分类器使用的最终表示 [17]。另外,为了保留位置信息,还会为 token 加上可学习的位置编码 p ∈ R N × d \mathbf{p} \in \mathbb{R}^{N \times d} pRN×d,因为 transformer 中的 self-attention 机制本身对序列位置顺序是不敏感的(permutation invariant)。

这些 token 随后会被输入到一个由 L L L层 transformer 构成的编码器中。每一层 l l l包括多头自注意力(Multi-Headed Self-Attention, MSA)[68]、层归一化(Layer Normalisation, LN)[2] 和 MLP 模块,其计算方式如下:

y ℓ = M S A ( L N ( z ℓ ) ) + z ℓ z ℓ + 1 = M L P ( L N ( y ℓ ) ) + y ℓ (3) \begin{array}{r} \mathbf{y}^{\ell} = \mathbf{MSA}(\mathbf{LN}(\mathbf{z}^{\ell})) + \mathbf{z}^{\ell} \\ \mathbf{z}^{\ell + 1} = \mathbf{MLP}(\mathbf{LN}(\mathbf{y}^{\ell})) + \mathbf{y}^{\ell} \end{array} \tag{3} y=MSA(LN(z))+zz+1=MLP(LN(y))+y(3)

其中 MLP 由两个线性层和一个 GELU 非线性激活函数 [28] 构成。在整个网络的所有层中,token 的维度 d d d保持不变。

最后,如果在输入序列中添加了分类 token z c l s z_{cls} zcls,则将其在第 L L L层输出的表示 z c l s L ∈ R d z_{cls}^{L} \in \mathbb{R}^d zclsLRd输入至一个线性分类器进行分类;如果没有添加分类 token,则采用所有 token 的全局平均池化作为输入。

由于 transformer 架构 [68] 是一种灵活的结构,能够处理任意 token 序列 z ∈ R N × d \mathbf{z} \in \mathbb{R}^{N \times d} zRN×d,接下来我们将介绍用于视频 token 化的策略。

3.2 视频片段嵌入

我们考虑两种简单的方法将视频 V ∈ R T × H × W × C \mathbf{V} \in \mathbb{R}^{T \times H \times W \times C} VRT×H×W×C映射到一个 token 序列 z ~ ∈ R n t × n h × n w × d \tilde{\mathbf{z}} \in \mathbb{R}^{n_t \times n_h \times n_w \times d} z~Rnt×nh×nw×d。然后我们添加位置嵌入并重新形状调整为 R N × d \mathbb{R}^{N \times d} RN×d,以得到输入到 transformer 的 z z z

均匀帧采样

如图 2 所示,将输入视频 token 化的一个简单方法是从输入视频片段中均匀采样 n t n_t nt帧,使用与 ViT [18] 相同的方法独立嵌入每一帧 2D 图像,并将这些 token 连接在一起。具体而言,如果每一帧中提取 n h ⋅ n w n_h \cdot n_w nhnw<

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

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

相关文章

嵌入式鸿蒙系统环境搭建与配置要求实现01

各位开发者大家好,今天主要给大家分享一下,鸿蒙系统的环境配置实现。 第一:鸿蒙配置基本要求 对电脑的要求,虚拟机配置建议 200GB 硬盘大小,10GB 内存,4*2CPU。 安装必要的依赖文件方法: sudo apt-get update && sudo apt-get install binutils git git-lfs g…

【多目标进化算法】常见多目标进化算法一览

算法全称核心特点备注NSGA-IINon-dominated Sorting Genetic Algorithm II非支配排序 拥挤度最经典&#xff0c;应用最广NSGA-IIINon-dominated Sorting Genetic Algorithm III支撑向量引导&#xff0c;适合高维&#xff08;3目标以上&#xff09;NSGA-II 的高维扩展版MOEA/DM…

创意无限,从这些视频素材开始你的创作!

在视频创作的世界里&#xff0c;找到合适的素材就像是挖掘宝藏&#xff0c;不仅能节省时间&#xff0c;还能让作品瞬间提升一个档次。今天&#xff0c;就来给大家分享一些超实用的视频素材网站&#xff0c;无论是国内的宝藏平台&#xff0c;还是国外的优质资源&#xff0c;都能…

QT创建新项目(13)

文章目录 一、本章说明二、QT组件简介及相关笔记三、项目创建四、QT学习建议一、本章说明 注:本节为【基于STM的环境监测系统(节点+云服务器存储+QT界面设计)】项目第13篇文章,前面已安装了QT软件,本章主要介绍新项目创建及注意事项,QT的初学者相关学习资料 二、QT组件…

Langgraph实战-Agent-ReAct(Reason+Act)概述

Langgraph实战-Agent-ReAct&#xff08;ReasonAct&#xff09;概述 概述 ReAct 架构将推理与动作相结合&#xff0c;使Agent能够通过生成想法并基于这些想法执行动作。这种决策透明度使Agent能够更负责地执行任务&#xff0c;因为它会记录每一步的推理过程。 这种架构最适合…

论文笔记(七十九)STOMP: Stochastic Trajectory Optimization for Motion Planning

STOMP: Stochastic Trajectory Optimization for Motion Planning 文章概括摘要一、引言二、相关工作三、STOMP 算法A. 探索B. 轨迹更新 四、机械臂的运动规划A. 设置B. 代价函数1&#xff09;障碍物代价&#xff1a;2&#xff09;约束代价&#xff1a;3&#xff09;扭矩代价&a…

MCU开发学习记录9 - 通用定时器学习与实践(HAL库) -RGBLED控制、定时器输入捕获、主从定时器移相控制-STM32CubeMX

本文将介绍通用定时器的概念、相关函数以及STM32CubeMX生成定时器的配置函数以及对生成定时器的配置函数进行分析&#xff08;包括结构体配置、相关寄存器配置&#xff09;。 本文以TIM2/TIM5、TIM3/TIM4为基础介绍通用定时器&#xff08;包含通用定时器全部功能&#…

Java学习手册:TCP 协议基础

一、TCP 协议概述 TCP&#xff08;Transmission Control Protocol&#xff0c;传输控制协议&#xff09;是一种面向连接的、可靠的、基于字节流的传输层通信协议&#xff0c;它在 IP 协议的基础上提供了可靠的 数据传输服务。TCP 通过三次握手建立连接&#xff0c;通过四次挥手…

删除排序数组中的重复项--LeetCode

题目 给你一个非严格递增排列的数组 nums &#xff0c;请你原地删除重复出现的元素&#xff0c;使每个元素 只出现一次 &#xff0c;返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 nums 的唯一元素的数量为 k &#xff0c…

【Elasticsearch】入门篇

Elasticsearch 入门 前言 官方地址&#xff1a;Elastic — 搜索 AI 公司 | Elastic ES 下载地址&#xff1a;Past Releases of Elastic Stack Software | Elastic 文档&#xff1a;什么是 Elasticsearch&#xff1f;|Elasticsearch 指南 简介 Elasticsearch 是一个分布式、…

2024新版仿蓝奏云网盘源码,已修复已知BUG,样式风格美化,可正常运营生产

说起网盘源码&#xff0c;网络上出现的也很多&#xff0c;不过可真正正能够用于运营的少之又少。今天将的蓝奏云网盘源码&#xff0c;其实网络上也有&#xff0c;不过是残缺版&#xff0c;bug很多。我今天分享的仿蓝奏云模板是经过长时间测试修复后的源码&#xff0c;源码实测可…

机器人结构认知与安装

机器人结构认知与安装 1. ES机器人系统结构与硬件组成 核心组件&#xff1a; OPPO ES5机器人系统由机器人本体、控制手柄、48V电源和OPPO Studio终端构成。一体化底座&#xff1a;包含控制主板、安全接口板、监测保护电路单元&#xff0c;支持外接急停开关&#xff0c;采用光耦…

sass 变量

基本使用 如果分配给变量的值后面添加了 !default 标志 &#xff0c;这意味着该变量如果已经赋值&#xff0c;那么它不会被重新赋值&#xff0c;但是&#xff0c;如果它尚未赋值&#xff0c;那么它会被赋予新的给定值。 如果在此之前变量已经赋值&#xff0c;那就不使用默认值…

python自动化测试1——鼠标移动偏移与移动偏移时间

python对自动化测试运维提供了一个简易的库—pyautogui&#xff0c;我们可以借助这个库进行开发。 import pyautogui as pp.moveTo(100,100,3) 这里将鼠标光标移动到100&#xff0c;100处&#xff0c;并且用时3秒移动 鼠标移动是以固定坐标为单位&#xff0c;鼠标偏移则是在…

LX4-数据手册相关

数据手册相关 一 如何获取数据手册 ST官网&#xff1a;www.st.com 中文社区网&#xff1a; https://www.stmcu.com.cn/Designresource/list/STM32F1/document/datasheet 淘宝的商品详情页 二 如何阅读数据手册 芯片手册 定义&#xff1a;由芯片制造商提供&#xff0c;详细…

如何使用 uv 构建 Python 包并本地安装

本文将逐步指导你创建一个简单的 Python 包&#xff0c;并将其本地安装到机器或云环境中。完成本教程后&#xff0c;你将拥有一个可复用的 Python 库&#xff0c;可直接通过 pip 安装或在项目中导入使用。 步骤详解 Step 0: 选择构建工具 - 使用 uv 推荐理由&#xff1a;uv 是…

Linux之安装配置Nginx

Linux系统下安装配置Nginx的详细步骤如下&#xff1a; 一、准备工作 系统环境&#xff1a;确保Linux系统已安装&#xff0c;并且具有网络连接&#xff08;以便在线安装依赖或下载Nginx&#xff09;。 安装依赖&#xff1a;Nginx依赖于一些开发库和工具&#xff0c;如gcc、pcr…

计算机视觉cv入门之答题卡自动批阅

前边我们已经讲解了使用cv2进行图像预处理与边缘检测等方面的知识&#xff0c;这里我们以答题卡自动批阅这一案例来实操一下。 大致思路 答题卡自动批阅的大致流程可以分为这五步&#xff1a;图像预处理-寻找考试信息区域与涂卡区域-考生信息区域OCR识别-涂卡区域填涂答案判断…

语音合成之一TTS技术发展史综述

TTS技术发展史综述 引言TTS技术的起源与早期探索基于规则的TTS系统&#xff1a;原理与发展共振峰合成技术&#xff1a;作用与影响拼接合成技术&#xff1a;发展与应用统计参数语音合成&#xff1a;以隐马尔可夫模型&#xff08;HMM&#xff09;为例深度学习驱动的TTS&#xff1…

目标检测中的损失函数(一) | IoU GIoU DIoU CIoU EIoU Focal-EIoU

&#x1f680;该系列将会持续整理和更新BBR相关的问题&#xff0c;如有错误和不足恳请大家指正&#xff0c;欢迎讨论&#xff01;&#xff01;&#xff01; &#x1f4e6;目标检测的损失函数一般包含三个部分&#xff0c;分别是边界框损失也可称为定位损失、置信度损失和分类损…