FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解

2023-05-16

ICCV Workshop 2021.

Facebook AI research

Btw, why the name FrankMocap? Our pipeline to integrate body and hand modules reminds us of Frankenstein's monster!

读后感:

  1.  可以认为这个文章主要解决手部预测的精度。当你的需求为要求脸部,身体,手部都准确,可以参考一下这个网络,但是显然相比端到端,这个有点费网络。
  2. 这篇论文更多可以看作一篇侧重方案解决文章,提出如何更好的输出一个SMPL-X效果,作者认为直接端到端训练SMPL-X(ExPose),人脸,身体,手部联合训练会相互影响,因此作者将这三个模块单独训练,最终进行整合,人脸是基于Flame模型训练,因此整合阶段直接复制脸部形状参数和下巴的姿态。身体则基于SPIN进行微调。手部模块则是稍做改变,没有直接采用MANO模型,而是用SMPL-X的手部相关参数,同时增加一个手腕全局姿态。因此最终整合阶段主要整合的就是将手部输出的全局手腕点转换到身体的局部手腕点上。这里就存在一个问题,在图像空间角度,手部模块输出的手相比身体模块输出的手更加准确,同时各个手指也更加精准,但是在手腕pose角度,手部模块输出的手腕是一个全局pose,而身体模块输出的手腕一个局部pose,显然身体模块输出的pose会更加准确点。因此需要去获取这两个优点。
  3. 手腕整合方案:一共三个方案,第一个就是简单将手模块输出的手腕pose,各个手指关节的pose去转化到身体模块上,这样提高了身体手部的pose精度。但是第一个方案忽略了图像空间位置的准确性,也就是贴合度,因此方案二设计了一个迭代优化的方法,继续fintune训练整合后的SMPL-X模型,使手部模块输出的mesh和 2d点以及3d点(EFT里面的先验策略),形状先验作为监督信息使得手部贴合度提升。但是方案二这种迭代方案耗时,因此提出了方案三,即通过网络替换迭代,通过方案二构建训练集,输入为方案1整合的到的肩部pose,手腕pose,以及手部模块输出的手腕点与整合后的手腕点之间的位移,输出则是调整后的肩部pose和手腕pose。
  4. 从这个文章可以学到的: 对于手部预测,作者对于数据增强和数据混合做了多个实验,可以发现对数据进行运动模糊增强,有利于手部效果,另外对于不同数据集,需要进行协议同意处理。对于SPIN 网络,作者采用EFT数据进行fintune训练。

    效果秀一波:

简要概述全文:

       大多数现有的单目3D姿势估计方法只关注单个身体部位,忽视了人类运动的本质细微差别是通过脸部、手和身体的微妙运动来传达的。在本文中,我们提出了FrankMocap,一个快速和准确的全身三维姿态估计系统,可以从野外单目图像同时生成三维脸、手和身体。FrankMocap的理念是它的模块化设计:我们首先独立运行面部、手部和身体的3D姿态回归方法,然后通过集成模块组合回归输出。独立的回归模块允许我们充分利用其最先进的性能,而不损害原来的准确性和可靠性在实践中。我们开发了三个不同的集成模块来权衡延迟和准确性。他们都能够提供简单而有效的解决方案,统一独立的输出-放入无缝的全身姿态估计结果。我们从定量和定性的角度证明了我们的模块化系统优于基于优化和端到端的全身姿态估计方法。代码、模型和演示视频已公布。

        然而,估计整个身体的3D姿势,包括脸和手,仍然是一个挑战。其中一个主要的困难来自于脸和手的尺寸远小于躯干和四肢的尺寸。此外,在运动中的手容易受到由突然的视点变化、自我遮挡和运动模糊造成的伪影。这些因素极大地增加了用全身3D姿势创建大规模数据集的难度。缺乏全身三维数据是阻碍建立统一的全身三维姿态同时估计系统的主要障碍。我们的系统建立在这样一种认识之上:训练一个单一的模型来联合估计整个部分本质上是受到缺乏准确和多样化的全身运动数据的限制的。相反,我们设计了一个模块化的系统,首先独立运行面部、手部和身体的三维姿态回归方法。然后通过集成模块组合这三个回归输出。

   三维参数化人体模型被广泛使用,它是估计人体三维姿态和形状的有力先验。其主要思想是通过低维参数对三维人体(包括脸、手和身体)的变形进行建模  。SCAPE-》SMPL-〉SMPL-X等,本文最终合并的模型为SMPL-X。

