基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 摘要
  • Abstract
  • 文献阅读:基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT
    • 1、研究背景
    • 2、提出方法
    • 3、模块详细
      • 3.1、什么是HoT
      • 3.2、HoT 框架
      • 3.3、Token 剪枝聚类模块
      • 3.4、Token 恢复注意力模块
      • 3.5、模块应用
    • 4、实验
      • 4.1、消融实验
      • 4.2、与SOTA对比
    • 5、总结
  • 简单Transformer的实现
  • 总结


摘要

本周主要阅读了CVPR文章,Hourglass Tokenizer for Effcient Transformer-Based 3D Human Pose Estimation。这是一种即插即用的 Token 剪枝和恢复框架,用于从视频中高效地进行基于 Transformer 的 3D 人体姿势估计。大量实验验证了本方法的高度兼容性和广泛适用性。它可以轻松集成至各种常见的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,并且能够有效地适应多种 Token 剪枝与恢复策略,展示出其巨大潜力。除此之外,还学习学习了简单的Transformer代码的学习。

Abstract

This week, I mainly read the CVPR article, Hourglass Tokenizer for Effcient Transformer-Based 3D Human Pose Estimation. This is a plug-and-play Token pruning and recovery framework for efficient Transformer-based 3D human pose estimation from video. A large number of experiments have verified the high compatibility and wide applicability of this method. It can be easily integrated into various common VPT models, whether based on seq2seq or seq2frame VPT, and can effectively adapt to multiple Token pruning and recovery strategies, demonstrating its great potential. In addition, I also learned how to write simple Transformer code.


文献阅读:基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT

Title: Hourglass Tokenizer for Effcient Transformer-Based 3D Human Pose Estimation
Author:Wenhao Li , Mengyuan Liu, Hong Liu,Pichao Wang,Jialun Cail Nicu Sebet
From:2024 IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)

1、研究背景

在 VPT 模型中,通常每一帧视频都被处理成一个独立的 Pose Token,通过处理长达数百帧的视频序列(通常是 243 帧乃至 351 帧)来实现卓越的性能表现,并且在 Transformer 的所有层中维持全长的序列表示。然而,由于 VPT 中自注意力机制的计算复杂度与 Token 数量(即视频帧数)的平方成正比关系,当处理具有较高时序分辨率的视频输入时,这些模型不可避免地带来了巨大的计算开销,使得它们难以被广泛部署到计算资源有限的实际应用中。此外,这种对整个序列的处理方式没有有效考虑到视频序列内部帧之间的冗余性,尤其是在视觉变化不明显的连续帧中。这种信息的重复不仅增加了不必要的计算负担,而且在很大程度上并没有对模型性能的提升做出实质性的贡献。

2、提出方法

作者提出了一种基于沙漏 Tokenizer 的高效三维人体姿态估计框架HoT,用来解决现有视频姿态 Transformer(Video Pose Transformer,VPT)高计算需求的问题。基于对实现高效VPT要解决时间感受野要打、视频冗余得去除的问题,作者提出对深层 Transformer 的 Pose Token 进行剪枝,以减少视频帧的冗余性,同时提高 VPT 的整体效率。该框架可以即插即用无缝地集成到 MHFormer,MixSTE,MotionBERT 等模型中,降低模型近 40% 的计算量而不损失精度。

3、模块详细

3.1、什么是HoT

HoT是第一个基于 Transformer 的高效三维人体姿态估计的即插即用框架。如下图所示,传统的 VPT 采用了一个 “矩形” 的范式,即在模型的所有层中维持完整长度的 Pose Token,这带来了高昂的计算成本及特征冗余。与传统的 VPT 不同,HoT 先剪枝去除冗余的 Token,再恢复整个序列的 Token(看起来像一个 “沙漏”),使得 Transformer 的中间层中仅保留少量的 Token,从而有效地提升了模型的效率。HoT 还展现了极高的通用性,它不仅可以无缝集成到常规的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,同时也能够适配各种 Token 剪枝和恢复策略。
在这里插入图片描述

