【论文翻译】Jointformer :一种基于误差预测和改进的三维人体姿态估计的单帧提升变压器

news2024/11/28 4:46:20

摘要

单目三维人体姿态估计技术有望极大地提高人体运动数据的可用性。表现最好的单幅图像2D3D提升模型使用图卷积网络(GCNs),通常需要一些手动输入来定义不同身体关节之间的关系。我们提出了一种新的基于变压器的方法,该方法使用更广泛的自我注意机制来学习表示关节的符号序列中的这些关系。我们发现使用中间监督,以及堆叠编码器之间的剩余连接有利于性能。我们还建议使用错误预测作为多任务学习框架的一部分,通过允许网络补偿其置信度来提高性能。我们进行了广泛的消融研究,以证明我们的每一项贡献都能提高性能。此外,我们表明,我们的方法在单帧3D人体姿势估计方面的表现优于最近的技术水平。我们的代码和训练过的模型在Github上公开提供。

1.介绍

运动分析对于混合现实、人机交互、运动生物力学和物理治疗等应用至关重要。然而,人体运动是高度复杂和主观的,高维度和受试者之间的差异意味着仍然有很多不了解的地方。虽然自20世纪80年代以来,运动捕捉系统就被用于量化运动,但设备昂贵,数据集在很大程度上受到实验室设置的限制,而且可供公开使用的数据相对较少。与此同时,互联网收集了大量野外(无标签和不受限制)的移动人类图像和视频。单目3D人体姿态估计(HPE)技术的成熟有可能使可用数据和可评估场景逐步增加,最终可用于提高我们对人体运动的理解

单眼三维人体姿态估计是指从单个视点预测三维关节位置。虽然视频技术可以利用时间信息来提高*表示等贡献精度,但单幅图像估计器仍有其自身的用处。例如,关于人体运动的有用信息可以从低帧率的在线图像数据集或视频数据集中学习。此外,一些视频方法选择使用单帧空间模型和多帧时间模型[2]的组合。因此,强单幅图像的3D姿态提升器也可以提高视频数据的性能。

直接估计技术旨在从图像[3]中直接估计三维人体姿态。然而,具有3D姿态标签的不同图像数据集是稀疏的,并且可以方便地利用现成的2D姿态估计器[4],[5]的高精度,这非常适合于像素处理任务。姿态提升方法从这些估计器提供的2D关节预测中预测3D姿态。用于学习这种映射的神经网络架构的类型已经逐步发展。最初用于姿态提升的简单基线[6]使用多层感知器来实现惊人的精度,即使没有来自图像特征的信息。最近的研究强调,将姿态视为向量忽略了关节之间的空间关系,而图形结构可能更适合[7]。然而,现有的关于图卷积的工作需要手工制作的邻接矩阵来定义节点之间的关系。此外,标准图卷积用共享权矩阵对相邻关节之间的关系进行建模,这对于铰接体的建模是次优的,因为不同身体关节之间的关系可能是不同的[8]。此外,叠加GCN层可能会导致[9]过平滑。相比之下,变压器模型的自注意算子将前馈层推广为对输入是动态的,并且关节之间的关系可以通过学习而不是手动编码。

transformer首先取代了循环神经网络作为自然语言处理(NLP)[10]中的主要模型,最近在图像分类[11]、物体检测[12]和动作识别[13]等视觉任务中成功取代了卷积神经网络。然而,迄今为止,很少有研究将transformer应用于三维人体姿态估计任务。现有的工作要么采用直接估计方法[14],要么集中研究基于视频的2D-3D提升[2],[15]。据我们所知,我们的方法是第一个采用变压器进行单幅图像2D-3D姿态提升的方法。序列的输入和输出标记表示关节,因此我们将我们的方法称为Jointformer。

因此,我们的贡献如下:

•我们提出了一种用于人体姿态估计的新型单帧2D-3D姿态提升的关节transformers。

•我们建议通过使网络能够补偿自身的不确定性,预测与每个关节相关的错误来提高准确性。

•我们提出了一种改进transformers结构,根据3D预测本身、输入2D关节和每个关节的预测误差,改进关节变压器的3D姿势预测。

•我们在transformers编码器堆栈中引入了对3D关节和误差预测的中间监督,由线性层促进。

•我们表明,这种架构在Human3.6M和MPI-INF-3DHP数据集上实现了最先进的结果,用于单帧3D人体姿势估计

2.相关工作