第一步:定义全身的模型和独立的手部模型

Whole-Body Parameterization

采用SMPL-X的参数表示方法: 依次为1*3的global pose,52*3的全身各个关节的pose(21 * 3的身体pose,15 * 3的左手各个手关节,15 *3的右手各个手关节,1 *3 的下巴pose),10 *1 的身体形状参数,10*1 的面部表情参数。所有的pose姿态参数都定义在轴-角表示中,它存储了在运动学映射中定义的父关节的相对旋转。作为输出,SMPL-X最终会输出一个10475*3的网格,通过一个角度回归矩阵是可以从这个网格中获取相应的各个关节点的3D坐标。

Stand-Alone Hand Model:作者基于SMPL-X定义了一个关于单个手的模型参数表示,参数依次为,1*3的手部全局pose,15 *3的手的各个手关节的pose(5个手指,每一个手指三个关节),1*10的手部形状参数(和身体的shape参数一致)。这样通过这个手的参数模型,可以获得一个778*3的mesh输出,通过一个3D手部回归矩阵,可以得到一个21*3的3D关节坐标,依次包含手腕,5个手指的三个关节,5个手指尖。我们的手部表示的主要优点是,这个3D手部模型的组件,包括姿态参数、顶点和3D关节,直接与全身参数兼容。这使我们能够有效地集成来自身体模块和手模块的输出。

第二步:依次完成手部,身体,脸部的姿态估计

2.1 手部模块估计:

       输入为裁剪好的局部手掌区域,对于左手会进行额外的处理,左手的图像首先被翻转和处理成和右手一样,输出的结果会逆向回到左手的表示空间。整个训练框架参考HMR,通过resnet-50进行特征提取,然后采用多层全连接来进行参数回归参数。基于SMPL-X可以得到21*3的3D手部关节坐标,通过学习到的正交投影参数s和t,得到关于手部的2d坐标。训练细节:一共存在三种标注信息,一种是fitting的到的smpl-x参数,一种是采集得到的真实空间的3d点,一种是2d点。这样训练过程中存在三种loss。特别地,2D关键点损失被用来估计相机参数,并便于手模块推广到只有2D关键点注释的野外成像。关于shape的监督,我们在使用FreiHAND数据集的时候,不使用其提供的shape参数,因为这些是为MANO模型[58]定义的,与SMPL-X中的手模型不兼容(SMPL-X应该是提供了转换机制)。

         

1 通过随机缩放、平移、旋转、颜色抖动和合成运动模糊对每个训练图像进行数据增强。

2  针对不同数据集的协议存在不一致问题:缩放所有3D关键点注释,以兼容我们的手模型,通过使用中指的关节长度作为参考。(2)重新排序3D关键点,使之与我们的手模型的骨架层次相同。

3  手模块的输入图像是围绕手的中心裁剪,其中用于裁剪的边界框是由2D手关键点给出的。

4  采用学习率为1e4的亚当优化器[35]对模型进行训练。手模被训练到收敛,大约需要100个纪元。

5.数据集方面:一共使用了6个数据集,其中MPII+NZSL仅作为验证集。

6  实验数据:数据真香,前提是数据协议使用得体。