3.2、HoT 框架

提出的 HoT 整体框架如下图所示。为了更有效地执行 Token 的剪枝和恢复,本文提出了 Token 剪枝聚类(Token Pruning Cluster,TPC)和 Token 恢复注意力(Token Recovering Attention,TRA)两个模块。其中,TPC 模块动态地选择少量具有高语义多样性的代表性 Token,同时减轻视频帧的冗余。TRA 模块根据所选的 Token 来恢复详细的时空信息,从而将网络输出扩展到原始的全长时序分辨率,以进行快速推理。
在这里插入图片描述

3.3、Token 剪枝聚类模块

Token 剪枝聚类(Token Pruning Cluster,TPC)模块的核心在于鉴别并去除掉那些在语义上贡献较小的 Token,并聚焦于那些能够为最终的三维人体姿态估计提供关键信息的 Token。通过采用聚类算法,TPC 动态地选择聚类中心作为代表性 Token,借此利用聚类中心的特性来保留原始数据的丰富语义。TPC 的结构如下图所示,它先对输入的 Pose Token 在空间维度上进行池化处理,随后利用池化后 Token 的特征相似性对输入 Token 进行聚类,并选取聚类中心作为代表性 Token。
在这里插入图片描述

3.4、Token 恢复注意力模块

Token 恢复注意力(Token Recovering Attention,TRA)模块,它能够基于选定的 Token 恢复详细的时空信息。通过这种方式,由剪枝操作引起的低时间分辨率得到了有效扩展,达到了原始完整序列的时间分辨率,使得网络能够一次性估计出所有帧的三维人体姿态序列,从而实现 seq2seq 的快速推理。TRA 模块的结构如下图所示,其利用最后一层 Transformer 中的代表性 Token 和初始化为零的可学习 Token,通过一个简单的交叉注意力机制来恢复完整的 Token 序列。
在这里插入图片描述

3.5、模块应用

VPT 架构主要由三个组成部分构成:一个姿态嵌入模块用于编码姿态序列的空间与时间信息,多层 Transformer 用于学习全局时空表征,以及一个回归头模块用于回归输出三维人体姿态结果。根据输出的帧数不同,现有的 VPT 可分为两种推理流程:seq2frame 和 seq2seq。在 seq2seq 流程中,输出是输入视频的所有帧,因此需要恢复原始的全长时序分辨率。如 HoT 框架图所示的,TPC 和 TRA 两个模块都被嵌入到 VPT 中。在 seq2frame 流程中,输出是视频中心帧的三维姿态。因此,在该流程下,TRA 模块是不必要的,只需在 VPT 中集成 TPC 模块即可。其框架如下图所示。
在这里插入图片描述

4、实验

4.1、消融实验

在下表,论文给出了在 seq2seq(*)和 seq2frame(†)推理流程下的对比。结果表明,通过在现有 VPT 上应用所提出的方法,本方法能够在保持模型参数量几乎不变的同时,显著减少 FLOPs,并且大幅提高了 FPS。此外,相比原始模型,所提出的方法在性能上基本持平或者能取得更好的性能。
在这里插入图片描述

4.2、与SOTA对比

当前,在 Human3.6M 数据集上,三维人体姿态估计的领先方法均采用了基于 Transformer 的架构。为了验证本方法的有效性,作者将其应用于三个最新的 VPT 模型:MHForme,MixSTE 和 MotionBERT,并与它们在参数量、FLOPs 和 MPJPE 上进行了比较。如下表所示,本方法在保持原有精度的前提下,显著降低了 SOTA VPT 模型的计算量。这些结果不仅验证了本方法的有效性和高效率,还揭示了现有 VPT 模型中存在着计算冗余,并且这些冗余对最终的估计性能贡献甚小,甚至可能导致性能下降。此外,本方法可以剔除掉这些不必要的计算量,同时达到了高度竞争力甚至更优的性能。
在这里插入图片描述

