MediaPipe Hands: On-device Real-time Hand Tracking(From Google)
贡献点或者创新点
- 提出了实时运行在设备上的多手跟踪,并且只需要一个RGB摄像头就可以。
- 推理管道由两部分组成:手掌检测器和预测手关节坐标的模型,此模型可以预测手部2.5D的姿态
- 基于MediaPipe平台搭建的
- 提出的模型和推理管道在多种移动设备GPU上也能够取得比较好的实时预测效果
1 Introduction
手势姿态估计已经发展了好多年,在AR/VR领域的应用也很广泛,但是许多之前的工作需要专门的硬件支持(例如深度传感器),或者是解决方案并不支持不够轻量,以至于没办法运行在移动实时设备上。本文提出的方法不需要借助其他的硬件设备,可以在实时在移动设备上进行手部跟踪。
2 Architecture
本文中手部姿态跟踪的解决方案由两个模型同时工作来实现:
- 通过一个定向的手部包围边框,对整张输入图片来定位手掌的位置,这构成了一个手掌检测器。
- 对手掌检测器提供的裁剪的手边界框来检测手关键点坐标,并且返回高保真的2.5D手部地标,这构成一个手部地标定位模型。
加了手掌检测器之后,第二步中就大大减少了对图片的处理,并可以把更多的性能放在定位地标上。在实时进行手部姿态跟踪的时候,手掌检测器并不是每一帧都运行,视频帧图片中手的边界框由上一帧图片中手部的地标预测作为输入来获取,手掌检测器只在地标预测的时候发现手部丢失才会运行。
2.1 BlazePlam Detector
使用手掌检测而不用手检测有几个原因:
- 手检测不像脸部检测,脸部检测有许多高对比的特征,手检测没有,直接检测起来会比较复杂。
- 估算手掌和拳头等刚性物体的边界盒比有关节的手指检测手要简单得多。
- 由于手掌是较小的对象,因此非最大抑制算法即使在双手自遮挡的情况下也能很好地工作,比如握手。
- 手掌可以仅使用方形边界框进行建模,忽略其他纵横比,因此将锚的数量减少了3∼5倍.
本文中的手掌检测器使用类似于FPN[9]的编码器-解码器功能提取器来实现更大的场景上下文感知,即使对于小对象也是如此。
同时将训练过程中的焦点损失降至最低[10],以支持高尺度变化导致的大量锚定。
2.2 Hand Landmark Model
手部地标模型通过回归对检测到的手部区域内的21个2.5D坐标进行精确地标定位。该模型学习一致的内部手姿势表示,甚至对部分可见的手和自我遮挡也具有鲁棒性。
该模型有三个输出
- 21个手部地标,(x,y)坐标还有相应的深度信息
- 表明手部是否存在的一个概率标志
- 二分类区分左右手
(x,y)2D坐标是从现实世界的图像和合成数据集中学习的,相应的深度信息只从合成数据集中学习。
输出手是否存在的概率标志是为了在实时手部跟踪的时候,如果标志的概率低于一定阈值,表示手预测丢失了,就可以立马启动手掌检测器来恢复跟踪。
**本文的设置目标是实时移动GPU推断,但也设计了更轻和更重的模型版本,以解决移动设备上的CPU推断问题,这些移动设备分别缺乏适当的GPU支持和更高的精度要求,无法在桌面上运行。 **
3 Dataset and Annotation
数据集中包含三个部分:
- In-the-wild dataset
- In-house collected gesture dataset
- Synthetic dataset
对于手掌检测器,我们只在wild数据集中使用,这足以定位手部,并提供最高的外观多样性。然而,所有数据集都用于训练手部地标模型。我们用21个地标标注现实世界的图像,并使用投影的groundtruth 3D关节进行合成图像。对于手的存在,我们选择真实世界图像的子集作为正面示例,并在不包括注释的手区域的区域上采样作为负面示例。对于惯用手,我们用惯用手注释真实世界图像的子集,以提供此类数据
4 Results
不同尺寸的模型在不同设备上的性能体现:
这篇论文建议可以上b站看同济子豪兄的代码复现,论文也讲的很详细