2.2 身体模块估计:

      选择SPIN框架,训练则是基于SPIN训练好的模型进行fintune,finetune过程不采用SMPL来输出结果,而是采用SMPLX输出,,finetune过程采用的是EFT数据和HM3.6,在微调过程中,我们只使用标注的位姿参数和2D关键点,不实用shape参数(即使SMPL和SMPL- x的三维关节位置不完全相同,我们发现这种区别在实践中不是很明显)

2.3 3D人脸估计模块

      这里直接使用基于FLAME模型的RingNet网络来估计脸部表情和人脸姿态。

2.4 整个身体整合模块

我们的集成模块将来自面部、手部和身体模块的输出组合成SMPL-X[56]的统一表示。其中脸部的输出模块可以很容易地应用到SMPL-X,直接复制表情参数和下巴pose即可, 关于手和身体因为都有手腕的pose输出,因此需要对这里进行一个处理。针对这一目标,我们提出了三种策略:(1)简单的复制-粘贴合成以获得最快的处理速度,(2)采用优化框架,(3)通过集成网络逼近简单神经网络的优化。

方案一:粘贴复制,对于身体,手腕只是一个局部关节点,对于手,手腕则是去全局pose。因此考虑见手部估计得到的全局pose转为相对于身体的局部pose。那么这个转化怎么实现,可以对比当前身体估计出的手腕pose和手掌估计出的手腕全局pose。这是可以通过遵循身体骨架层次结构的正向运动学来计算。这种策略几乎不需要额外的计算,使我们的sep- arate模块同时提供一个共同的全身模型。我们发现这种简单的集成可以产生令人信服的结果,特别是对于我们的现场演示中存在计算瓶颈的场景。

方案二:优化方法,作为一种提高精度的替代集成方法,我们建立了一个优化框架来拟合身体和手模块输出的整体模型参数。这个策略是特别有帮助的,以减少围绕手腕部分的人工制品,而不是复制粘贴策略。它还可以利用二维关键点估计输出[13],以获得更好的二维定位质量。我们的优化框架找到了最小化以下目标代价函数的整体模型参数。

其中2D点是人脸,身体,手的2d loss,mesh则是手部检测得到的网格和身体模块输出的手部网格之间的loss。先验loss则是确保产生的3d pose和 shape符合正常的人体运动学。这里使用先验loss原则和eft里面使用的差不多,3d pose使用其他网络输出的。因此这里先验只考虑形状的监督。在优化的时候,采用多个阶段,第一个阶段没有F_mesh的监督,第二个阶段会增加一个额外的约束即输出的3d点维持第一阶段的位置上。

方案三:手腕整合网络:

手模块的结果显示了精确的二维定位质量,如图6所示。但是,由于手腕关节的位置是由身体模块决定的,因此采用复制-粘贴集成策略会降低其精度,如图5(倒数第二列)所示。虽然优化方法可以达到较好的精度,解决这一问题,但由于需要迭代梯度计算,计算速度相对较慢。作为另一种实现精度和快速运行性能的替代策略,我们引入了一个集成网络,在不进行梯度计算的情况下,将整个身体模型的手臂姿态调整到给定的2D位置。具体来说,我们开发了一个小型神经网络来实现这一点。

可以发现手部模块输出的mesh与原图的贴合度很好,但是讲手掌整合到全身后,贴合度就会变差,手腕集成网络的作用是调整手臂的姿态,将手移动到手模块所确定的位置。因此可以认为手模块预测的位置上正确的,将手模块输出的手pose转接到身体模块会导致手部贴合度下降,希望通过调整肩膀和手肘的pose来影响手腕的空间位置。因此手腕整合网络的输入为关于整个手臂的pose和一个二维向量,这个二维向量是计算手部输出的手腕2d点和整合后的手腕2d点之间的图像空间位移关系,并且给予手臂长度进行归一化。整个手臂pose为复制粘贴集成后肘关节和肩关节的位姿参数。因此可以理解增加了一个手臂网络模块。原始的肩位姿θsw和肘位姿θew均为人体骨骼运动学中定义的相对于其参数的局部旋转。为了简化腕部整合网络的训练,我们将肩部姿态转换为全局姿态φsw,这样腕部整合网络就不需要考虑身体其他部位的姿态。肘部的姿势保持为局部旋转。这样输入为全局的肩关节和局部手肘关节,以及手腕位移向量。输出则是认为正确的全局的肩关节和局部手肘关节。