5、总结

本文针对现有 Video Pose Transforme(VPT)计算成本高的问题,提出了沙漏 Tokenizer(Hourglass Tokenizer,HoT),这是一种即插即用的 Token 剪枝和恢复框架,用于从视频中高效地进行基于 Transformer 的 3D 人体姿势估计。研究发现,在 VPT 中维持全长姿态序列是不必要的,使用少量代表性帧的 Pose Token 即可同时实现高精度和高效率。大量实验验证了本方法的高度兼容性和广泛适用性。它可以轻松集成至各种常见的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,并且能够有效地适应多种 Token 剪枝与恢复策略,展示出其巨大潜力。作者期望 HoT 能够推动开发更强、更快的 VPT。

简单Transformer的实现

# 定义多头注意力机制模块  
class MultiHeadAttention(nn.Module):  def __init__(self, d_model, num_heads):  super(MultiHeadAttention, self).__init__() # 调用父类(nn.Module)的构造函数  self.num_heads = num_heads  # 设置多头注意力的头数  self.d_model = d_model  # 输入特征的维度  # 确保d_model可以被num_heads整除  assert d_model % self.num_heads == 0  # 计算每个头的维度  self.depth = d_model // self.num_heads  # 定义线性变换层,用于计算查询、键和值的表示  self.wq = nn.Linear(d_model, d_model)  self.wk = nn.Linear(d_model, d_model)  self.wv = nn.Linear(d_model, d_model)  # 定义线性变换层,用于最后的输出变换  self.dense = nn.Linear(d_model, d_model)  # 将输入张量分割成多个头  def split_heads(self, x, batch_size):  # 重塑张量以准备分割  x = x.reshape(batch_size, -1, self.num_heads, self.depth)  # 置换张量的维度,以便后续的矩阵乘法  return x.permute(0, 2, 1, 3)  # 前向传播函数  def forward(self, v, k, q, mask):  batch_size = q.shape[0]  # 获取批次大小  # 通过线性变换层计算查询、键和值的表示  q = self.wq(q)  # 查询(batch_size, seq_len, d_model)  k = self.wk(k)  # 键(batch_size, seq_len, d_model)  v = self.wv(v)  # 值(batch_size, seq_len, d_model)  # 将查询、键和值分割成多个头  q = self.split_heads(q, batch_size)  # (batch_size, num_heads, seq_len_q, depth)  k = self.split_heads(k, batch_size)  # (batch_size, num_heads, seq_len_k, depth)  v = self.split_heads(v, batch_size)  # (batch_size, num_heads, seq_len_v, depth)  # 计算缩放点积注意力  scaled_attention, attention_weights = self.scaled_dot_product_attention(q, k, v, mask)  # 将注意力输出的维度重新排列并合并回原始维度  scaled_attention = scaled_attention.permute(0, 2, 1, 3).contiguous()  new_context_layer_shape = scaled_attention.shape[:-2] + (self.d_model,)  scaled_attention = scaled_attention.reshape(new_context_layer_shape)  # 通过线性变换层得到最终的输出  output = self.dense(scaled_attention)  return output, attention_weights  # 计算缩放点积注意力  def scaled_dot_product_attention(self, q, k, v, mask):  # 计算查询和键的点积  matmul_qk = torch.matmul(q, k.transpose(-2, -1))  # (batch_size, num_heads, seq_len_q, seq_len_k)  dk = torch.tensor(self.depth, dtype=torch.float32).to(q.device)  # 获取每个头的维度  # 缩放点积注意力分数  scaled_attention_logits = matmul_qk / dk  # 如果提供了掩码,则将其应用于注意力分数  if mask is not None:  scaled_attention_logits += (mask * -1e9)  # 将掩码位置的值设置为一个非常小的负数  # 应用softmax函数得到注意力权重  attention_weights = F.softmax(scaled_attention_logits, dim=-1)  # (batch_size, num_heads

