FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

2023-05-16

paper title: FrankMocap:Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion
paper link:https://arxiv.org/abs/2008.08324
oral or demo video:https://www.youtube.com/watch?v=HXTK5ro9kGc
project: -
github: https://github.com/facebookresearch/frankmocap
conf & anthor: arXiv, Yu Rong(CUHK & FAIR) et al;
arXiv submit v1:2020.08

主要内容

当前的单目姿态估计方法要么是仅关注身体动作,忽略了手部的动作;要么是仅关注手部的姿态而不考虑身体的姿态。这篇文章提出一个可以在自然环境中同时捕捉身体和手部的3D姿态的系统,称为frankmocap,速度较快,可以达到9.5fps。(在Ubuntu18.04,RTX2080Ti上实测单人bodyMocap约6fps)。

方法流程

FrankMocap使用两个回归模块从单张RGB图像中分别预测身体和手部的姿态,然后得到的结果有一个整合模块生成全身的3D姿态结果。如下图所示:
overview frankmocap
1. SMPL-X
SMPL-X模型是SMPL模型的一个扩展,可以通过低维度的pose和shape的组合,得到人体的形状变化和姿态相关的变形表示。相比于SMPL,SMPL-X除了身体之外,还可以通过增加额外的参数,实现手指和表情的表示。
如果SMPL-X的模型为 S S S,那么输入姿态相关的参数,可以得到变形的结果:
M w = S ( ϕ w , θ w , β w ) M_{w} = S(\phi_{w},\theta_{w},\beta_{w}) Mw=S(ϕw,θw,βw)
其中:

  • ϕ w ∈ R 3 \phi_{w} \in R^{3} ϕwR3为全身的朝向参数;
  • θ w ∈ R ( 21 + 15 + 15 ) X 3 \theta_{w} \in R^{(21+15+15)X3} θwR(21+15+15)X3是身体和左右手的pose-dependent变形,21为身体的关节数目,15是一只手的关节数目;
  • β w \beta_{w} βw是shape参数;
  • M w ∈ R 10475 X 3 M_{w} \in R^{10475X3} MwR10475X3是SMPL-X得到的变形后的顶点信息;
    得到 M w M_{w} Mw后,可以通过关节点位置回归函数 R R R得到3D关节点位置:
    J w 3 D = R w ( M w ) J^{3D}_{w} = R_{w}(M_{w}) Jw3D=Rw(Mw)
    其中 J w 3 D ∈ R ( 22 + 15 + 15 ) X 3 J^{3D}_{w} \in R^{(22+15+15)X3} Jw3DR(22+15+15)X3

对于手部模型也是如此:
M h = H ( ϕ h , θ h , β h ) M_{h} = H(\phi_{h},\theta_{h},\beta_{h}) Mh=H(ϕh,θh,βh)
其中 M h ∈ R 778 X 3 M_{h} \in R^{778X3} MhR778X3。同样可以使用关节点回归函数得到手指的关节点的3D位置。
J h 3 D = R h ( M h ) J^{3D}_{h} = R_{h}(M_{h}) Jh3D=Rh(Mh)
其中 J h 3 D ∈ R 21 X 3 J^{3D}_{h} \in R^{21X3} Jh3DR21X3,包括一个手腕点,15个手指关节点和5个指尖点。手部和身体的采用相同的表示方式,在最后整合输出全身的结果的时候比较方便。

2. 3D手部姿态估计模块
文章使用端到端的网络结构实现手部姿态估计,形式如下:
[ ϕ h , θ h , β h , c h ] = M H ( I H ) [\phi_{h},\theta_{h},\beta_{h},c_{h}] = M_{H}(I_{H}) [ϕh,θh,βh,ch]=MH(IH)
其中:

  • I H I_{H} IH为从输入图像上裁剪出的手部图片;
  • c h = ( t h , s h ) c_{h} = (t_{h},s_{h}) ch=(th,sh)是相机的2D平移信息和缩放因子;
  • θ h , β h \theta_{h},\beta_{h} θh,βh分别是SMPL模型的pose和shape参数;
    有了 t h , s h t_{h},s_{h} th,sh,3D个2D关节点位置之间的关系可以表示为:
    J h , j 2 D = s h Π ( J h , j 3 D ) + t h J^{2D}_{h,j} = s_{h}\Pi(J^{3D}_{h,j})+t_{h} Jh,j2D=shΠ(Jh,j3D)+th
    其中 Π \Pi Π表示正交投影。