人体姿态估计:由于其在动作识别、增强现实和混合现实等多个领域的适用性,HPE已经成为计算机视觉中一个非常活跃的问题。我们介绍了与直接估计和2D-3D提升方法相关的文献。直接估计是指直接从原始图像中估计三维姿态。Pavlakos等[16]利用人体关节的序数深度来提供一个较弱的监督信号。Sun等人[17]利用关节连接结构,并定义了一个组合损失函数,对姿态的远程相互作用进行编码。马丁内斯等人探索了将问题解耦为2D人体姿势估计和2D- 3D提升,并使用vanilla神经网络来学习映射。Zhao等[7]利用语义图卷积网络(SemGCN)中节点的空间关系(包括局部和全局)来提高性能。Ci等[18]引入了局部连接网络来克服GCNs在估计3D姿态时的有限表示能力。Xu等人[19]使用图堆叠沙漏网络来处理三种不同尺度的人类骨骼表征的图结构特征。Tekin等[20]设计了一个网络,结合了直接估计和提升的优缺点。Yang等[21]提出了一种使用几何感知鉴别器辅助对抗学习的野外HPE方法。Fang等[22]提出了一种基于双向循环网络的提升框架,该框架明确地对诸如运动学、对称性和运动协调等辅助信息建模。Sharma等[23]使用变分自动编码器来预测一组候选3D姿势,并使用序数得分或信息对它们进行排名。Liu等[8]-在对HPE的综合综述中,研究了基于图卷积的提升方法的不同权值分担策略。Zhou等人[24]提出了一种两阶段方法,其中2D点被映射到中间潜在空间,然后对3D空间进行体积回归。

在视觉领域的Transformers:30年来,卷积神经网络(cnn)[25]一直是计算机视觉领域的主导模型。由于卷积在小的局部邻域内运行,深度堆叠卷积对于形成大的接受域和捕获长距离依赖关系变得必要。非局部神经网络[26]受到NLP[10]中的自我注意机制的启发,在CNN的各个阶段之间使用少量的非局部块,以更好地捕获长距离关系,进行动作识别。Ramachandran等人[27]探索了在小窗口内使用独立的自我注意作为图像分类和目标检测的基本构建块(而不是在卷积之上的增强)。同样,Zhao等[28]使用了一种具有成对和patchwise自注意的自注意网络进行图像识别。

        视觉转换器(ViT)[11]并没有将构建块的结构建立在resnet风格的体系结构上,而是直接应用了一个标准Transformers(尽可能少的修改)来对图像进行分类。图像输入为扁平的patches序列,patches处理类似于NLP应用程序中的tokens标记(单词)。类似的方法已经应用于视频分类[29]和动作识别[13]。

        尽管在其他视觉任务中有很大的前景,但很少有研究将Transformers应用于三维人体姿态估计任务。Liu等人首次使用注意力机制自适应地识别人类运动视频的时间窗口中的重要帧。Lin等[14]使用变压器直接估计单个输入帧的3D人体姿势和形状。输入标记由CNN提取的特征向量组成,该特征向量与随机初始化的3D关节或网格顶点连接。在每个编码器之后,输入输入令牌的尺寸逐渐减小。Zheng等人[2]解决了基于视频的3D人体姿态估计任务,并将空间Transformers作为一个更大的时间变压器中的组件,其中输出标记是编码的特征,而不是3D关节位置。因此,它不能应用于单帧2D-3D提升,其性能没有在图像上进行评估。Li等人[15]使用了一个提升Transformers,用跨步时间卷积取代编码器中的前馈层。它对时间序列进行操作,其中每个输入标记都是一个完整的骨架。这意味着有用的信息不能在骨骼的关节之间传递。

误差预测、改进和中间监督:人体姿态估计模型的预测不可避免地存在误差。Ronchi等人[30]在COCO数据集[31]上对2D HPE估计器的预测误差进行了严格的分析。研究了不同类型的误差(抖动、反转、交换和未命中)的相对频率和对性能的影响,发现误差显示出与所使用的2D位姿估计器类型无关的相似分布。Moon等[32]使用这些误差统计数据来生成合成姿势,并将其输入到细化网络。类似地,Chang等人[33]使用特定的误差分布来合成用于2D- 3D姿态提升的2D姿态。Fieraru等人[34]引入了一种姿态优化网络,该网络将图像和给定的姿态估计同时作为输入。Zhang等[35]构造了一个姿态图来考虑细化过程中不同关键点之间的关系。Wang等[36]使用图形姿态细化(GPR)模块根据关键点之间的关系来细化视觉特征。

        中间监督是在深度神经网络的各个阶段使用额外的损失项来提高性能的实践。在二维人体姿态估计中,Newell等[37]使用了重复的自底向上/自顶向下处理,中间监督他们的堆叠沙漏网络DETR[12]在堆叠的Transformers译码块之间使用中间监督来进行目标检测

