来源 | googleblog
编辑 | 代码医生团队
能够感知手的形状和运动,这是改善各种技术领域和平台的用户体验的重要组成部分。例如,它可以形成手语理解和手势控制的基础,并且还可以在增强现实中实现物理世界之上的数字内容和信息的叠加。虽然对人们来说很自然,强大的实时手感是一项极具挑战性的计算机视觉任务,因为手经常遮挡自己或彼此(例如手指/手掌闭塞和手抖)并且缺乏高对比度模式。
今天宣布发布一种新的手感知方法,在6月份预览了CVPR 2019,在MediaPipe中实现- 一个开源跨平台框架,用于构建管道以处理不同模态的感知数据,如视频和音频。该方法通过使用机器学习(ML)从单个帧推断出手的21个3D关键点来提供高保真的手和手指跟踪。虽然目前最先进的方法主要依靠强大的桌面环境进行推理,但方法可以在手机上实现实时性能,甚至可以扩展到多手。希望提供这种手感知功能 对更广泛的研究和开发社区将导致创造性用例的出现,刺激新的应用和新的研究途径。
通过MediaPipe在手机上实时3D手感知。解决方案使用机器学习从视频帧计算手的21个3D关键点。深度以灰度显示。
用于手部跟踪和手势识别
ML管道手部跟踪解决方案使用由多个模型组成的ML管道:
该架构类似于最近发布的面部网格 ML管道所采用的架构,其他架构已用于姿态估计。将精确裁剪的手掌图像提供给手部界标模型大大减少了对数据增加(例如旋转,平移和缩放)的需要,而是允许网络将其大部分容量专用于坐标预测精度。
手感知管道概述。
BlazePalm:实时手部/手掌检测
为了检测初始手部位置,采用名为BlazePalm 的单发探测器模型,以类似于BlazeFace的方式针对移动实时使用进行了优化,BlazeFace也可用在MediaPipe中。检测手是一项非常复杂的任务:模型必须在各种手部尺寸上工作,相对于图像框架具有大范围跨度(~20x),并且能够检测被遮挡和自闭合的手。尽管面部具有高对比度图案,例如在眼睛和嘴部区域,但是手中缺少这样的特征使得相对难以仅从它们的视觉特征中可靠地检测它们。相反,提供额外的上下文,如手臂,身体或人物特征,有助于准确的手部定位。
解决方案使用不同的策略解决上述挑战 首先训练手掌探测器而不是手探测器,因为估计像手掌和拳头这样的刚性物体的边界框比用手指关节检测手要简单得多。此外由于手掌是较小的物体,非最大抑制算法即使对于双手自遮挡情况(如握手)也能很好地工作。此外手掌可以使用方形边界框(ML术语中的锚)来模拟,忽略其他纵横比,因此将锚的数量减少3-5倍。其次,编码器 - 解码器特征提取器用于更大的场景上下文感知,即使对于小物体(类似于RetinaNet)方法)。最后将训练期间的局部损失降至最低,以支持由于高度变化导致的大量锚点。
通过上述技术,在手掌检测中实现了95.7%的平均精度。使用规则的交叉熵损失并且没有解码器给出仅86.22%的基线。
手部地标模型
在对整个图像进行手掌检测之后,随后的手部界标模型通过回归(即直接坐标预测)在检测到的手部区域内执行21个3D手肘坐标的精确关键点定位。该模型学习一致的内部手姿势表示,并且即使对于部分可见的手和自闭塞也是稳健的。
为了获得地面实况数据,手动注释了具有21个3D坐标的~30K真实世界图像,如下所示(从图像深度图中获取Z值,如果它存在于每个相应的坐标)。为了更好地覆盖可能的手部姿势并对手部几何形状的性质提供额外的监督,还在各种背景下渲染高质量的合成手部模型,并将其映射到相应的3D坐标。
上图:对齐的手工作物通过地面实况注释传递到跟踪网络。底部:使用地面实况注释渲染合成手部图像
然而,纯粹的合成数据很难概括为野外域。为了克服这个问题,使用混合训练模式。下图显示了高级模型训练图。
手部跟踪网络的混合训练模式。裁剪的真实照片和渲染的合成图像用作预测21个3D关键点的输入。
下表总结了回归准确性,具体取决于培训数据的性质。使用合成和现实世界数据可显着提升性能。
平均回归误差
数据集 按手掌大小标准化
只有现实世界 16.1%
仅渲染合成 25.7%
混合现实世界+合成 13.4%
手势识别
在预测的手骨骼之上,应用一种简单的算法来推导手势。首先每个手指的状态,例如弯曲或直的,由关节的累积角度确定。然后将手指状态集映射到一组预定义的手势。这种简单而有效的技术能够以合理的质量估计基本的静态手势。现有的管道支持来自多种文化的计数手势,例如美国,欧洲和中国,以及各种手势,包括“拇指向上”,“闭拳”,“OK”,“摇滚”和“蜘蛛侠”。
通过MediaPipe实现
使用MediaPipe,可以将此感知管道构建为模块化组件的有向图,称为计算器。Mediapipe附带了一组可扩展的计算器,可以解决各种设备和平台上的模型推理,媒体处理算法和数据转换等任务。单独的计算器,如裁剪,渲染和神经网络计算,可以专门在GPU上执行。例如在大多数现代手机上采用TFLite GPU推理。
用于手部跟踪的MediaPipe图如下所示。该图由两个子图组成 - 一个用于手检测,一个用于手关键点(即标志性)计算。MediaPipe提供的一个关键优化是掌上探测器仅在必要时(相当不频繁)运行,从而节省了大量的计算时间。通过从当前帧中的计算的手部关键点推断后续视频帧中的手部位置来实现这一点,从而消除了在每个帧上运行手掌检测器的需要。为了获得稳健性,手动跟踪器模型输出一个额外的标量,捕获手在输入裁剪中存在并合理对齐的置信度。只有当置信度低于某个阈值时,手检测模型才会重新应用于整个帧。
手部界标模型的输出(REJECT_HAND_FLAG)控制何时触发手部检测模型。这种行为是通过MediaPipe强大的同步构建块实现的,从而实现ML管道的高性能和最佳吞吐量。
高效的ML解决方案可以实时运行,并且可以跨越各种不同的平台和外形,与上述简化描述相比,具有更高的复杂性。为此开源在上面的手部跟踪和手势识别管道MediaPipe框架,伴随着相关的终端到终端的使用场景和源代码,在这里。这为研究人员和开发人员提供了完整的堆栈,可以根据模型对新想法进行实验和原型设计。
https://github.com/google/mediapipe/
https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md
未来发展方向
计划通过更强大和稳定的跟踪扩展此技术,扩大可以可靠检测的手势量,并支持动态手势及时展开。相信发布这项技术可以促使研究和开发者社区的成员对新的创意和应用产生冲动。很高兴看到你可以用它构建什么!
致谢
特别感谢一起工作的所有团队成员:Andrey Vakunov,Andrei Tkachenka,Yury Kartynnik,Artsiom Ablavatski,Ivan Grishchenko,Kanstantsin Sokal,Mogan Shieh,Ming Guang Yong,Anastasia Tkach,Jonathan Taylor,Sean Fanello ,Sofien Bouaziz,Juhyun Lee,Chris McClanahan,Jiuqiang Tang,Esha Uboweja,Hadon Nash,Camillo Lugaresi,Michael Hays,Chuo-Ling Chang,Matsvei Zhdanovich和Matthias Grundmann。