siMLPe:Human Motion Prediction

news2024/11/27 15:53:33

Back to MLP: A Simple Baseline for Human Motion Prediction解析

  • 摘要
  • 1. 简介
  • 2. Related Work
    • 2.1 基于RNN的人体运动预测
    • 2.2 基于GCN的人体运动预测
    • 2.3 基于 Attention 的人类运动预测
    • 2.4 总结
  • 3. siMLPe
    • 3.1 离散余弦变换(Discrete Cosine Transform (DCT))
    • 3.2 网络架构
    • 3.3 Losses
      • 目标函数
  • 4. 实验
    • 4.1 数据集
    • 4.2 评价指标

论文地址:Back to MLP: A Simple Baseline for Human Motion Prediction
论文代码:https://github.com/dulucas/simlpe
论文出处:IEEE/CVF Winter Conference on Applications of Computer Vision (WACV),2023
论文单位:Grenoble INP,France

摘要

  • 本文解决了人体运动预测的问题,包括从历史上观察到的序列预测未来的身体姿势。
  • 然而,最先进的方法提供了良好的结果,它们依赖于任意复杂性的深度学习架构,例如RNN,Transformers或GCN,通常需要多个训练阶段和超过200万个参数。
  • 在本文中,我们表明,结合一系列标准实践,如应用离散余弦变换(DCT),预测关节的残余位移和优化速度作为辅助损失,基于多层感知器(mlp)的轻量级网络只有14万个参数可以超越最先进的性能。
  • Human3.6MAMASS3DPW数据集进行了验证,显示了我们的方法(siMLPe)始终优于所有其他方法。
  • 我们希望我们的简单方法可以为社区提供一个强有力的基线,并允许重新思考人体运动预测问题。

1. 简介

  • 给定一个三维人体姿态序列,人体运动预测任务的目的是预测姿态序列的后续动作
  • 预测未来人体运动是许多应用的核心,包括自动驾驶中的事故预防、跟踪人或人机交互。
  • 由于人体运动的时空性质,文献中常见的趋势是设计能够融合时空信息的模型。
  • 传统方法主要依赖于隐马尔可夫模型或高斯过程潜变量模型。
  • 然而,虽然这些方法在简单和周期性运动模式下表现良好,但在复杂运动下却明显失败。
  • 近年来,随着深度学习的成功,基于不同类型的神经网络开发了各种能够处理序列数据的方法。
  • 例如,一些工作使用 RNN 来建模人体运动,一些工作基于 GCN,一些工作基于Transformers,融合跨越人体关节和时间的运动序列的时空信息。
  • 然而,这些新方法的体系结构通常并不简单,其中一些方法需要额外的先验,这使得它们的网络难以分析和修改。
  • 因此,一个问题自然出现了:“我们可以用一个简单的网络来解决人类运动预测问题吗?
  • 为了回答这个问题,我们首先尝试了一个简单的解决方案,即重复最后一个输入姿势并将其用作输出预测。 如图1所示,这种朴素的解决方案已经可以获得合理的结果,这意味着最后一个输入姿势与未来的姿势“接近” (Repeating Last-Frame)。
    在这里插入图片描述
  • 受此启发,我们进一步只训练一个全连接层来预测未来姿势和最后一个输入姿势之间的残差,并获得更好的性能,这显示了建立在像全连接层这样的基础层上的简单网络用于人体运动预测的潜力 (One-FC)。
  • 基于上述观察,我们回到多层感知器(MLPs),并构建一个简单而有效的网络,称为siMLPe,只有三个组成部分: fully connected layers, layer normalization, and transpose operations. 网络体系结构如图2所示。
    在这里插入图片描述
  • 值得注意的是,我们发现即使是常用的激活层(如ReLU)也不需要,这使得我们的网络除了层归一化之外完全是线性模型。
  • 尽管简单,但当与三个简单的做法适当结合时,siMLPe可以实现强大的性能。这三个简单的做法分别为:应用离散余弦变换(DCT),预测关节的残余位移,优化速度作为辅助损失。
  • SIMLPE在几个标准数据集上产生了SOAT性能,包括Human3.6M,AMASS,和3DPW。
  • 同时,siMLPe是轻量级的,需要的参数比以前最先进的方法少20到60倍。
  • SIMLPE和以前的方法的比较可以在图1显示了不同网络在Human3.6M上1000 ms时的平均每个关节位置误差(MPJPE)与网络复杂性的关系。siMLPe以高效率达到最佳性能。
  • 综上所述,我们的贡献如下:
    (1)我们表明,人类运动预测可以以一种简单的方式建模,而无需明确融合空间和时间信息。作为一个极端的例子,单个全连接层已经可以达到合理的性能。
    (2)我们提出siMLPe,一个简单而有效的人体运动预测网络,只有三个组成部分: 全连接层、层归一化和转置操作,在多个基准测试(如Human3.6M,AMASS和3DPW数据集)上,以远少于现有方法的参数实现了最先进的性能。