3.方法

        在本节中,我们将描述我们提出的用于3D人体姿态估计的网络架构。遵循之前的2D-3D姿态提升方法[6],我们使用一个现成的模型从图像中生成2D姿态,并使用这些预测来估计相应的3D姿态。三维姿态估计在相机坐标和骨盆关节为中心。虽然以前的大多数技术都使用多层感知器(mlp)[6]或GCNs[7],但我们使用Transformer分两部分预测和细化3D姿态。首先,我们的Joint Transformer估计单个帧的2D姿态的3D姿态和预测误差。然后,利用中间预测和预测误差,进一步改进了该预测。这种新颖的网络组合使我们能够在单帧3D姿态估计中实现最先进的性能。

A.Joint Transformer

我们的Joint Transformer的设计,以提升输入的2D姿态到3D的单帧。给定一组J二维关节坐标x,我们将每个关节视为一个令牌,并首先将其嵌入到尺寸为c的更高维度:f_{embed}(x):\mathbb{R}^{J \times 2}\rightarrow \mathbb{R}^{J \times c}

传统上,在Transformer中,嵌入之后是位置编码。然而,在我们的例子中,关节的顺序在训练和测试过程中都没有改变,隐式地编码了输入本身的位置(即输入中的第一个关节总是髋关节)。这使得显式位置编码的添加是多余的,并且实际上会损害我们的预测性能,正如我们在第IV-C节中所展示的那样。

在嵌入之后,我们将关节点tokens馈送到Transformer编码器的堆栈中,其中应用自注意来跨每个关节共享信息。我们使用变压器编码器[10]的原始实现,并且没有进一步修改隐藏维数。给定L个变压器编码器,每个编码器的输出为z_L\in \mathbb{R}^{J \times c}。最后,我们回归最后一个编码器z的输出,使用由层归一化、dropout和单个线性层fpred(z)组成的MLP块来预测3D姿态:f_{pred}(z): \mathbb{R}^{J \times c}\rightarrow \mathbb{R}^{J \times 3}

        1)中间监督 : 通过设计,Transformer编码器层在tokens之间共享信息,并学习哪些tokens对于预测是重要的。这甚至给了我们堆栈中的第一个Transformer编码器学习联合标记如何相互作用和预测3D姿势的能力(尽管不一定是容量)。我们利用中间监督来训练我们的网络。与以前的方法相比,我们不单独计算网络末端的损耗,而是在堆栈中每个单独的Transformer编码器之后引入一个损耗项。这允许网络学习初始估计,并由堆栈中的每个Transformer编码器进一步细化。后续的变压器编码器从以前的编码器中传递高度鉴别的特征,并可以专注于越来越细粒度的特征,以细化以前的估计。为了进一步帮助解决这个问题,我们在每个编码器周围添加残差连接。在我们的实现中,每个编码器后面都有一个预测3D姿态的MLP,可以对其应用损失。我们在预测的3D姿态中添加一个额外的线性层,将预测嵌入到变压器的隐藏维度中,并将嵌入添加到原始变压器输出中,如图1的右上角所示。

        2)姿态嵌入:二维输入姿态坐标需要扩展到我们网络的隐藏维度。以前的方法使用线性层或图卷积来完成这项任务。然而,在我们的方法中,我们在所有关节上使用核大小为1的1D卷积。这相当于一个线性层,将每个关节的二维坐标分别扩展到隐藏维度,并在每个关节之间共享权重。由于每个关节的嵌入权重是共享的,因此该层可以专注于寻找扩展二维坐标的最佳方法,而不考虑关节的位置。传统上,Transformer还需要嵌入标记的位置编码。由于关节的输入顺序从未改变,位置已经隐式编码,额外的编码是多余的。我们在表III中显示,我们的方法在没有任何显式位置编码的情况下工作得更好,我们的卷积嵌入优于线性层。

        3)错误预测:对其预测的置信度进行估计,使网络具有补偿能力。由于分类头在softmax层之前每个类生成一个预测,因此可以直接推断其预测置信度。相比之下,回归头缺乏这种开箱即用的能力。我们在变压器编码器的输出中添加第二个反映3D姿势预测的MLP,并迫使网络隐式地学习自己的不确定性。因此,误差预测将预测自己每个关节和每个坐标f_{error}(z)=\mathbb{R}^{J \times c}\rightarrow \mathbb{R}^{J \times 3}。我们观察到,误差预测的加入使训练稳定,并导致更好的整体结果(第IV -C节)。它还可以作为可视化姿势或技术实际应用的重要附加信息。

        4)损失函数:我们用来训练我们的网络的损失函数由两项组成:3D预测损失L3D和误差损失L_{error}。对于3D预测损失,我们使用预测的3D位姿y和真实位姿y之间的均方误差。对于误差损失,我们首先将真实误差\widehat{e}定义为预测位姿和真实位姿之间的绝对差\widehat{e}=\left | y-\widehat{y} \right |。这允许我们使用预测误差e和真实误差\widehat{e}之间的均方误差作为误差损失。由于我们的中间监督,我们在堆栈中的每个变压器编码器后应用这两个损失项。这导致了综合损失:

 其中L是堆栈中Transformer编码器的数量

