多目灰度cam手势追踪系统——MegaTrack

2024-03-12 14:20

本文主要是介绍多目灰度cam手势追踪系统——MegaTrack,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、前言

本文是对Facebook Oculus发布的一篇VR方向(手势追踪)论文的解读。Oculus是一家做VR的公司,2014年被FaceBook收购了,本次参考的论文就是FaceBook Oculus团队的最新论文。论文2020年7月发表于SIGGRAPH。

因为最终是要给大家讲明白这个手势追踪是怎么实现的,所以我尽量不出现数学公式,尽量使用中文。

【补充】SIGGRAPH是什么?:Special Interest Group for Computer GRAPHICS,计算机图形图像特别兴趣小组,成立于1967年,可以看作一个论坛或者是会议,内容主打电脑绘图和动画制作。绝大部分图像相关厂商和游戏制作者都会每年在这个会议上发布自己的作品和科研成果。因此,SIGGRAPH在图形图像技术,计算机软硬件以及CG等方面都有着相当的影响力。

二、论文分析

1、这篇论文讲的啥?

现在市面上的VR游戏机,都需要手柄一类的操作杆来获取玩家手部动作和实时坐标,如下图:

而本篇论文中所提到的手势追踪,则不要手柄操纵杆之类的外设。实现效果如下图:

说白了,他这篇论文讲的就是,他怎么实现的第二张图——手势追踪。而他这个手势追踪系统的名称,叫做MegaTrack。

而我接下来的任务就是以平易近人的科普方式,给大家讲解他们团队的手势追踪系统是如何实现的。
2、直接传感器->间接传感器

为了脱离操纵杆,最开始人们的解决方案是制作一双充满电容手套,玩家戴上手套之后,系统就可以完美的掌握手势的每一个细节,但这样和直接握操纵杆没有本质区别,二者都属于在手部直接安装传感器。这篇论文的第一个特点:就是不安装直接传感器,通过摄像头观察手部姿势+深度学习来达成间接传感器的作用。
【补充】两种间接传感器的对比:首先,谷歌也有一个类似的手势追踪系统——MediaPipe Hand。

  • MediaPipe Hand采用的是一个摄像头(非3D摄像头/深度摄像头),虽然一个摄像头无法展示场景的深度,但是谷歌采用了2.5D技术去近似模拟3D。
  • 2.5D是啥?在摄像头输入图像中,在大部分的情况下将手腕处或是手掌中心会被设为相对深度的基准点,也就是这个位置的深度视为零。这种表示相对深度的方法被统称为2.5D表示法。
  • 当然,只有一个固定的摄像头是肯定无法提取深度信息的,所以团队使用神经网络来进行训练,他们是用深度相机为每一帧图像打标签(深度信息),之后测试集使用的是普通相机。

有了深度的基准点,接下来的问题变成2.5D表示法要怎么近似真实3D位置。现在我们有:

  • 各个点在影像上的2D位置;
  • 各个关键点的相对深度。
  • 这时候只要再假设手骨长度,将2D的预测与相对深度以几何投影方式投到3D空间,并放置在手骨长度恰好等于假设值的3D位置上,这样就完成了3D手姿态的近似。

2.5D 映射为 3D 过程如下图:

再说本文的主角MegaTrack:

MegaTrack采用了四个灰度摄像头用来感知手部姿态,如下图:

这样,使用者的手至少会落在两颗相机的视野之中,如下图:

由于MegaTrack使用了4个摄像头,所以相比于谷歌的解决方案,具有以下优势:

  • 能够更好的解决“遮盖问题”(手被物品遮蔽或自我遮蔽 ,比如说背面拳头事实上,遮蔽是所有基于视觉方法的难题,这点如果不考虑非视觉的输入,就只有增加更多不同视角的相机输入了)
  • 在大多数时候他们会使用 multiple cameras with geometric calibration的演算法,只有在极少的位置使用单一相机的演算法。(比如手的位置特别的远离身体,以至于只有一个摄像头能捕捉到手的姿势…)
  • 在3D hand pose estimation演算法方面,Oculus除了会采用2D/2.5D hand pose estimation方法外,还可以更进一步地利用多相机的几何校正优势。
  • 同时,由于它具有四个摄像头,于是就可以在最初的数据采集中获取一些3D坐标用于辅助最终的手势坐标。

3、实现过程

