MediaPipe Hands: On-device Real-time Hand Tracking,2020
文章目录
自说自话:
- 双阶段,手掌检测 + 关键点定位,多只爪爪;
- 通过合成的手部数据训练得到各个关键点的远近关系,输出 2.5 D 信息,x,y,和 depth;
- 手掌检测而不是全手检测,能够降低问题复杂度。
Abstract
- 移动端实时 hand tracking,能够提供手部骨架;
- 两个模型:hand detector and hand landmark model;
- 实现通过 MediaPipe,一种构建交叉平台的 ML 方案。
Introduction
以往的手部姿态估计工作中,有的需要特殊的硬件,有的不够轻量用于移动端。
本文贡献:
- two-stage 的 hand tracking,可以在移动端实时地追踪多只手;
- 输入 RGB 图像,输出 2.5 D 的手部姿势;
- 可以在多平台部署,包括安卓、IOS 还有 Web。
Architecture
Two-stage:
- palm detector,在全图范围内执行手掌检测;
- hand landmark model,在上面得到的手掌区域内做关键点检测,并且返回 2.5D 的结果。
如下图 1 左图,越靠近摄像机,圆圈就越白越大。
实际运行的时候,采用和 BlazePose 类似的方式,并不在每一帧都进行 detector。
- 在初始帧,先进行 detector,再进行 landmark;
- 接着,在下一帧进行 landmark,当 landmark 认为当前帧中已经没有手部信息了,才会再作为初始帧进行 detector,然后再进行 landmark。如此循环。
BlazePalm Detector
为了有一个初始的 detector 检测手部的位置,本文采用了一个类似 BlazeFace 的 SSD 模型。检测手部是一个相对较为复杂的任务,因为有各种尺寸的手部大小、多种遮挡情况。手部没有脸部那样的较为固定的特征,仅仅通过视觉特征来检测相对更难。为了解决这些问题,本文的方案包括以下几点:
- 训练手掌检测器,不包含手指。检测手掌比检测包含手指的全部手部信息要更简单一些,手掌相对更“小”,在应用 NMS 时副作用也更小,比如握手的情况,两个手掌比两只手更不容易被 NMS 过滤掉。这样也能减少 anchor 的使用数量,简化问题和计算量。
- 使用类似 FPN 的 encoder-decoder,即使对于小物体检测,也是用较大的场景上下文。
- 然后采用 Focal Loss 来应对巨大尺度变化引起的超量 anchor。
手掌检测器的模型结构如下:
可以看到从上到下主体非常像 FPN,也就是相当于获取了任意尺度的语义信息,然后每个尺度都贡献 anchor 出来,最后一共有 11136 个 anchor。
Hand Landmark Model
在进行了初步的手掌检测之后,就是通过 regression 精细地进行 21 个 landmark 2.5D 检测。模型学习内部的手部姿势表征,对遮挡有着较高的鲁棒性。
模型一共有三个输出,结构如图 3 所示,其中中间的特征部分是共享的,这个地方具体用什么结构好像没有细讲,而输出的 3 个 head 都是分别监督训练得到的。
- 21 个关键点信息,包括 x,y 以及 depth;
- 表示是否有手的 hand flag(当认为无手的时候,就在下一阵进行 detector 了);
- 左手还是右手,一个二分类标志。
- 21 个 2D 的landmark 信息是通过真实图片和合成图片训练得到的,其中相对腕部的相对深度信息是仅仅通过合成图片来训练。
- 为了防止 tracking 失败,所以特意增加了一个 hand presence 来衡量是否有手存在,一旦低于阈值,就会重新进行 detector。
- 左右手是另一个非常重要的信息,
Dataset and Annotation
本文准备了多个数据集:
- 6K wild dataset,涵盖不同光照等情况,但是手部没有特别复杂的动作;
- 10K in house dataset,各种各样的手部姿势,但是仅仅采集来自 30 个人;
- synthetic 合成的 dataset,主要是为了 depth 信息。
对于 palm 检测,只使用第一个数据集就足够了,对于 landmark 则是使用全部数据集;
Results
最后做出来的效果发现,增加模型的参数和 capacity 会显著增加耗时,但是性能并没有显著的提高:
Implementation in MediaPipe
整个过程如下图 5:两个 stage 分别是 palm detector 和 landmark location,前者只有在必要的时候才会被使用,很大程度上降低了计算量。