2. Related Work

  • 人体运动预测是一种序列到序列的任务,将过去观察到的运动作为预测未来运动序列的输入。
  • 传统的运动预测方法都是非线性的,如马尔可夫模型、高斯过程动力学模型,和受限玻尔兹曼机。
  • 这些方法已被证明可以有效地预测简单的运动,但最终难以预测复杂和长期的运动。
  • 随着深度学习时代的到来,使用深度网络进行人体运动预测取得了巨大的成功,其中包括递归神经网络(Recurrent Neural networks, RNN),图卷积网络(Graph Convolutional networks, GCNs)和Transformers,这是本节的主要重点。

2.1 基于RNN的人体运动预测

  • 由于人体运动固有的顺序结构,一些工作解决了三维人体运动预测的循环模型。
  • 然而,该类方法受到RNN的多重固有限制。
  • 首先,RNN作为一个序列模型,在训练和推理过程中很难并行化。
  • 其次,内存约束阻止RNN从更远的帧探索信息。
  • 一些研究通过使用RNN变体、滑动窗口、卷积模型或对抗性训练来缓解这一问题。但是它们的网络仍然是复杂的,并且有大量的参数。

2.2 基于GCN的人体运动预测

  • 为了更好地编码人体关节的空间连通性,最近的工作通常是构建人体姿态为图(graph),采用图卷积网络(graph Convolutional Networks, GCNs)进行人体运动预测。

2.3 基于 Attention 的人类运动预测

  • 随着transformers的发展,一些作品试图用 Attention 机制来处理这一任务。

2.4 总结

  • 综上所述,随着近年来人体运动预测的发展,基于RNN/GCN/Transformer 的结构得到了很好的探索,结果得到了显著改善。
  • 虽然这些方法提供了良好的效果,但它们的架构变得越来越复杂和难以训练。
  • 在本文中,我们坚持简单的架构,并提出了一个基于MLP的网络
  • 我们希望我们的简单方法可以作为一个baseline,让社区重新思考人体运动预测的问题。

3. siMLPe

  • 在本节中,我们将阐述问题,并在3.1节中给出DCT变换的公式,在3.2节中给出网络架构的细节,在3.3节中给出我们用于训练的损失。
  • 给定过去的3D人体姿势序列,我们的目标是预测未来的姿势序列。
  • 我们将观察到的三维人体姿势表示为 x_1:T ∈ RT×C,由 T 个连续的人体姿势组成,其中第 t 帧 x_t 处的姿势用 C 维向量表示,即:x_t∈ RC
  • 在本工作中,与之前的工作相似,x_t 为第 t 帧节点的三维坐标,C = 3 × K,其中 K 为节点个数。
  • 我们的任务是预测未来 N 个运动帧: x_T +1:T +N ∈RN×C

3.1 离散余弦变换(Discrete Cosine Transform (DCT))

  • 我们采用DCT变换对时间信息进行编码
  • 更精确地说,给定 T 帧的输入运动序列,DCT矩阵 D∈RT×T可以计算为:
    在这里插入图片描述
    其中δ_i,j表示Kronecker函数, δ_i,j 为:
    在这里插入图片描述
  • 离散余弦变换后的输入是:D(x_1:T) = Dx_1:T。
  • 我们应用**反向离散余弦变换(IDCT)**将网络的输出转换回原始姿态表示,表示为D-1和D的逆。

