当前位置: 首页 > 科技观察

谷歌开源ML-basedhandtracking算法:手机端实时检测,同时捕捉多个手势

时间:2023-03-20 23:57:36 科技观察

不久前,谷歌人工智能实验室宣布他们在“实时手部追踪”方面取得新进展》并将这项新技术应用在MediaPipe中,这也是AI计算机视觉任务的重大突破。这项技术不仅可以在手机上实现实时抓拍性能,甚至可以同时追踪多只手的动作。目前谷歌已经开源该项目并发布相关博客介绍该技术。雷风网AI开发者整理内容如下。概述能够感知手的形状和运动是跨不同技术领域和平台改善用户体验的重要部分。例如,它支持手语理解和手势控制,以及在增强现实中将数字内容和信息叠加在物理世界之上(AR,https://ai.googleblog.com/search/label/Augmented%20Reality).虽然这种能力是我们与生俱来的,但强大的实时手部感知是一项具有挑战性的计算机视觉任务,因为手往往会相互咬合(例如手指/手掌或握手之间的咬合)。),手之间也缺乏高反差。我们现在已经发布了一种新的手部感知方法,并且在6月的CVPR2019上,我们开放了该方法的预览。在此方法演示中,我们通过开源跨平台框架MediaPipe构建了一个框架,用于处理不同类型的模态感知数据,例如视频和音频。该方法使用机器学习(ML)从单帧中推断出一只手的21个3D关键点,提供高保真手和手指跟踪。目前最先进的方法主要依靠强大的桌面环境进行推理,而我们的方法可以在手机上实现这种实时性能,甚至可以扩展到同时跟踪多只手。我们希望通过向广泛的研发社区提供这种手感功能,它将有助于创建新的用例并激发新的应用和研究途径。图1.通过MediaPipe在手机上进行实时3D手部感应。我们的解决方案是使用机器学习从一个视频帧中计算手的21个3D关键点。图中的深度由颜色的灰度表示。用于手部跟踪和手势识别的机器学习架构我们的手部跟踪解决方案使用由多个模型组成的机器学习架构:手掌检测器模型(称为BlazePalm)。它对整个图像进行操作并返回一个定向的手部边界框;手地标模型。它对由手部检测器定义的裁剪图像区域进行操作,并返回高保真3D手部关键点;手势识别器,它将先前计算的关键点配置分类为一组离散的手势。这种架构类似于我们最近发布的人脸网格ML模型(https://sites.google.com/view/perception-cv4arvr/facemesh),其他人也将其用于姿势估计。将精确裁剪的手掌图像输入手部地标模型可大大减少对更多数据(例如旋转、平移和缩放)的需求,从而使网络能够将其大部分性能用于协调预测精度。图2手部感知模型BlazePalm的总体架构:实时手/手掌检测为了检测手的初始位置,我们使用称为BlazePalm的单次检测器模型(https://arxiv.org/abs/1512.02325).该模型可用于移动实时检测,类似于BlazeFace(https://arxiv.org/abs/1907.05047),该模型也可用于MediaPipe。手部检测是一项非常复杂的任务:我们的模型必须适应不同的手部大小,因此它相对于图像帧具有更大的范围(~20x),并且能够检测遮挡和自遮挡的手部状态.人脸通常具有很高的对比度,例如眼睛和嘴巴区域有明显的差异。但是由于手没有这些特征,因此很难仅从其视觉特征可靠地检测到它们。然而,通过提供额外的信息,例如手臂、身体或人体特征,它可以帮助精确定位手部。因此,我们的解决方案使用不同的策略来应对上述挑战。首先,我们训练手掌检测器而不是手检测器,因为推断刚性物体(例如手掌和拳头)的边界框比检测手指关节简单得多。另外,由于手掌是一个小物体,我们采用了非极大值抑制算法(https://www.coursera.org/lecture/convolutional-neural-networks/non-max-suppression-dvrjH),可以即使在双手自遮挡(如握手)的情况下使用,也能取得良好的工作效果。同时,也可以使用方形边界框(ML术语中的anchors)来模拟手掌,忽略其他纵横比,从而将anchors的数量减少3-5倍。其次,我们将适用于大场景上下文感知的编码器-解码器特征提取器应用于手等小物体的感知(类似于RetinaNet方法,https://arxiv.org/abs/1612.03144)。最后,我们最小化训练过程中的焦点损失,从而支持由于高度变化而导致的大量锚点。使用上述技术,我们实现了95.7%的手掌检测准确率;在使用常规交叉熵损失且没有解码器的情况下,检测精度基准仅为86.22%。Handlandmarkmodel在对整幅图像进行手掌检测后,我们后续的handlandmarkmodel通过回归对检测到的手区域内的21个3D手关节坐标进行精确的关键点定位,即直接预测坐标。该模型学习一致的内部手势表示,甚至对部分可见的手和自我遮挡也显示出鲁棒性。为了获得实时数据,我们用21个3D坐标手动标注了30K张真实手势图像,如下图所示(如果有相应坐标,Z值是从图像深度图中获取的)。为了更好地覆盖可能的手势并对手势几何提供额外的监督,我们还在不同的背景上渲染了一个高质量的合成手模型并将其映射到相应的3D坐标中。图3.第一行图像是传递给跟踪网络并带有实时注释的对齐手;第二行图像是使用实时注释渲染的合成手部图像。然而,纯合成数据很难推广到更广泛的领域。为了克服这个问题,我们采用混合训练模式,下图展示了一个高阶模型训练图。图4.手部追踪网络的混合训练模型。裁剪的真实照片和渲染的合成图像用作输入以预测21个3D关键点。下图显示了根据训练数据的性质对回归精度的总结。同时使用合成数据和真实数据可以显着提高模型的性能。图5.使用合成数据和真实数据的模型性能结果。手势识别器在预测的手部骨架之上,我们应用了一个简单的算法来导出手势。首先,每个手指的状态,例如弯曲或直立,由关节的累积角度决定。因此,我们将一组手指状态映射到一组预定义的手势。这种简单但有效的技术使我们能够在不影响检测质量的情况下估计基本的静态手势。现有架构支持美国、欧洲和中国等多种文化的手势计数,以及各种手势符号,包括“竖起大拇指”、“握紧拳头”、“OK”、“摇滚”和“蜘蛛侠”。图6通过MediaPipe实现不同的手势识别结果通过使用MediaPipe,我们可以将感知架构建模为模块化组件的有向图(https://en.wikipedia.org/wiki/Directed_graph),称为计算器(计算设备)。Mediapipe附带一组可扩展的计算器,可用于解决各种设备和平台的模型推理、媒体处理算法和数据转换等任务。裁剪、渲染和神经网络计算等单个计算器可以在GPU上独立执行。例如,我们在大多数现代手机上使用TFLiteGPU推理。我们用于手部追踪的MediaPipe的架构图如下所示。该图由两个子图组成——一个用于手部检测,另一个用于手部关键点(即地标)计算。MediaPipe提供的一项关键优化是仅在必要时(因此很少)运行手检测器,从而节省大量计算时间。我们通过从当前帧中计算的手部关键点推断后续视频帧中的手部位置来实现手部跟踪,从而无需在每个帧上运行手掌检测器。为了稳健性,手部跟踪器模型输出一个额外的标量,用于确定手部存在并在输入作物中合理对齐。只有当置信度低于某个阈值时,手部检测模型才会重新应用于整个帧。图7手旗模型(REJECT_HAND_FLAG)的输出控制何时触发手部检测模型。这种行为是通过MediaPipe强大的同步构建块实现的,从而为机器学习架构实现高性能和最佳吞吐量。这种高效的机器学习解决方案实时运行并跨各种不同的平台和外形规格。它比上面的简化描述复杂得多。为此,我们将在MediaPipe框架中开源上述手部追踪和手势识别方法,并附上相关的端到端使用场景和源码(https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md),它为研究人员和开发人员提供了一个完整的堆栈,可以根据我们的模型对新想法进行实验和原型制作。未来方向我们计划通过更稳健和稳定的跟踪来扩展这项技术,扩大我们可以可靠检测的手势数量,并支持及时展开动态手势。我们相信,这项技术的发布可以为广大的研究人员和开发人员社区激发新的想法和应用。我们期待看到您的创新!*MediaPipeMediaPipe是一个跨平台框架,用于构建应用于机器学习管道的多模式(例如,视频、音频、任何时间序列数据)框架。通过使用MediaPipe,我们可以将感知过程构建为模块化组件的图形,包括:推理模型(例如TensorFlow、TFLite)和媒体处理功能。MediaPipe开源地址:https://github.com/google/mediapipe/原文链接:https://ai.googleblog.com/2019/08/on-device-real-time-hand-tracking-with.html识别开源地址:https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md