PoseFormer:基于视频的2D-to-3D单人姿态估计

3D Human Pose Estimation with Spatial and Temporal Transformers论文解析

  • 摘要
  • 1. 简介
  • 2. Related Works
    • 2.1 2D-to-3D Lifting HPE
    • 2.2 GNNs in 3D HPE
    • 2.3 Vision Transformers
  • 3. Method
    • 3.1 Temporal Transformer Baseline
    • 3.2 PoseFormer: Spatial-Temporal Transformer
      • Spatial Transformer Module
      • Temporal Transformer Module
      • Regression Head
      • Loss Function
  • 4. 数据集
    • 4.1 [Human3.6M](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=6682899)
    • 4.2 [MPI-INF-3DHP](https://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=8374605)
  • 5. 评测指标

论文链接:3D Human Pose Estimation with Spatial and Temporal Transformers
论文代码:https://github.com/zczcwh/PoseFormer
论文出处:2021 ICCV
论文单位:University of Central Florida, USA

摘要

  • Transformer架构已经成为自然语言处理中的首选模型,现在正被引入到计算机视觉任务中,例如图像分类、对象检测和语义分割。
  • 然而,在人体姿态估计领域,卷积架构仍然占主导地位。
  • 在这项工作中,我们呈现PoseFormer一种纯粹基于Transformer的方法,用于视频中的3D人体姿势估计,不涉及卷积架构
  • 受视觉Transformer最新发展的启发,我们设计了一个时空Transformer结构,以全面建模每帧内的人体关节关系以及帧间的时间相关性,然后输出中心帧的精确三维人体姿态。
  • 我们在两个流行的和标准的基准数据集:Human3.6MMPI-INF-3DHP上定量和定性地评估了我们的方法。大量的实验表明,PoseFormer在两个数据集上都达到了最先进的性能。

1. 简介

  • 人体姿态估计(HPE) 旨在从图像和视频等输入数据中定位关节并构建身体表示(例如骨骼位置)。
  • HPE提供人体的几何和运动信息,可以应用于广泛的应用(如人机交互,运动分析,医疗保健)。
  • 目前的工作大致可以分为两类: (1)直接估算方法,(2)2D-to-3D提升方法
  • 直接估计方法从2D图像或视频帧中推断出3D人体姿势,而无需中间估计2D姿势表示。
  • 2D-to-3D提升方法从中间估计的2D姿势推断出3D人体姿势。
  • 得益于最先进的2D姿态检测器的优异性能,2D-to-3D提升方法通常优于直接估计方法。
  • 然而,这些2D姿势到3D的映射是non-trivial; 由于深度模糊和遮挡,相同的2D姿态可以生成各种潜在的3D姿态。
  • 为了缓解这些问题并保持自然的连贯性,许多最近的作品将来自视频的时间信息整合到他们的方法中。然而,基于cnn的方法通常依赖于固有的有限时间连通性的扩张技术,而循环网络主要受限于简单的顺序相关性。
  • 最近,Transformer 由于其效率、可扩展性和强大的建模能力,已经成为自然语言处理(NLP)事实上的模型。由于Transformer 的self-attention 机制,可以清楚地捕获跨长输入序列的全局相关性。这使得它特别适合序列数据问题的架构,因此可以自然地扩展到3D HPE。
  • 凭借其全面的连通性和表达,Transformer 提供了一个跨帧学习更强的时间表示的机会。
  • 然而,最近的研究表明,Transformer 需要特定的设计才能在视觉任务中达到与CNN同类产品相当的性能。具体来说,它们通常需要非常大规模的训练数据集,或者如果应用于较小的数据集,则增强数据增强和正则化。
  • 此外,现有的视觉变压器主要局限于图像分类、目标检测和分割,但如何利用变压器的力量进行3D HPE仍然不清楚。
  • 为了回答这个问题,我们首先将变压器直接应用于2D-to-3D lifting HPE。在这种情况下,我们将给定序列中每帧的整个2D姿态视为一个标记( token)(图1(a))。 虽然这种基线方法在一定程度上是有效的,但它忽略了空间关系(关节对关节)的自然区别。
    在这里插入图片描述
  • 对该基线的自然扩展是将每个2D关节坐标视为一个token,提供由序列所有帧中的这些关节组成的输入(图1(b))。然而,在这种情况下,当使用长帧序列时,token的数量变得越来越大(在3D HPE中,每帧最多243帧,17个关节是常见的,token的数量将为243×17=4131)。由于Transformer计算每个token对另一个token的直接关注,因此模型的内存需求接近不合理的水平。
  • 因此,作为应对这些挑战的有效解决方案,我们提出了PoseFormer,这是第一个用于视频中2d到3d提升HPE的纯Transformer网络
  • PoseFormer使用两个维度的不同Transformer模块直接对空间和时间方面进行建模
  • PoseFormer不仅在空间和时间元素之间产生强大的表示,而且不会对长输入序列产生大量的token计数。
  • 在高层次上,PoseFormer只是从现成的2D姿态估计器中提取一系列检测到的2D姿态,并输出中心帧的3D姿态。
  • 更具体地说,我们建立了一个空间Transformer模块来编码每个帧中二维关节之间的局部关系。 空间self-attention层考虑二维关节的位置信息,并返回该帧的潜在特征表示。接下来,我们的时间Transformer模块分析每个空间特征表示之间的全局依赖关系,并生成准确的3D姿态估计。
  • 在两种流行的3D HPE基准(Human3.6M和MPI-INF-3DHP)上的实验评估表明,PoseFormer在这两个数据集上都达到了最先进的性能。我们将我们估计的3D姿态与SOAT方法进行比较,并发现
    PoseFormer产生更平滑、更可靠的结果。此外,消融研究中还提供了PoseFormer注意力图的可视化和分析,以了解模型的内部工作原理并证明其有效性。
  • 我们的贡献有三方面:
    (1)我们提出了第一个纯基于Transformer的模型PoseFormer,用于3D HPE的2d到3D lifting。
    (2)我们设计了一个有效的时空Transformer模型,其中空间Transformer模块编码人体关节之间的局部关系,而时间Transformer模块捕获整个序列中跨帧的全局依赖关系。
    (3)我们的PoseFormer模型在Human3.6M和MPI-INF-3DHP数据集上取得了SOAT效果。

2. Related Works

  • 在这里,我们具体总结了3D单人单视图HPE方法
  • 直接估计方法: 从二维图像中推断三维人体姿态,而不需要中间估计二维姿态表示。
  • 2D-to-3D lifting 方法: 利用2D姿态作为输入来生成相应的3D姿态,这在该领域的最新方法中较为流行。任何现成的2D姿态估计器都可以有效地与这些方法兼容。

2.1 2D-to-3D Lifting HPE

  • 2D到3d提升方法利用从输入图像或视频帧估计的2D姿势。
  • OpenPose、CPN、AlphaPose和HRNet被广泛用作2D姿态检测器。
  • 基于这种中间表示,可以使用多种方法生成3D姿态。
  • 然而,以前最先进的方法依赖于扩展的时间卷积(dilated temporal convolutions)来捕获全局依赖关系,这在时间连接上是有限的。
  • 此外,这些工作中的大多数使用简单的操作将关节坐标投影到潜在空间,而没有考虑人体关节的运动学相关性。

2.2 GNNs in 3D HPE

  • 自然地,人体姿势可以表示为一个graph,其中关节是nodes ,骨骼是 edges。
  • 图神经网络(GNNs)也被应用于 2D-to-3D pose lifting 问题,并提供了很好的表现。
  • 对于我们的PoseFormer,transformer可以被视为一种具有独特且通常有利的图操作的GNN。
  • 具体来说,一个transformer编码器模块本质上形成了一个全连接图,其中边缘权重是使用输入条件,多头self-attention计算的。
  • 该操作还包括节点特征的规范化,跨注意头输出的前馈聚合器,以及使其能够有效地扩展堆叠层的剩余连接。
  • 与其他图操作相比,这样的操作是有利的。例如,节点之间连接的强度由transformer的self-attention机制决定,而不是像典型的那样通过邻接矩阵预定义。
  • 本任务中使用的基于gcn的配方。 这使得模型能够灵活地根据每个输入姿势调整关节的相对重要性。
  • 此外,transformer的综合缩放和归一化组件可能有利于减轻当多层堆叠在一起时困扰许多GNN操作变体的过度平滑效应。

2.3 Vision Transformers

  • 最近,有一个新兴的兴趣将 Transformer 应用于视觉任务。
  • DEtection TRansformer (DETR) 用于目标检测与全景分割。
  • Vision Transformer (ViT) ,纯Transformer 构架,在图像分类方面达到了SOAT的性能。
  • Transpose,基于Transformer 构架,从图像中估计3D姿态。
  • MEsh TRansfOrmer,将cnn与Transformer 网络结合起来,从单个图像重建3D pose 和 mesh vertices。
  • 本文方法的时空Transformer 架构利用了每帧中的关键点相关性,并保留了视频中的自然时间一致性。

3. Method

  • Pipeline:通过现成的2D姿态检测器获得每帧的2D姿态,使用连续帧的二维姿态序列作为输入,估计中心帧的三维姿态。

3.1 Temporal Transformer Baseline

  • 作为 2D-to-3D lifting 的基线应用,我们将每个2D姿态视为输入token,并使用Transformer 来捕获输入之间的全局依赖关系,如图2(a)所示。
    在这里插入图片描述
  • 我们将把每个输入token称为一个patch,在术语上类似于ViT.
  • 对于输入序列X∈R^(f×(J·2)),f 为输入序列的帧数,J为每帧的关节数2D位姿,2表示关节在2D空间中的坐标。
  • patch embedding 是一个可训练的线性投影层,将每个patch 嵌入到高维特征中。
  • Transformer 网络利用位置嵌入来保留序列的位置信息。
  • self-attention是Transformer 的核心功能,它将输入序列的不同位置与嵌入特征联系起来。
  • 我们的Transformer 编码器由多头自注意块和多层感知器(MLP)块组成。LayerNorm在每个块之前应用,剩余连接在每个块之后应用。
  • 为了预测中心帧的三维姿态,编码器输出Y∈Rf×C通过在帧维中取平均值,收缩为向量y∈R1×C。最后,一个MLP块将输出回归到 y∈R1×(J*3),即中心框架的3D姿态。

3.2 PoseFormer: Spatial-Temporal Transformer

  • 我们观察到,时间Transformer基线主要关注输入序列中帧之间的全局依赖关系。利用线性变换patch embedding将关节坐标投影到隐维上。
  • 然而,由于简单的线性投影层无法学习到attention信息,局部关节坐标之间的运动信息在时序Transformer基线中没有得到强有力的表示。
  • 一个潜在的解决方案是将每个关节坐标视为一个单独的patch,并将所有帧的关节作为输入馈送到Transformer(见图1(b))。
  • 然而,patch的数量会迅速增加(帧数 f 乘以关节数 J),导致模型的计算复杂度为O((f·J)2)。
  • 为了有效地学习局部联合相关性,我们分别对空间和时间信息使用了两个分离的Transformer
  • 如图2(b)所示,PoseFormer由三个模块组成: spatial transformer module, temporal transformer module, and regression head module

Spatial Transformer Module

  • Spatial Transformer Module是从单个帧中提取高维特征嵌入。给定一个具有 J 个关节的二维姿态,我们将每个关节(即两个坐标)视为一个patch,并按照通用视觉变换pipeline在所有patch之间进行特征提取。
  • 首先,我们用可训练的线性投影将每个关节的坐标映射到高维空间,这被称为spatial patch embedding。

Temporal Transformer Module

  • 由于Spatial Transformer Module为每个单独的帧编码高维特征,因此Temporal Transformer Module的目标是跨帧序列建模依赖关系。
  • 在Temporal Transformer Module之前,我们加入了可学习的时序位置嵌入来保留帧的位置信息。
  • 对于Temporal Transformer Module编码器,我们采用与Spatial Transformer Module编码器相同的架构,该架构由多头self-attention块和MLP块组成。
  • 时序变压器模块的输出为 Y∈Rf*(J*c)

Regression Head

  • 由于我们使用一组帧序列来预测中心帧的三维姿态,因此Temporal Transformer Module Y∈Rf*(J·c)的输出需要简化为 y∈R1*(J·c)
  • 我们在帧维度上应用加权平均操作(使用学习到的权重)来实现这一点。
  • 最后,一个具有Layer范数和一个线性层的简单MLP块返回输出 y∈R1*(J·3),这是中心帧的预测三维姿态。

Loss Function

  • 为了训练我们的时空转换模型,我们使用了标准的MPJPE (Mean Per Joint Position Error)损失以最小化预测值与ground truth姿态之间的误差为
    在这里插入图片描述

4. 数据集

4.1 Human3.6M

  • Human3.6M是3D单人HPE使用最广泛的室内数据集。
  • 由11名专业演员表演坐、走、打电话等17种动作。
  • 每个受试者在室内环境中从4个不同的角度拍摄视频。
  • 该数据集包含360万视频帧,其中包含基于精确标记的动作捕捉系统捕获的3D地面真相注释。
  • 根据之前的工作,我们采用相同的实验设置: 所有15个动作都用于训练和测试,模型训练在5个sections(S1, S5,S6, S7, S8)和测试在 2个sections(S9和S11)。

4.2 MPI-INF-3DHP

  • MPI-INF-3DHP是一个更具挑战性的三维姿态数据集。
  • 它既包含受限的室内场景,也包含复杂的室外场景。
  • 有8个演员表演8个动作,从14个摄像机视图,涵盖了更大的多样性的姿势。
  • MPI-INF-3DHP提供了6个不同场景的测试集。

5. 评测指标

  • MPJPE :Mean Per Joint Position Error,平均每个关节位置误差,估计关节与地面真值之间的平均欧几里得距离,单位为毫米。
  • P-MPJPE: P-MPJPE是估计的三维姿态与ground truth经过后处理后的刚性对准后的MPJPE,对单个关节预测失败具有更强的鲁棒性。
  • PCK:Percentage of Correct Keypoint,在150mm范围内的正确关节点的百分比。
  • AUC:Area Under Curve,曲线下面积。

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

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

相关文章

人文景区有必要做VR云游吗?如何满足游客出行需求?

VR云游在旅游行业中的应用正在快速增长,为游客带来沉浸式体验的同时,也为文旅景区提供了新的营销方式。很多人说VR全景展示是虚假的,比不上真实的景区触感,人文景区真的有必要做VR云游吗?我的答案是很有必要。 如果你认…

【Windows】Windows开机密码重置

文章目录 前言一、问题描述二、操作步骤2.1 安装DaBaiCai_d14_v6.0_2207_Online.exe2.2 插入U盘2.3 打开大白菜,点击“一键制作USB启动盘”2.4 等待进度条走完2.5 重启电脑,开机按“F12”或者“F8”(具体百度一下,对应品牌电脑开机…

MyCat配置文件schema.xml讲解

1.MyCat配置 1.1 schema标签 如果checkSQLschema配置的为false,那么执行DB01.TB_ORDER时就会报错,必须用use切换逻辑库以后才能进行查询。 sqlMaxLimit如果未指定limit进行查询,列表查询模式默认为100,最多只查询100条。因为用mycat后默认数…

JVM详情

JVM详情 一、JVM内存划分二、双亲委派模型(重点考察)三、 GC(垃圾回收机制)垃圾的判定算法垃圾回收算法 一、JVM内存划分 堆:存放new出来的对象;(成员变量) 方法区:存放…

LeetCode_01 精度丢失

1281. 整数的各位积和之差 给你一个整数 n,请你帮忙计算并返回该整数「各位数字之积」与「各位数字之和」的差。 示例 输入:n 234 输出:15 解释: 各位数之积 2 * 3 * 4 24 各位数之和 2 3 4 9 结果 24 - 9 15示例 …

C++20协程

目录 协程原理: 进程、线程和协程的区别和联系​编辑 协程在IO多路复用中 协程的目的: 协程的优势: ​ 协程原理: (学习来源:幼麟实验室) 线程是进程中的执行体,拥有一个…

RISCV 5 RISC-V调用规则

RISCV 5 RISC-V调用规则 1 Register Convention1.1 Integer Register Convention1.2 Floating-point Register Convention 2. Procedure Calling Convention2.1 Integer Calling Convention2.2 Hardware Floating-point Calling Convention2.3 ILP32E Calling Convention2.4 Na…

现代C++中的从头开始深度学习【1/8】:基础知识

一、说明 提及机器学习框架与研究和工业的相关性。现在很少有项目不使用Google TensorFlow或Meta PyTorch,在于它们的可扩展性和灵活性。也就是说,花时间从头开始编码机器学习算法似乎违反直觉,即没有任何基本框架。然而,事实并非…

正则表达式的使用

1、正则表达式-教程 正则表达式:文本模式,包括普通字符(例如,a到z之间的字母)和特殊字符(称为元字符)。 正则表达式使用单个字符串来描述,匹配一系列匹配某个句法规则的字符串。 2、…

A2C原理和代码实现

参考王树森《深度强化学习》课程和书籍 1、A2C原理: Observe a transition: ( s t , a t , r t , s t 1 ) (s_t,{a_t},r_t,s_{t1}) (st​,at​,rt​,st1​) TD target: y t r t γ ⋅ v ( s t 1 ; w ) . y_{t} r_{t}\gamma\cdot v(s_{t1};\mathbf…

如何在Spring MVC中使用@ControllerAdvice创建全局异常处理器

文章目录 前言一、认识注解:RestControllerAdvice和ExceptionHandler二、使用步骤1、封装统一返回结果类2、自定义异常类封装3、定义全局异常处理类4、测试 总结 前言 全局异常处理器是一种 🌟✨机制,用于处理应用程序中发生的异常&#xff…

ROS入门核心教材重要节选

ROS核心教程 1、文件系统 使用下述命令查看包 rospack ros pack(age) 如rospack find roscpp roscd ros cd 如roscd roscpp rosls ros ls 如rosls roscpp2、ROS节点 节点可以理解为人工定义一个机器人模块,然后抽象成可执行文件。 rosnode li…

TCP的四次挥手与TCP状态转换

文章目录 四次挥手场景步骤TCP状态转换 四次挥手场景 TCP客户端与服务器断开连接的时候,在程序中使用close()函数,会使用TCP协议四次挥手。 客户端和服务端都可以主动发起。 因TCP连接时候是双向的,所以断开的时候也是双向的。 步骤 三次…

LabVIEW开发3D颈动脉图像边缘检测

LabVIEW开发3D颈动脉图像边缘检测 近年来,超声图像在医学领域对疾病诊断具有重要意义。边缘检测是图像处理技术的重要组成部分。边缘包含图像信息。边缘检测的主要目的是根据强度和纹理等属性识别图像中均匀区域的边界。超声(US)图像存在视觉…

vue项目实战-脑图编辑管理系统kitymind百度脑图

前言 项目为前端vue项目,把kitymind百度脑图整合到前端vue项目中,显示了脑图的绘制,编辑,到处为json,png,text等格式的功能 文章末尾有相关的代码链接,代码只包含前端项目,在原始的…

微服务与Nacos概述

微服务概述 软件架构的演变:单体架构、垂直应用架构、流式计算架构 SOA、微服务架构和服务网格。 微服务是一种软件开发架构,它将一个大型应用程序拆分为一系列小型、独立的服务。每个服务都可以独立开发、部署和扩展,并通过轻量级的通信机…

事务,不只ACID | 京东物流技术团队

1. 什么是事务? 应用在运行时可能会发生数据库、硬件的故障,应用与数据库的网络连接断开或多个客户端端并发修改数据导致预期之外的数据覆盖问题,为了提高应用的可靠性和数据的一致性,事务应运而生。 从概念上讲,事务…

开发中常用的数据库日志都长啥样呢?

目录 常见日志级别 数据库日志 Undo log 逻辑日志 redolog binlog 慢查询日志 AOF 文本文件 RDB 二进制文件 常见日志级别 DEBUG:用于详细记录应用程序的运行过程,如变量值、执行流程等。DEBUG级别的日志通常用于开发和调试过程中,以…

[保研/考研机试] 约瑟夫问题No.2 C++实现

题目要求&#xff1a; 输入、输出样例&#xff1a; 源代码&#xff1a; #include<iostream> #include<queue> #include<vector> using namespace std;//例题5.2 约瑟夫问题No.2 int main() {int n, p, m;while (cin >> n >> p >> m) {//如…

业务中如何过滤敏感词

在我们访问网站的时候&#xff0c;如果发现我们发布的内容有色情暴力的东西等等&#xff0c;会屏蔽掉&#xff0c;这种行为就是过滤敏感词。 从技术层面实现起来&#xff0c;其实比较简单&#xff0c;因为我们输入的内容就是一个大型的字符串&#xff0c;我们要调用某些api来判…