3.2 网络架构

  • 图2显示了我们网络的体系结构。我们的网络只包含三个组成部分: 全连接层、转置操作、层归一化
  • 对于所有的全连通层,它们的输入维数等于输出维数。
  • 形式上,给定一个三维人体姿势的输入序列 x_1:T ∈RT×C,我们的网络预测一个未来的姿势序列x_T+1:T+N ∈ RN×C:
    在这里插入图片描述
    F 表示我们的网络。
  • DCT变换后,我们应用一个全连接层,只对变换后的运动序列 D(x_1:T)∈RT×C空间维度进行操作:
    在这里插入图片描述
    其中z0∈RT×C为全连通层的输出。W0∈RC×C, b0∈RC表示全连通层的可学习参数。
  • 在实践中,这相当于对一个全连接层应用转置操作,然后将输出特征转置回去,如图2所示。
  • 然后,引入一系列 m 块,仅在时间维度上操作,即仅跨帧合并信息。
  • 每个块由一个全连接层组成,然后进行层规范化,表示为:
    在这里插入图片描述
    式中,zi∈RT×C, i∈[1,…, m] 表示第 i 个MLP块的输出。
    LN表示层归一化操作。
    Wi∈RT×T和 bi∈RT是第 i 个MLP块中全连通层的可学习参数。
  • 最后,与第一个全连接层类似,我们在MLP块之后再添加一个全连接层,只对特征的空间维度进行操作,然后应用IDCT变换得到预测结果:
    在这里插入图片描述
    其中W_m+1和 b_m+1是最后一个全连接层的可学习参数。
  • 注意长度 T 和 N 不需要相等当T > N时,我们只取预测的N个前帧,在T < N的情况下,我们可以通过重复最后一帧将输入序列填充到N。

3.3 Losses

  • 正如第1节中提到的,如图1所示,最后一个输入姿势与未来的姿势 “接近”。
  • 通过这种观察,我们让网络预测未来姿态 x_T+t 和最后输入姿态 x_T 之间的残差,而不是从头开始预测绝对3D姿态。 这简化了学习并提高了性能。

目标函数

  • 我们的目标函数 L 包括两项 Lre 和 Lv:
    在这里插入图片描述
  • Lre的目标是最小化预测运动 x_T+1:T+N 和真实运动x_T+1:T+N 之间的 L2 范数:
    在这里插入图片描述
  • Lv 的目的是最小化预测运动速度 v_T+1:T+N 与地面真实速度 vT+1:T+N之间的 L2 范数:
    在这里插入图片描述
    式中 v_T+1:T+N ∈RN×C, v_T表示第 t 帧的速度,用时间差计算: v_T = x_t+1−x_t。

4. 实验

4.1 数据集

  • Human3.6M
    Human3.6M包含7个演员表演15个动作,每个姿势标记32个关节。
    我们遵循测试协议,使用S5作为测试集,S11作为验证集,其他作为训练集。
    以前的工作使用了不同的测试采样策略,包括每个动作8个样本,每个动作256个样本或测试集中的所有样本。
    由于8个样本太少,取所有的测试样本无法平衡不同序列长度的不同动作,因此我们每个动作取256个样本进行测试,并在22个关节上进行评估。
  • AMASS
    AMASS是多个动作捕捉数据集的集合,使用统一的SMPL参数化。
    我们使用AMASS- bmlrub作为测试集,并将AMASS数据集的其余部分分成训练集和验证集。
    模型在18个关节上进行了验证。
  • 3DPW
    3DPW是一个包含室内和室外场景的数据集。
    一个姿势由26个关节表示,我们使用在AMASS上训练的模型评估18个关节来评估泛化。

4.2 评价指标

  • 本文使用三维关节坐标上的平均关节位置误差(Mean Per Joint Position Error,MPJPE)作为评价指标。这是评估3D姿态误差最广泛使用的指标。
  • 该度量计算预测和真实之间不同节点的平均L2 -范数。
  • 与之前的工作相似,我们忽略了姿态的全局旋转和平移,保持采样率为 25 FPS 的所有数据集。

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

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