手部姿态估计的网络结构与身体的一致,也是采用encoder-decoder 的结构,encoder使用ResNet-50,decoder使用全连接网络。在模型训练的时候,将左手的图像全部镜像为右手后进行训练,测试的时候,对于左右也是先镜像为右手,然后模型推理得到结果,在变换为左手的姿态。
损失函数方面,主要考虑三种:姿态误差,3D位置误差,2D位置误差以及一个正则项,如下:
L θ = ∣ ∣ θ h − θ ^ h ∣ ∣ 2 2 L 3 D = ∣ ∣ J h 3 D − J ^ h 3 D ∣ ∣ 2 2 L 2 D = ∣ ∣ J h 2 D − J ^ h 2 D ∣ ∣ L r e g = ∣ ∣ β h ∣ ∣ 2 2 L_{\theta} = ||\theta_{h}-\hat{\theta}_{h}||^{2}_{2} \\ L_{3D} = ||J^{3D}_{h}-\hat{J}^{3D}_{h}||^{2}_{2} \\ L_{2D} = ||J^{2D}_{h}-\hat{J}^{2D}_{h}|| \\ L_{reg} = ||\beta_{h}||^{2}_{2} Lθ=θhθ^h22L3D=Jh3DJ^h3D22L2D=Jh2DJ^h2DLreg=βh22
其中 θ ^ h \hat{\theta}_{h} θ^h, J ^ h 3 D \hat{J}^{3D}_{h} J^h3D J ^ h 2 D \hat{J}^{2D}_{h} J^h2D分别是姿态角度、3D关节点位置和2D关节点位置的groundtruth。最后loss的形式为:
L = λ 1 L θ + λ 2 L 3 D + λ 3 L 2 D + λ 4 L r e g L = \lambda_{1}L_{\theta} + \lambda_{2}L_{3D} + \lambda_{3}L_{2D} + \lambda_{4}L_{reg} L=λ1Lθ+λ2L3D+λ3L2D+λ4Lreg
实验中,权重设置为: λ 1 = 10 , λ 2 = 100 , λ 3 = 10 , λ 4 = 0.1 \lambda_{1}=10, \lambda_{2}=100, \lambda_{3}=10, \lambda_{4}=0.1 λ1=10,λ2=100,λ3=10,λ4=0.1

数据的处理部分,文章使用了多个不同数据集的数据,并进行了整合形成统一的格式;同时对数据集的图片做了裁剪、翻转、旋转、色彩变化、运动模糊等增强处理。分别如下。

hand_skelenton_hirerachy
motion_blur_augment

3. 3D身体姿态估计模块
身体模块的实现与手部模块实现原理上基本一致,形式如下,不再赘述。
[ ϕ b , θ b , β b , c b ] = M B ( I b ) [\phi_{b},\theta_{b},\beta_{b},c_{b}] = M_{B}(I_{b}) [ϕb,θb,βb,cb]=MB(Ib)
文章中提到当前已有的方法和本文的方法对手腕和手臂的朝向的估计都不太准确,因为手腕只有一个2D点标记,但是这个问题在身体与手的整合模块中得到较好的解决。

4. 全身整合模块
整合模块是将身体模块的手部模块的输出整合为一个全身的表示。整合策略方面主要有两条:(1) 基于“复制-粘贴”式的快速组合;(2)基于额外2D关键点的优化框架,提高输出的准确性。

论文实验

一些实现细节:

  • (1)bounding box: 在线版本中,使用openPose获取身体的bounding box,然后处理完身体后,将3D投影回2D图像并获取手部的bounding box;对于离线处理版本,使用openPose获取身体和手部的bounding box。
  • (2)视频处理:对于使用“复制-粘贴”式的整合策略,视频是逐帧处理的,并且没有后处理操作;对于优化策略的整合方案,在逐帧处理完视频后,对shape,pose,camera做平滑操作,平滑窗口为5帧,权重分布为[0.1,0,2,0.5,0.2,0.1]。
  • (3)手部模块:手部模块的输入图像是以手为中心的裁剪图像,并“填充和缩放”到224X224尺寸,并做缩放、平移、旋转、模糊等数据集增强措施。网络采用ResNet-50作为主干网络,接两个全连接层,输出结果为61维的向量,包括相机参数(平移2d,缩放因子1d),手的全局旋转(3d),手的姿态(3d(个关节)X5d(个手指)X3d(个角度)=45d),shape参数(10d)。使用Adam优化器,学习率设为1e-4,训练100个epoch后收敛。
  • (4)身体模块:身体模块的训练与SPIN基本一致。使用Adam优化器,学习率设为5e-5,训练20个epoch后收敛。
  • (5)数据集:使用到的数据集有FreiHand,HO-3D,MTC,STB,RHD,MPII+NZSL。

论文结果

文章与其他方法的对比如下:
compare

部分实测结果:




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

FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion 的相关文章