为了训练这个网络,生成了对应的数据集,即通过比较耗时的方案2生成伪标签,这样构建了训练集,这是一种常见的手法,通过网络来替代耗时的迭代方案。

4.实验:

1.我们首先展示了我们的手部模块的高性能,与之前最先进的3D手部方法相竞争,以及消融研究,以检验我们的方法的设计。然后,我们证明了我们的全身姿势估计方法优于之前的方法在公共基准。

2 我们的body模块可与以前的先进水平相媲美,包括ExPose[18]。我们的身体模型是一个微调版本的SPIN[37]和EFT[30]。略微下降的性能可能是由于我们只使用较少的数据集,COCO和Human3.6M数据集。我们只比较了基于HMR[33]的方法。我们认为,如表3所示的实验结果可以证明,将以往基于smpl的方法扩展到基于SMPL-X的body模块是可行的。由于我们的模块化设计,我们也可以轻松地利用最新的3D身体。

3.整合模块的验证:通过对FrankMocap不同版本的比较发现,经过优化的模型总体上取得了最好的性能。应用我们的手腕集成网络还可以带来比复制粘贴版本更好的性能。我们还在图8中提供了不同集成模型之间的定性比较。结果表明,采用腕部集成网络可以获得更好的手部定位,而采用优化算法则可以进一步改善手部定位

 CSDN: @为什么先生2012

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解 的相关文章