相关文章

使用go获取链上数据之主动拉取-连接数据库

上一篇文章&#xff0c;我们完成了基础环境的搭建&#xff0c;并通过viper完成了配置文件的读取&#xff0c;本章&#xff0c;我们将要完成使用gorm连接数据库&#xff0c;并插入一条数据 1、配置数据库连接 1.1、新建db.go 对数据库的操作&#xff0c;我们使用的是gorm类库&…

个人理解Java的浅克隆与深克隆

浅克隆 浅克隆只会克隆基本数据属性&#xff0c;而不会克隆引用其他对象的属性&#xff0c;String类型除外。&#xff08;String对象是不可修改的对象&#xff0c;每次修改其实都是新建一个新的对象&#xff0c;而不是在原有的对象上修改&#xff0c;所以当修改String属性时其…

vue2.7如何使用vue-i18n

版本&#xff1a; vue&#xff1a;2.7.0 vue-i18n&#xff1a;8.28.2 一、下载 npm i vue-i18n8.28.2二、新建 新建一个文件&#xff0c;例如&#xff1a;lang&#xff0c;项目结构如下&#xff1a; index.js&#xff1a; import Vue from vue import VueI18n from vue-i18n…

函数的递归

1、什么是递归&#xff1f; 程序调用自身的编程技巧称为递归。 递归作为一种算法在程序设计语言中广泛应用。一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解&#x…

最强自动化测试框架Playwright-操作指南(3)-PO模式

playwright支持PO模式 创建页面对象 class SearchPage:def __init__(self, page):self.page pageself.search_term_input page.get_by_role("searchbox", name"输入搜索词")def navigate(self):self.page.goto("https://bing.com")def searc…

《人脸识别技术应用安全管理规定(征求意见稿)》,需要关注三个焦点

目录 严防人脸信息采集与滥用 规范人脸识别信息的处理 保障人脸识别技术的安全 人脸识别主要有三类风险 近日&#xff0c;国家互联网信息办公室发布《人脸识别技术应用安全管理规定&#xff08;试行&#xff09;&#xff08;征求意见稿&#xff09;》公开征求意见的通知。 …

甄品焕新|燕千云服务请求预警功能上线,燕小千AIGC能力再升级

​ 燕千云数智化业务服务平台发布了1.23.0版本&#xff0c;此次版本上线了服务请求预警功能&#xff0c;增加呼叫中心服务场景中的通话质检功能&#xff0c;提高了企业IT服务效率。此次还升级了燕小千AIGC能力&#xff0c;不仅可以实时预估文档学习时间&#xff0c;还可以一键分…

multi-head_seft-attention(多头自注意力)

对比 相比于single-head&#xff0c;multi-head就是将 q i q^i qi分成了 h h h份 multi-head_seft-attention的计算过程 将 q i q^i qi分成了 h h h份 计算过程 对于每个Head&#xff0c;我们可以提取出他的 b 11 b_{11} b11​到 b m 1 b_{m1} bm1​&#xff0c;以 H e…

Spring 事务管理

目录 1. 事务管理 1.1. Spring框架的事务支持模型的优势 1.1.1. 全局事务 1.1.2. 本地事务 1.1.3. Spring框架的一致化编程模型 1.2. 了解Spring框架的事务抽象&#xff08;Transaction Abstraction&#xff09; 1.2.1. Hibernate 事务设置 1.3. 用事务同步资源 1.3.1…

第十四届中国大学生服务外包大赛圆满落幕,合合信息助力人才发展消除市场“信息差”

老年人存在记账难题&#xff0c;如何通过技术手段处理&#xff1f;已经上线多年的软件产品&#xff0c;如何优化才能更符合现代人群的“胃口”&#xff1f;这些微小却关键的问题颇具社会价值&#xff0c;青年学子们的参与或许能够打开新的产品构建维度。 近日&#xff0c;“中…

Golang struct 结构体指针类型 / 结构体值类型