随机推荐

  • C++编译之make cmake bazel模板

    前面文章介绍了C 43 43 编译过程 xff1a 预处理 编译 汇编 链接 xff0c 内容比较简单 xff0c 只要会使用命令行 xff0c 就能根据文章的内容实践操作 xff0c 直观的了解编译全过程 一个项目往往不只一两个cpp文件
  • android之Fragment(官网资料翻译)

    Fragment要点 Fragment作为Activity界面的一部分组成出现 可以在一个Activity中同时出现多个Fragment xff0c 并且 xff0c 一个Fragment亦可在多个Activity中使用 在Activity
  • 个人面试经历经验谈

    到昨天接到金蝶得Offer xff0c 我想我为期三个星期的找工作面试之旅应该是告一段落了 原以为接到Offer会有点高兴 xff0c 但是一回味这三个星期的起起落落 xff0c 便实在是高兴不起来 xff0c 虽然手上有好几个Offer可
  • linux 查看端口占用情况

    1 查看系统端口 netstat anptl显示所有正在监听的端口 2 刷选某个端口 netstat anptl grep 39 3350 39 3 查看占用端口的应用程序 ps lt PID gt 下图中可以看到端口8080 的PID 6
  • eclipse tomcat部署项目开发环境修改访问路径

    eclipse tomcat部署项目开发环境修改访问路径
  • 欢迎使用CSDN-markdown编辑器

    欢迎使用Markdown编辑器写博客 本Markdown编辑器使用StackEdit修改而来 xff0c 用它写博客 xff0c 将会带来全新的体验哦 xff1a Markdown和扩展Markdown简洁的语法代码块高亮图片链接和图片上传
  • PLSQL 11 注册码

    PLSQL 11 注册码 注册码 xff1a Product Code xff1a 4t46t6vydkvsxekkvf3fjnpzy5wbuhphqz serial Number xff1a 601769 password xff1a x
  • ORA-28000: the account is locked-的解决办法

    ORA 28000 the account is locked 第一步 xff1a 使用PL SQL xff0c 登录名为system 数据库名称不变 xff0c 选择类型的时候把Normal修改为Sysdba 第二步 xff1a 选择my
  • IOS中bootstrap-select 动态加载的下拉框点击不展示(已解决)

    问题描述 bootstrap select 动态加载的option 在安卓浏览器中能点击后展示 但是在ios浏览器中点击没反应 发现原因 在重新渲染方法后加了一行 s e
  • S7-PLCSIM 无法找到STEP 7 V15 许可证(必须在此计算机上安装STEP V15应用程序)。-----(已解决)

    已经安装过step7 并且已经授权过了 xff0c 但是启动时提示下图错误 记得右键已管理员身份运行
  • 新建springboot项目, pom.xml报错 Unkown error 解决思路

    新建项目pom xml 报错 网上解决思路 xff1a 1 大多都是项目右键 Maven Update Project 选中Force Update of Snapshots Releases 进行强制更新 2 1 5 改成了2 1 3 修
  • 嵌入式软件面试总结

    背景 先说说本人的背景 xff0c 我 xff0c 一个大专人 xff0c 从事嵌入式开发两年了 xff0c 之前在一家公司是负责单片机和物联网开发的 2020年年底我选择了裸辞 xff08 主要想出去玩 xff09 直到春节结束后 xff
  • Intel NUC安装ubuntu系统的方法

    使用intel nuc安装ubuntu系统 xff0c 试验了好多次UEFI安装 xff0c 但是结果都是开机时会出现 A bootable device 除了这句话都是黑屏的现象 原因我查了很多 xff0c 也不敢确定 xff0c 现在总
  • 白骑士的树莓派教学(二):镜像烧录

    本期内容让我们来了解一下树莓派操作系统镜像烧录的操作 xff0c 所需的设备 xff1a PC机 xff0c U盘 xff0c 树莓派相关设备 什么是镜像 xff1f 所谓镜像文件其实和ZIP压缩包类似 xff0c 它将特定的一系列文件按照
  • VS Code Remote SSH远程连接异常:Resolver error: Error: Running the contributed command

    VS Code Remote SSH远程连接异常 问题描述原因分析解决方案扩展Remote SSH首次连接插件做了什么Remote SSH对于远程Linux的要求 问题描述 通过VS Code插件Remote SSH连接一台新主机时 xff
  • PHP常用六大设计模式

    单例模式 特点 xff1a 三私一公 xff1a 私有的静态变量 xff08 存放实例 xff09 xff0c 私有的构造方法 xff08 防止创建实例 xff09 xff0c 私有的克隆方法 防止克隆对象 xff0c 公有的静态方法 xf
  • matlab中文乱码的解决(UTF-8不支持的问题)

    1 解决editor中的UTF 8不支持的问题 xff0c 需要加入下面几行 在matlab 安装的目录的bin子文件夹中找到lcdata xml文件 xff1a 打开加入 lt Locale entries example gt lt l
  • FreeRTOS分析

    freertos是一个轻量级的rtos xff0c 它目前实现了一个微内核 xff0c 并且port到arm7 avr pic18 coldfire等众多处理器上 xff1b 目前已经在rtos的市场上占有不少的份额 它当然不是一个与vxw
  • STM32之FreeRTOS

    学习操作系统 xff0c 我并没有一开始就学习UCOS xff0c 而是选择了FreeRTOS FreeRTOS可以方便地搭建在各个平台上 xff0c 因为汇编相关 xff0c 都已经由官方完成 xff0c 我们要做的仅是添加自己的代码 x
  • FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion

    paper title FrankMocap Fast monocular 3D Hand and Body Motion Capture by Regression and Intergretion paper link https ar