介绍完了硬件,现在开始介绍实现步骤,可以分为三大步:

  • Detection (DetNet)——手部探测网络(自己翻译的…)
  • Keypoint Network (KeyNet)——手势关键点生成网络
  • Hand Kinematic Model(或者说手势估计)——建立手部动态模型

注:前两步都是通过神经网络来实现的。

3.1 DetNet(手部探测网络)

  • 团队使用了260万张照片来训练DetNet来提取手部图像。
  • VR眼镜上的四个摄像头采集影像(VGA格式),每一帧将手部信息裁剪成正方(因为正方形图像方便神经网络计算嘛),输入到下一层。
  • DetNet,结合了通过跟踪检测的策略,可以优雅地处理手部在多个摄像机之间的移动。

3.2 KeyNet(手势关键点生成网络)

KeyNet使用了200万张图片来训练网络,来预测手势关键点的2.5D坐标。

  • 注意:KeyNet的训练的图片来源,来自该团队实验室的深度相机。
  • 当模型已经训练好之后,在VR眼镜中则使用已经训练好的模型+普通摄像头来近似深度摄像头的作用,以节省成本。

在KeyNet层中,首先输入手的影像(已经处理成正方形)和21个用于参考的3D手势点(这21个点来源自上一轮的Hand Kinematic Model,有点循环神经网络那种感觉);随

后通过网络输出21个预测出来的2.5D 手势关键点坐标。

之所以输入来自上一轮的用于参考的3D点,是为了拟合真实数据和模拟数据的误差,也为了解决输入图像手部关键点的抖动问题(个人理解,这一步运用了残差的思想,把我上一轮生成的关键点用来辅助下一轮关键点的预测。毕竟有上一轮的参考点,就可以更重点观察新关键点的特点和分布)。

【补充】参考点是MegaTrack KeyNet一大特色

  • 值得一提的是,MegaTrack KeyNet的一大特色就是除了影像外还要输入一组参考用的keypoint 3D pose,而这组21个3D pose最大的效果在于稳定模型的预测,在某几帧采集效果不佳的情况下,依然能提供稳定的模型预测。
  • 对于MegaTrack系统来说,90%的关键点预测是由上一步输入的3D生成,剩下的10%的关键点的预测是由20帧前的手部姿势生成。(具体又是怎么根据前20帧生成的剩下的10%的点在此先不解释了)

3.3 Hand Kinematic Model(手部动态模型)

这一部分的作用:

  • 使用KeyNet输出的2.5D 的手势关键点来最终生成3D手势。
  • 另外,一个新的使用者使用VR设备,整个手势追踪会先进入kinematic model scale模块,进行手部姿态的校正。

具体流程:

  • 使用一个26 关键点的手部动态模型,通过观测KeyNet预测的2.5D pose,去近似真实的3D 手势。(为什么这突然变成26…我也不知道)
  • 其中,手腕6 个关键点,每根手指4个关键点 ,对KeyNet的2.5D pose计算残差,并使用Levenberg-Marquardt方法最佳化。

【补充】Levenberg-Marquardt最佳化:

Levenberg-Marquardt方法,是一个穷举3D空间中手的方法,并从中挑选最符合相机观察(KeyNet输出的2.5D pose) 的那只手,就是这个演算法最终输出的结果。

最佳化时,通过forward kinematic,得到3D空间中的21个3D点 (与KeyNet一样的21个点)。实际上最佳化的residual term有三项:

  • 将21个3D点投影回相机空间,与KeyNet预测的2D pose越接近越好;
  • 计算21个3D点的relative distance,与KeyNet预测的depth distance越接近越好;
  • 与前一个pose越接近越好,即smooth term。

4、MegaTrack实际运行流程

  • 首先,在轮流在不同camera上跑DetNet,直到找到使用者的手。
  • 再利用这个camera的影像通过KeyNet和Hand Kinematic Model得到第一个3D pose。
  • 随后,利用这个3D pose投影到其他camera中找到别的camera中的手。这个方法减少了多次跑DetNet所需的运算资源(相当于告诉DetNet一个手的大致位置,从而不需要让DetNet进行全图搜索)。
  • 接下来进入手部追踪模式,每次进行KeyNet的时候,插入上一祯的Hand kinematic model,以推测下一祯手会出现的位置,更进一步的减少运行DetNet的运算需求,稳定手部姿态的运算。
  • 运行100帧之后,这个手的scale会被储存下来,直到VR眼镜被放下才会清除。
  • 大多数的情况下,只有KeyNet会持续地运行,DetNet只有在丢失手部追踪(比如手突然抽走,再突然出现在另一个位置)的情况下才会被重新启动
  • 另外,为了压低运算量,即使同一支手存在于超过两个camera的视角内,MegaTrack还是只会跑其中两只camera。