总结

本周主要阅读了CVPR文章,Hourglass Tokenizer for Effcient Transformer-Based 3D Human Pose Estimation。这是一种即插即用的 Token 剪枝和恢复框架,用于从视频中高效地进行基于 Transformer 的 3D 人体姿势估计。大量实验验证了本方法的高度兼容性和广泛适用性。它可以轻松集成至各种常见的 VPT 模型中,不论是基于 seq2seq 还是 seq2frame 的 VPT,并且能够有效地适应多种 Token 剪枝与恢复策略,展示出其巨大潜力。除此之外,还学习学习了简单的Transformer代码的学习。

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

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

相关文章

应用性能分析工具CPU Profiler

简介 本文档介绍应用性能分析工具CPU Profiler的使用方法,该工具为开发者提供性能采样分析手段,可在不插桩情况下获取调用栈上各层函数的执行时间,并展示在时间轴上。 开发者可通过该工具查看TS/JS代码及NAPI代码执行过程中的时序及耗时情况…

JDK安全剖析之安全处理入门

0.前言 Java 安全包括大量 API、工具以及常用安全算法、机制和协议的实现。Java 安全 API 涵盖了广泛的领域,包括加密、公钥基础设施、安全通信、身份验证和访问控制。Java 安全技术为开发人员提供了编写应用程序的全面安全框架,还为用户或管理员提供了…

以Kotti项目为例使用pytest测试项目

在维护和构建大型项目时,单独一个一个手工测试代码已经不适用了,这时候就要用专门的测试框架进行测试。让我们以Kotti项目为例,用pytest这个测试框架进行实践测试吧。 使用python3.10 Ubuntu 系统 准备工作 下载和安装kotti库 pip install…

Flutter 解决NestedScrollView与TabBar双列表滚动位置同步问题

文章目录 前言一、需要实现的效果如下二、flutter实现代码如下:总结 前言 最近写flutter项目,遇到NestedScrollView与TabBar双列表滚动位置同步问题,下面是解决方案,希望帮助到大家。 一、需要实现的效果如下 1、UI图&#xff1…

代码随想录算法训练营三刷day46 | 动态规划之139.单词拆分

三刷day46 139.单词拆分1.确定dp数组以及下标的含义2.确定递推公式3.dp数组如何初始化4.确定遍历顺序5.举例推导dp[i] 139.单词拆分 题目链接 解题思路:单词就是物品,字符串s就是背包,单词能否组成字符串s,就是问物品能不能把背包…

蓝桥杯-DS18B20温度传感器