struct类型的内存分配机制 结构体变量之间的赋值是值拷贝。 type stu struct {Name stringSlice []stringMap1 map[string]string }func main() {s : stu{}s.Slice make([]string, 6)s.Slice[1] "ssss"s.Slice[2] "xxxx"s.Map1 make(map[string]stri…

必备 | SQL语句的封装操作大全

在封装SQL语句之前&#xff0c;我们得知道什么是DAO封装与实体类以及JDBC工具类的封装与连接数据库的具体流程。 封装SQL语句的好处&#xff1a; 封装SQL语句后就可以导包&#xff0c;给其他的工程使用&#xff0c;大大降低开发的强度&#xff0c;减少代码的冗余。如何导包给…

MFC第二十九天 CView类的分支(以及其派生类的功能)、MFC六大关键技术

文章目录 CView类的分支CEditViewCHtmlViewMainFrm.h CMainFrame 类的接口CMainView .h CListCtrl与CListView的创建原理 CTreeViewCTreeCtrl类简介CTreeCtrl类的原理以及常用功能 MFC六大关键技术视图和带分割栏的框架开发与消息路由CLeftView.cppCRightView.hCRightView.cppC…

Linux入门级命令

目录 1、开启终端 2、Linux命令格式 3、扩展&#xff1a;Linux下的命令补全 4、切换用户 5、uname命令 6、ls命令 ☆ 用法一 ☆ 用法二 ☆ 用法三 7、pwd命令 8、cd命令 9、clear命令 10、reboot命令 11、shutdown命令 12、type命令 13、history命令 14、host…

【学习】若依源码(前后端分离版)之 “ 分页以及查询的功能实现”

大型纪录片&#xff1a;学习若依源码&#xff08;前后端分离版&#xff09;之 “ 分页以及查询的功能实现” 前端部分后端部分结语 包括代码生成也好&#xff0c;最原始的系统也好&#xff0c;若依里每个页面只要有数据&#xff0c;基本上就有分页的功能&#xff0c;所以理解分…

背上大书包准备run之CSS篇

时隔一年多又要准备面试嘞。唉&#xff0c;人生呐&#xff0c;真是变幻莫测哟~ 社招应该不会问很多css吧&#xff0c;&#xff0c;&#xff0c;但是应该也会问吧&#xff0c;&#xff0c;&#xff0c;应该是从好多好多问题里只抽一两个问问吧&#x1f62d; 哦还有h5&#xff…

zabbix简易入门:基本的网络监控、WEB监控、拓朴图规划

需求背景&#xff1a; 我们越来越发现&#xff1a;网络越来越复杂&#xff0c;网络、应用、云端……故障点随时可能发生&#xff0c;而我们不能人工盯着所有的问题&#xff0c;所以&#xff0c;网管软件是必须的。那么没有预算的情况下&#xff0c;我们只好自己布署简单的…

24届近5年浙江工业大学自动化考研院校分析

今天给大家带来的是浙江工业大学控制考研分析 满满干货&#xff5e;还不快快点赞收藏 一、浙江工业大学 学校简介 浙江工业大学&#xff08;Zhejiang University of Technology&#xff09;&#xff0c;简称浙工大&#xff0c;主校区位于浙江省杭州市&#xff0c;是教育部与…

Stream API总结

Stream是Java 8提供的新特性&#xff0c;使得可以方便的对集合进行各种操作&#xff0c;本篇主要讲解StreamAPI常用方法。 Java8中有两大最为重要的改变。 第一个是 Lambda 表达式&#xff1b; 另外一个则是 Stream API(java.util.stream.*)。 Stream 是 Java8 中处理集合的关…

Java反射机制详解与使用方法大全!!!

❤ 作者主页&#xff1a;李奕赫揍小邰的博客 ❀ 个人介绍&#xff1a;大家好&#xff0c;我是李奕赫&#xff01;(&#xffe3;▽&#xffe3;)~* &#x1f34a; 记得点赞、收藏、评论⭐️⭐️⭐️ &#x1f4e3; 认真学习!!!&#x1f389;&#x1f389; 文章目录 Java反射机制…