5、本论文中,MegaTrack的缺点

在双手有复杂交叉的时候,识别会失效

当收的方向并不是以自己的方向为中心时,识别会失败

手和现实物体发生交互式,识别会失败

论文地址:

https://research.fb.com/wp-content/uploads/2020/08/MEgATrack-Monochrome-Egocentric-Articulated-Hand-Tracking-for-Virtual-Reality.pdf

这篇关于多目灰度cam手势追踪系统——MegaTrack的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/801543

相关文章

CentOS系统Maven安装教程分享

《CentOS系统Maven安装教程分享》本文介绍了如何在CentOS系统中安装Maven,并提供了一个简单的实际应用案例,安装Maven需要先安装Java和设置环境变量,Maven可以自动管理项目的... 目录准备工作下载并安装Maven常见问题及解决方法实际应用案例总结Maven是一个流行的项目管理工具

C#实现系统信息监控与获取功能

《C#实现系统信息监控与获取功能》在C#开发的众多应用场景中,获取系统信息以及监控用户操作有着广泛的用途,比如在系统性能优化工具中,需要实时读取CPU、GPU资源信息,本文将详细介绍如何使用C#来实现... 目录前言一、C# 监控键盘1. 原理与实现思路2. 代码实现二、读取 CPU、GPU 资源信息1.

在C#中获取端口号与系统信息的高效实践

《在C#中获取端口号与系统信息的高效实践》在现代软件开发中,尤其是系统管理、运维、监控和性能优化等场景中,了解计算机硬件和网络的状态至关重要,C#作为一种广泛应用的编程语言,提供了丰富的API来帮助开... 目录引言1. 获取端口号信息1.1 获取活动的 TCP 和 UDP 连接说明:应用场景:2. 获取硬

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

2.1/5.1和7.1声道系统有什么区别? 音频声道的专业知识科普

《2.1/5.1和7.1声道系统有什么区别?音频声道的专业知识科普》当设置环绕声系统时,会遇到2.1、5.1、7.1、7.1.2、9.1等数字,当一遍又一遍地看到它们时,可能想知道它们是什... 想要把智能电视自带的音响升级成专业级的家庭影院系统吗?那么你将面临一个重要的选择——使用 2.1、5.1 还是

高效管理你的Linux系统: Debian操作系统常用命令指南

《高效管理你的Linux系统:Debian操作系统常用命令指南》在Debian操作系统中,了解和掌握常用命令对于提高工作效率和系统管理至关重要,本文将详细介绍Debian的常用命令,帮助读者更好地使... Debian是一个流行的linux发行版,它以其稳定性、强大的软件包管理和丰富的社区资源而闻名。在使用

SpringBoot如何使用TraceId日志链路追踪

《SpringBoot如何使用TraceId日志链路追踪》文章介绍了如何使用TraceId进行日志链路追踪,通过在日志中添加TraceId关键字,可以将同一次业务调用链上的日志串起来,本文通过实例代码... 目录项目场景:实现步骤1、pom.XML 依赖2、整合logback,打印日志,logback-sp

Ubuntu系统怎么安装Warp? 新一代AI 终端神器安装使用方法

《Ubuntu系统怎么安装Warp?新一代AI终端神器安装使用方法》Warp是一款使用Rust开发的现代化AI终端工具,该怎么再Ubuntu系统中安装使用呢?下面我们就来看看详细教程... Warp Terminal 是一款使用 Rust 开发的现代化「AI 终端」工具。最初它只支持 MACOS,但在 20

windows系统下shutdown重启关机命令超详细教程

《windows系统下shutdown重启关机命令超详细教程》shutdown命令是一个强大的工具,允许你通过命令行快速完成关机、重启或注销操作,本文将为你详细解析shutdown命令的使用方法,并提... 目录一、shutdown 命令简介二、shutdown 命令的基本用法三、远程关机与重启四、实际应用

Debian如何查看系统版本? 7种轻松查看Debian版本信息的实用方法

《Debian如何查看系统版本?7种轻松查看Debian版本信息的实用方法》Debian是一个广泛使用的Linux发行版,用户有时需要查看其版本信息以进行系统管理、故障排除或兼容性检查,在Debia... 作为最受欢迎的 linux 发行版之一,Debian 的版本信息在日常使用和系统维护中起着至关重要的作