AdaTAD(CVPR 2024)视频动作检测方法详解

前言

论文:End-to-End Temporal Action Detection with 1B Parameters Across 1000 Frames
代码:AdaTAD

  从论文标题可以看出,AdaTAD 可以在 1B 参数且输入视频在 1000 帧的情况下实现端到端的训练,核心创新点是引入 Temporal-Informative Adapter (TIA) 模块来减少训练内存提高性能。
  本文先根据代码说明模型训练全过程,再根据论文部分内容说明训练策略和改进思路。

Backbone

在这里插入图片描述
  本文调试的模型使用 VideoMAE-S 作为 Backbone,此处简单介绍一下 MAE 的思想。CV 领域通常用分来任务来获取预训练模型,如图像分类、动作分类。MAE 是借鉴 NLP 完形填空的方式来训练预训练模型,遮住句子中的单词预测单词 → \to 遮住图像中的像素预测像素 → \to 遮住视频序列帧中的每张图像的像素预测像素。本质上都是对原始输入抽特征。

  • Conv3d 上方参数分别代表在时间维度 size=2, stride=2, padding=0,空间维度 size=16, stride=16, padding=0
  • 位置编码 Pos 按原版 Transformer 的方式用三角函数生成,词向量的数量为 ( 224 / 16 = 14 ) 2 × 8 (224/16=14)^2\times8 (224/16=14)2×8,为了适应不同的分辨率会对原始 Pos 做插值调整,具体过程为 [1,1568,384] → \to [8,14,14,384] → \to [8,384,14,14] → \to 线性插值 [8,384,10,10] → \to [8,100,384] → \to [1,800,384]
  • 在训练时会冻结除了 AdapterDropPath 以外的部分,关于训练策略方面之后和论文一起说明。
  • 预处理 Preprocess 将输入数据的 768 帧拆分成 48 段 16 帧的小切片,后处理 Postprocess 的具体过程为 [96,384,8,10,10] → \to 空间维度求均值 [96,384,8] → \to 维度变换 [(b,t1),c,t]->[b,c,(t1,t)]=[2,384,384] → \to 时间维度线性插值 [2,384,768]
  • AttentionFFN 的具体细节如下,其中 attention 为 torch.nn.functional.scaled_dot_product_attention,激活函数为 torch.nn.GELU。
    在这里插入图片描述
  • 从上面 Transformer 的结构可以看出,注意力的计算局限于小切片的 16 帧,Adapter 模块就是对整个时间维度做一次特征融合,具体操作如下所示。第一个 Conv1d 上方参数 groups=96,具体请看 此处。与论文中结构图对应,FC 替换为 Conv1d。从操作上看就是把 BatchSize 中的时间部分提取出来,把空间部分合并进去,然后对整体的时间维度做一维卷积。
    在这里插入图片描述

在这里插入图片描述

projection

在这里插入图片描述

  • CLR 代表 Conv1d + LayerNorm + ReLU,具体过程为 x = ReLU(LN(conv(x) * mask)) * mask,其中 Mask 形状为 [2,768] 代表原始帧是否为 padding 所得,在后续的操作中会一直用到 Mask(Backbone 阶段没有用)。
  • 输入按照上图的流程得到了第一个特征 Feature [2,512,768],在这之后还有 5 个结构相同的 block,每个 block 会对时间维度下采样 2 倍得到其余 5 份特征构成特征金字塔 [2,512,768/384/192/96/48/24]
  • AttentionMLP 的具体细节如下,基本就是将原始 Transformer 结构中全连接层用卷积替代了。对于后 5 个下采样的 block,将 Attention3,1,1,512 的卷积参数改为 3,2,1,512
    在这里插入图片描述
att = (q * self.scale) @ k.transpose(-2, -1)
att = att.masked_fill(torch.logical_not(kv_mask[:, None, None, :]), float("-inf"))
att = F.softmax(att, dim=-1)

Head

在这里插入图片描述

  • 特征经过分类和回归分支,分别对应动作类别和动作时间段。这里每一层特征使用的 Head 权重是共享的。

Loss

  分类损失使用 torch.nn.functional.binary_cross_entropy_with_logits,回归损失为 1 − D I o U 1-\mathrm{DIoU} 1DIoU。正样本选取的具体细节需要结合代码说明比较复杂,这里简单说一下整体思路。

  • 输入数据与标签
    数据最原始的标签是动作发生的起始时间和结束时间(单位:s),在 DataLoader 阶段对原始视频每 4 帧取 1 帧得到原始输入,视频的起点随机,不足的帧会做 padding 并对应生成 Mask,同时标签转化为对这个视频段的帧索引(转化过程按照原始视频帧索引操作,因此最终索引并非是整数)。总之,输入为 768 帧构成的视频段,标签为第几帧至第几帧为什么动作。
  • Anchor Free Points
    AdaTAD 使用 Anchor Free 的方式做检测,对应图像目标检测特征图上空间分辨率的点作为一个 Anchor Point,动作检测用时序上点作为 Anchor Point。具体 Points 的构成如下,对应 6 层特征,每个 Point 有 4 个值,p[0] 代表的是时序点坐标,p[1]p[2] 代表一个范围在后续正样本选取中说明,p[3] 代表时间维度的下采样倍率 stride。