一.管脚&芯片&寄存器 1.芯片 2.了解封装以及引脚的用法 3.相关寄存器 报警功能 二,如何使能DS18B20芯片 1.初始化芯片&比赛提供的驱动代码 比赛提供的底层驱动代码 /* # 单总线代码片段说明1. 本文件夹中提供的驱动代码供参赛选手完成程序设计参考…

【前沿模型解析】潜在扩散模 1 | LDM第一阶段-感知图像压缩总览

文章目录 0 开始~1 感知压缩的目的2 自回归编码器-解码器生成模型一览2.1 AE 自编码器2.2 VAE 变分自编码器2.3 VQ-VAE2.4 VQ-GAN 3 代码部分讲解总览 0 开始~ 从今天起呢,我们会剖析LDM(潜在扩散模型) 从去年开始,大量的生成模…

【mac操作】brew指令集

brew指令集记录 1. brew search 【软件名称】2. rm -rf $(brew --cache)3. brew install 【软件名】4. brew uninstall 【软件名】5. 未完待续,,,, 官网路径: Homebrew官网 最上面就来一个homebrew安装指令吧&#xf…

三、Jenkins相关操作

Jenkins操作 一、插件管理1.修改公共插件源2.下载中文汉化插件2.1 安装插件2.2 重启2.3 设置为中文 3.远程部署插件 二、用户权限管理1.安装权限插件2.开启权限3.创建角色3.1 Global roles3.2 Item roles 4.创建用户5.给用户分配角色 三、凭证管理四、Git管理1.账号密码方式1.1…

深入浅出 -- 系统架构之Keepalived搭建双机热备

Keepalived重启脚本双机热备搭建 ①首先创建一个对应的目录并下载keepalived安装包(提取码:s6aq)到Linux中并解压: [rootlocalhost]# mkdir /soft/keepalived && cd /soft/keepalived [rootlocalhost]# wget https://www.keepalived.…

【Flutter】Getx设计模式及Provider、Repository、Controller、View等

本文基于Getx 4,x 本本 1、引入 再次接触到Flutter项目,社区俨然很完善和活跃。pubs.dev 寻找状态管理的时候看到很熟悉的Getx时间,俨然发现Getx的版本已到是4.x版本,看到Getx的功能已经非常强大了,庞大的API俨然成为一种开发框架…

c# wpf LiveCharts 简单试验

1.概要 1.1 说明 1.2 环境准备 NuGet 添加插件安装 2.代码 <Window x:Class"WpfApp3.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"…

基于单片机电子密码锁系统设计

**单片机设计介绍&#xff0c;基于单片机电子密码锁系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机电子密码锁系统设计概要主要包括以下几个方面&#xff1a; 一、系统概述 基于单片机电子密码锁系统是一个…

c++11的重要特性2

可变参数模板在3中。 目录 ​编辑 1、统一的列表初始化&#xff1a; std::initializer_list&#xff1a; std::initializer_list是什么类型&#xff1a; std::initializer_list使用场景&#xff1a; 让模拟实现的vector也支持{}初始化和赋值 2、声明 auto decltype nul…

深入浅出 -- 系统架构之分布式多形态的存储型集群

一、多形态的存储型集群 在上阶段&#xff0c;我们简单聊了下集群的基本知识&#xff0c;以及快速过了一下逻辑处理型集群的内容&#xff0c;下面重点来看看存储型集群&#xff0c;毕竟这块才是重头戏&#xff0c;集群的形态在其中有着多种多样的变化。 逻辑处理型的应用&…

SQL注入---POST注入

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一. POST提交概述 在Webshell文章中介绍过post提交和get提交的区别&#xff0c;这里不再赘述 post提交和get提交的区别&#xff1a; get方式提交URL中的参数信息&#xff0c;post方式则是将信…

post请求爬虫入门程序

<!--爬虫仅支持1.8版本的jdk--> <!-- 爬虫需要的依赖--> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.2</version> </dependency><!-- 爬虫需…

知识融合与消歧:完善知识图谱的关键步骤

知识融合与消歧&#xff1a;完善知识图谱的关键步骤 一、引言&#xff1a;知识融合与消歧的重要性 在今天的数据驱动时代&#xff0c;知识图谱已成为组织和理解海量信息的关键技术。它们使得复杂的数据关系可视化&#xff0c;为人工智能提供了丰富的知识基础。然而&#xff0c…

静态路由协议实验综合实验

需求&#xff1a; 1、除R5的换回地址已固定外&#xff0c;整个其他所有的网段基于192.168.1.0/24进行合理的IP地址划分。 2、R1-R4每台路由器存在两个环回接口&#xff0c;用于模拟连接PC的网段&#xff1b;地址也在192.168.1.0/24这个网络范围内。 3、R1-R4上不能直接编写到…

打造你的专属云开发环境:支持任意 IDE,任意云服务 | 开源日报 No.215

loft-sh/devpod Stars: 6.9k License: MPL-2.0 devpod 是一个开源的、仅限客户端的、不受限制的工具&#xff0c;可以与任何集成开发环境&#xff08;IDE&#xff09;一起使用&#xff0c;并允许您在任何云端、Kubernetes 或本地 Docker 上进行开发。 使用 devcontainer.json…