随机推荐

  • 【SOEM主站】一、SOEM主站环境搭建及连接板子测试

    目的 xff1a 在windows环境下搭建SOEM主站 xff0c 并利用SOEM自带例程测试EtherCAT板子从站板通讯效果 1 SOEM主站环境搭建 xff08 1 xff09 安装VS xff1a 我这里安装的是VS2017 xf
  • 【EtherCAT实践篇】七、更改XML示例2,增加16位模拟输入

    目的 xff1a 在EtherCAT开发板上IO程序基础上增加一个16位的变量mytest xff0c 用于传输模拟量发送给主站 1 EtherCAT增加变量说明 在实际使用中 xff0c 可现有程序的输入输出变量可能不能直接满足实际需求
  • 【EtherCAT实践篇】八、更改XML示例3,增加16位模拟DAC输出

    目的 xff1a 在EtherCAT开发板上IO程序 xff08 基本IO通讯 基于SSC xff09 基础上进行修改 xff0c 增加一路模拟量输出 xff0c 并输出给DAC管脚 由于STM32F405底板具有DAC输出功能 xff0c
  • Pixhawk固件PX4之串口通讯

    1 目的 为进一步扩展pixhawk的接口及功能 xff0c 通过pixhawk现有接口 xff08 串口 I2C等 xff09 连接外部设备来实现 xff0c 本节内容主要介绍串口通讯方式 2 测试平台 硬件 xff1a pixhawk
  • 手机充电原理分析及问题总结

    xff08 1 xff09 充电流程介绍 xff1a 当充电器插入时 xff0c 亦即为PMIC充电模块提供了Vcharge电压 xff0c 这时会产生一个充电中断信号到CPU xff0c 通知CPU现在已经进入充电状态 CPU开始启动如下
  • 串口接收不定长数据的几种方法

    串口作为单片机开发的一个常用的外设 xff0c 应用范围非常广 大部分时候 xff0c 串口需要接收处理的数据长度是不定的 那么怎么才能判断一帧数据是否结束呢 xff0c 今天就以STM32单片机为例 xff0c 介绍几种接收不定长数据的方
  • 删除分节符的技巧

    WORD中删除分节符有这样的规定 xff1a 如果要删除分节符 xff0c 只要把光标移动到该分节符上 xff0c 按Delete键即可 但是要注意该分节符前面的文字将合并到后面的节中 xff0c 并且采用后者的格式设置 我就不知道天杀的微
  • 虚机创建异常报错No valid host was found,There are not enough hosts available

    虚机创建异常 xff0c 使用nova show 虚机ID提示fault报错信息 xff1a No valid host was found xff0c There are not enough hosts available 检查所在宿主
  • vuzzer 具体原理解析

    目录 1 安装 vmware 15 01环境下安装 xff1a 2 vuzzer使用说明 3 vuzzer原理 3 1权重文件以及有着cmp信息的文件生成 3 2 vuzzer种子生成 xff0c 变异原理 3 2 1 runfuzz py
  • C++ unordered_set

    目录 1 定义 2 基本的函数 2 1 unordered set构造 2 2 添加新的元素 注意无法插入相同元素 2 3 查找元素 2 4 查找桶接口 2 5 观察器 2 6 清除元素 2 7 其他函数 1 定义 unordered se
  • clang 10 介绍——sanitizerCoverage

    1 Introduction llvm内置了一个简单的代码覆盖率检测 xff08 sanitizercoverage xff09 它在函数级 基本块级和边缘级插入对用户定义函数的调用 提供了这些回调的默认实现 xff0c 并实现了简单的覆盖
  • C++ 匿名函数

    1 定义 所谓匿名函数 xff0c 其实类似于python中的lambda函数 xff0c 其实就是没有名字的函数 使用匿名函数 xff0c 可以免去函数的声明和定义 这样匿名函数仅在调用函数的时候才会创建函数对象 xff0c 而调用结束后
  • 给docker中的ubuntu系统安装桌面程序

    原本服务器是centos的 xff0c 用的不是很习惯 xff0c 也为了可以分割功能 xff0c 于是在服务器上装了docker xff0c docker里装了ubuntu系统 xff0c 具体过程可以参见https blog csdn
  • 陇剑杯 2021 write up整理

    竞赛 write up 收集和整理 陇剑杯 2021 write up整理1 签到题1 1 2 JWT2 12 22 32 42 52 6 3 webshell3 13 23 33 43 53 63 7 4 日志分析4 14 24 3 5
  • PBCTF2021

    PBCTF2021 1 MISC1 1 幽灵作家 Ghost Writer 2 Crypto2 1 Alkaloid Stream2 2 Steroid Stream2 3 good hash 1 MISC 1 1 幽灵作家 Ghost W
  • ASISCTF

    warm up 题目代码如下图所示 xff0c 我们会发现整个加密过程如下所示 xff0c 先在flag后面加上p长度的随机字符 xff0c 然后选择pow s i p 的结果选择字符重新连接字符串实现加密 usr bin env pyth
  • burpsuite简介

    1 burpsuite简介 burpsuite作为web渗透较为常用的软件 xff0c 有着9个比较常用的模块 proxy xff0c target xff0c intruder xff0c comparer xff0c repeater
  • libFuzzer

    目录 1 概述 2 版本 3 Fuzz Target 4 Fuzzer Usage 5 Corpus 6 Running 7 Parallel Fuzzing 8 Fork mode 9 Resuming merge 10 Options
  • linux virsh console无法登入虚拟机,宿主机virsh console 登录异常

    创建虚机后在宿主机上通过virsh console 登录不进去 xff0c 一直卡在登录界面 xff08 可以通过命名空间ssh登录 xff0c 排除用户名及密码问题 xff09 原因是相关配置文件没有添加 xff0c 可以通过以下方法进行
  • FrankMocap:A Monocular 3D Whole-Body Pose Estimation System via Regression and Integration 2021阅读理解

    ICCV Workshop 2021 Facebook AI research Btw why the name FrankMocap Our pipeline to integrate body and hand modules remi