在这里插入图片描述

  • 正样本选取
    • 条件1
      p[0] 是否在 box 全范围或是 box 中心范围的内部(取较小的范围),这个中心范围大小由 p[3] 生成。
    • 条件2
      p[0] 距离 box 两端边界的较大值是否在 p[1]p[2] 定义的范围内,可以看出和目标检测相对于,分辨率高的浅层特征用于检测小目标 / 短动作。
    • 当一个 Anchor 可以和多个 box 匹配时,选择动作时间最短的。

论文

  论文的一个核心研究点在于训练策略,表1 探索了输入形式和预训练模型的使用方式。Setting 中 Frozen 代表冻结 Backbone,End-to-End 代表开放 Backbone 做微调。输入形式中,Snippet 代表每个时间点是一个视频切片包含 16 帧,切片与切片之间可以有重叠区域。

在这里插入图片描述
  本文调试的代码模型对应图2.c,使用了 parameter-efficient tuning (PEFT) 机制,在 Backbone 中插入 TIA 模块,只训练模块参数,但是梯度仍然需要通过整个 Backbone 来进行反向传播,因此提出了 d 方式,将 TIA 放置在 Backbone 外面,输出直接加到最后一层的输出中,梯度便不需要经过整个网络。

在这里插入图片描述

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

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

相关文章

STM32_实验4_控制蜂鸣器

1.设置 PB2 引脚,生成代码。 2.打开蜂鸣器 // 循环反复HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // 开启蜂鸣器printf("beep on\n");HAL_Delay(500); // 等待响500msHAL_GPIO_WritePin(…

解锁C++多态的魔力:灵活与高效的编码艺术(下)

文章目录 前言🎱四、多态的原理🔮4.1 虚函数表(vtable)🔮4.2 派生类对象中的虚函数表4.2.1 编写程序去访问虚函数表4.2.2 虚表存储位置的验证 🎱五、 多态的静态绑定和动态绑定🔮5.1 静态绑定&a…

spring底层原理

本文参考黑马程序员的spring底层讲解,想要更详细的可以去看视频。 另外文章会每日更新,大概持续1个月!!!每天更新一讲 这部分比较抽象,要经常复习!!! 一、BeanFactory与A…

【JPCS独立出版 | 福州大学主办 | 有确定的ISSN号】第三届可再生能源与电气科技国际学术会议(ICREET 2024)

第三届可再生能源与电气科技国际学术会议(ICREET 2024) 2024 3rd International Conference on Renewable Energy and Electrical Technology ICREET 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) 独立出版&#xf…

引领智慧文旅新纪元,开启未来旅游新境界

融合创新科技,重塑旅游体验,智慧文旅项目定义旅游新未来 在全球化的浪潮中,旅游已成为连接世界的重要纽带。智慧文旅项目,不仅仅是一次技术的革新,更是对旅游行业未来发展的一次深刻思考。信鸥科技通过运用云计算、大数…

Vue3动态组件原来是这样

什么是Vue3动态组件 在Vue3中&#xff0c;动态组件简单来说就是根据不同的条件进行不同组件的渲染&#xff0c;可以联想一下在前端中常用到的动态样式 基本使用 在Vue3中&#xff0c;动态组件的使用也是非常简单的&#xff0c;只需要使用<component>标签&#xff0c;并…

WPFDeveloper正式版发布

WPFDeveloper WPFDeveloper一个基于WPF自定义高级控件的WPF开发人员UI库&#xff0c;它提供了众多的自定义控件。 该项目的创建者和主要维护者是现役微软MVP 闫驚鏵: https://github.com/yanjinhuagood 该项目还有众多的维护者&#xff0c;详情可以访问github上的README&…

Redis 高可用:从主从到集群的全面解析

目录 一、主从复制 (基础)1. 同步复制a. 全量数据同步b. 增量数据同步c. 可能带来的数据不一致 2. 环形缓冲区a. 动态调整槽位 3. runid4. 主从复制解决单点故障a. 单点故障b. 可用性问题 5. 注意事项a. Replica 主动向 Master 建立连接b. Replica 主动向 Master 拉取数据 二、…

STM32传感器模块编程实践(八) HX711压力传感器称重模块简介及驱动源码