B. Refinement Transformer

为了进一步利用误差预测,提高姿态预测的精度,我们设计了一个额外的Refinement Transformer。该网络类似于我们的joint Transformer,但有以下区别:输入是原始的2D位姿连接到预测的3D位姿和误差预测。我们只堆叠两个隐藏维度为256的Transformer编码器,并且我们不使用中间监督。与joint Transformer一样,Refinement Transformer对每个关节进行标记,并使用1D卷积将8通道输入嵌入到隐藏维度。在堆叠的Transformer编码器之后,我们使用一个线性层来预测最终的3D姿态。

C.实现细节

我们在PyTorch[38]中实现我们的方法,并使用单个NVIDIA GeForce RTX 2080 TI进行训练。我们使用AdamW[39]优化器训练联合变压器30个周期,批大小为256,初始学习率为0.001,余弦退火学习率衰减为[40]。我们所有的预测层在训练期间也包括0.2的dropout。

然后,我们确定联合变压器的权重,并使用3D预测损失和相同的超参数训练细化变压器。在评估期间,我们通过水平翻转使用测试时数据增强,遵循[41]。

 4.实验

实验部分就不写了

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

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

相关文章

nodejs+vue高校网上报名系统

本课题利用nodejsVue设计实现网上报名系统。系统的主要功能是:用户在线注册信息之后,利用注册时填写的用户账号与密码,登入系统后,对注册的个人信息进行修改,在线报名,能正确的提交有送报考的基本信息&…

【图卷积网络】01-卷积神经网络:从欧氏空间到非欧氏空间