文章目录 一.概要二.HX711主要技术指标三.HX711模块参考原理图四.模块接线说明五.模块工作原理介绍六.模块通讯协议介绍七.STM32单片机与HX711模块实现重量测量实验1.硬件准备2.软件工程3.软件主要代码4.实验效果 八.小结 一.概要 电子秤是将检测与转换技术、计算机技术、信息…

Python网络爬虫从入门到实战

目录 引言 一、网络爬虫的概念 二、 网络爬虫的基本工作流程 &#xff08;一&#xff09;过程&#xff1a; &#xff08;二&#xff09;安装requests模块和beautifulsoup4模块 &#xff08;三&#xff09;requests库的使用 1、requests库的基本介绍 2、导入requests库的…

一款零依赖、跨平台的流媒体协议处理工具,支持 RTSP、WebRTC、RTMP 等视频流协议的处理

大家好&#xff0c;今天给大家分享一款功能强大的流媒体协议处理工具go2rtc&#xff0c;支持多种协议和操作系统&#xff0c;具有零依赖、零配置、低延迟等特点。 项目介绍 go2rtc可以从各种来源获取流&#xff0c;包括 RTSP、WebRTC、HomeKit、FFmpeg、RTMP 等&#xff0c;并…

学习文档10/16

MySQL 字符集&#xff1a; MySQL 支持很多种字符集的方式&#xff0c;比如 GB2312、GBK、BIG5、多种 Unicode 字符集&#xff08;UTF-8 编码、UTF-16 编码、UCS-2 编码、UTF-32 编码等等&#xff09;。 查看支持的字符集 你可以通过 SHOW CHARSET 命令来查看&#xff0c;支持…

ARINC 429总线协议

一、概述 ARINC 是美国航空无线电公司英文字头的缩写&#xff0c; 该公司1977年7月21日出版了“ARINC 429规范”一书&#xff0c;429规范就是飞机电子系统之间数字式数据传输的标准格式&#xff0c;在飞机上使用429总线的电子设备均应遵守这个规范&#xff0c;这样才能保证电子…

Redis应用高频面试题

Redis 作为一个高性能的分布式缓存系统,广泛应用于后端开发中,因此在后端研发面试中,关于 Redis 的问题十分常见。 本文整理了30个常见的 Redis 面试题目,涵盖了 Redis 的源码、数据结构、原理、集群模式等方面的知识,并附上简要的回答,帮助大家更好地准备相关的面试。 …

2024年【N2观光车和观光列车司机】及N2观光车和观光列车司机模拟考试题

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 N2观光车和观光列车司机考前必练&#xff01;安全生产模拟考试一点通每个月更新N2观光车和观光列车司机模拟考试题题目及答案&#xff01;多做几遍&#xff0c;其实通过N2观光车和观光列车司机操作证考试很简单。 1、…

LabVIEW提高开发效率技巧----用户权限控制

在LabVIEW开发中&#xff0c;用户权限控制是一个重要的设计模块&#xff0c;尤其在多用户系统中&#xff0c;它可以确保数据安全并控制不同用户的操作权限。为了实现用户权限控制&#xff0c;可以通过角色与权限管理模块来进行设计和实施。以下将从多个角度详细说明如何在LabVI…

Sentinel 快速入门

前置推荐阅读:Sentinel 介绍-CSDN博客 前置推荐阅读&#xff1a;Nacos快速入门-CSDN博客 快速开始 欢迎来到 Sentinel 的世界&#xff01;这篇新手指南将指引您快速入门 Sentinel。 Sentinel 的使用可以分为两个部分: 核心库&#xff08;Java 客户端&#xff09;&#xff1a…

新版vs code + Vue高亮、语法自动补全插件

vs code 版本或及以上 安装以下三个插件插件 Vetur Vue语法支持。包括语法高亮、语法代码提示、语法lint检测 ESLint语法纠错 Prettier 2.左下角设置 3.进行配置 配置内容&#xff1a; {"editor.fontSize": 20,"window.zoomLevel": 1,"workben…

Windows】【DevOps】Windows Server 2022 采用WinSW 启动一个会创建新的控制台程序窗口的程序行为分析

WinSW使用参考 【Windows】【DevOps】Windows Server 2022 采用WinSW将一个控制台应用程序作为服务启动&#xff08;方便&#xff09;-CSDN博客 源码 调整ConsoleApp1程序源代码如下&#xff1a; using System; using System.Diagnostics; using System.IO; using System.R…

软件生存期和软件过程

软件生存周期 软件生存周期&#xff08;Software Life Cycle&#xff09;&#xff1a;一个软件项目从问题提出开始&#xff0c;直到软件产品最终退役&#xff08;废弃不用&#xff09;为止。 软件生存周期分为三个时期&#xff1a;计划、开发和维护 整个软件生存周期划分为多…