人工神经网络发展浪潮 第三次浪潮——卷积神经网络 加拿大多伦多大学教授,机器学习领域泰斗Geoffery Hinton及其学生在《科学》上发表了一篇论文 (Hinton, G. E . Reducing the Dimensionality of Data with Neural Networks[J]. Science, 2006, 313(578…

【Typescript学习】使用 React 和 TypeScript 构建web应用(二)部分UI、useState、useRef、Props

教程来自freecodeCamp:【英字】使用 React 和 TypeScript 构建应用程序 跟做,仅记录用 其他资料:https://www.freecodecamp.org/chinese/news/learn-typescript-beginners-guide/ 第二天 以下是视频(0:18-0:40) 的内容 目录第二天1 App 函数…

【二叉树】java实现代码,详解二叉树,带大家更深刻的掌握二叉树递归思想

前言: 大家好,我是良辰丫🪐🪐🪐,在探索数据结构的旅程中,二叉树可以说是数据结构中的重点,笔试面试经常出现的问题,同时也是难点。🐥🐥&#x1f4…

【Java开发】Spring Cloud 09 :微服务网关 Gateway

Spring Cloud Gateway(简称 Gateway),它在微服务架构中扮演的角色是“微服务网关”,Nginx 和 Gateway 在微服务体系中的分工是不一样的。Gateway 作为更底层的微服务网关,通常是作为外部 Nginx 网关和内部微服务系统之…

Markdown编辑器基本语法

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

【C语言从0到1之文件操作(FILE)】(原理 画图 举例 不信教不会你 不要放收藏夹落灰 学起来好嘛)

🕺作者:迷茫的启明星 🎃专栏:《数据库》《C语言从0到1专栏》《数据结构》《C语言杂谈》🏇分享喜欢的一句话:心如花木,向阳而生前言在我们的学习中,文件操作是被我们忽略,…

NodeJS 与第三方模块 mysql(基本操作)

文章目录参考描述mysql 模块连接数据库检测基本操作查询数据与代码分离原则占位符插入另一种姿态修改另一种姿态删除标记删除参考 项目描述哔哩哔哩黑马程序员搜索引擎Bing 描述 项目描述NodeJSv18.13.0nodemon2.0.20MySQL5.7.40mysql2.18.1 mysql 模块 npm(Node…

Linux——进程

目录 冯诺依曼体系结构 操作系统(Operator System) 概念 设计OS的目的 定位 如何理解 "管理" 总结 系统调用和库函数概念 承上启下 进程 基本概念 描述进程-PCB task_struct-PCB的一种 task_ struct内容分类 组织进程 查看进程 通过系统调用获取进程…

Pycharm使用Git进行版本控制(自建远端Git仓库)

目录本地Git安装远端Git仓库搭建在Pycharm中使用Git进行版本控制设置Git可执行文件路径创建本地Git仓库设置远端Git仓库提交及推送本地Git安装 安装本地Git用于被Pycharm调用,安装方法参考以下博客: Git 的下载与安装_作者:fengzhx0820 远端…

四轮两驱小车(四):STM32驱动5路灰度传感器PID循迹

目录 前言: 小车效果展示: 5路数字灰度传感器: 巡线思路: 加入PID调节的代码: 前言: 之前买了一批5路灰度传感器,想用这传感器进行循迹,无奈网上和官方的资料提供的还是比较少&a…

ARM X210 官方 uboot 配置编译实践

一、X210官方uboot配置编译实践1 1. 找到官方移植好的 uboot(BSP 概念) (1) 源头的源代码是 uboot 官网下载的。这个下载的源代码可能没有你当前使用的开发板的移植,甚至找不到当前开发板使用的 SoC 对应的移植版本。 (2) SoC 厂商在推出一…

分享145个ASP源码,总有一款适合您

ASP源码 分享145个ASP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下..., 145个ASP源码下载链接:https://pan.baidu.com/s/1gxm3rFFLu8pUhVncQga6-g?pwd7n85 提取码&#x…

HJ56、HJ58、JZ4、JZ6、JZ15、JZ17几道题

文章目录HJ56 完全数计算题目描述:具体实现:HJ58 输入n个整数,输出其中最小的k个题目描述:具体实现:JZ4 二维数组中的查找题目描述:具体实现:JZ6 从尾到头打印链表题目描述:具体实现…

springboot文件上传,单文件上传和多文件上传,以及数据遍历和回显

springboot文件上传&#xff0c;单文件上传和多文件上传项目结构及pom.xml创建文件表单页面编写javabean编写controller映射MultipartFile类RequestPart注解controller代码application.properties中的文件上传配置遍历数据显示页面运行显示项目结构及pom.xml pom.xml: <dep…

SQL用法详解补充

本文是对上次“SQL用法详解”的一些补充&#xff0c;一些基本操作可以点击链接查看 目录 一.对表结构的常用操作 查看表结构格式 修改表结构格式 1.修改列名和类型 2.修改添加列 3.修改表删除列 4.修改表名 5.数据删除 二.总结 三.实例 解决 完整代码 一.对表结构的常用操…

TIA博途中启用或禁用DP从站或PROFINET IO设备的具体方法

TIA博途中启用或禁用DP从站或PROFINET IO设备的具体方法 在实际项目中我们会遇到这样的问题, 例如:硬件组态中配置了一个控制器和3个 PN IO设备,但是最后只用到了2个PN IO设备,这样控制器一侧无法连接到第3个PN IO设备时,CPU会产生报警,PLC的Error指示灯会一直闪烁。 那么…

蓝桥杯2021省赛Python

蓝桥杯2021省赛Python 不得不说2021的比2020的难 1.卡片 很明显&#xff0c;最先没的肯定是1或者0&#xff0c;我们只要统计到谁会消耗2022个1或者0就好了 if __name__ __main__:res1 0res0 0for i in range(1,100000):i str(i)res1 i.count(1)res0 i.count(0)if res1…

[Rust笔记] 规则宏的“卫生保健”

规则宏代码的“卫生保健”规则宏mbe即是由macro_rules!宏所定义的宏。它的英文全称是Macro By Example。相比近乎“徒手攀岩”的Cpp模板元编程&#xff0c;rustc提供了有限的编译时宏代码检查功能&#xff08;名曰&#xff1a;Mixed Hygiene宏的混合保健&#xff09;。因为rust…

pointcovn 阅读笔记

各种点云采样算法 https://blog.csdn.net/weixin_41485242/article/details/107150963 Inverse Density 1.2 Inverse Density Importance Sampling (IDIS): 这个也比较好理解&#xff0c;简而言之就是根据每个点的密度来对其重新进行排序&#xff0c;尽可能地保留密度比较低的地…