MediaPipe Hands: On-device Real-time Hand Tracking,2020

文章目录

  • Abstract
  • Introduction
  • Architecture
    • BlazePalm Detector
    • Hand Landmark Model
  • Dataset and Annotation
  • Results
  • Implementation in MediaPipe
  • Application examples
  • Conclusion

自说自话:

  • 双阶段,手掌检测 + 关键点定位,多只爪爪;
  • 通过合成的手部数据训练得到各个关键点的远近关系,输出 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,前者只有在必要的时候才会被使用,很大程度上降低了计算量。

Application examples

Conclusion

(姊妹仨)BlazePalm: 先检手掌再检骨架,虚拟合成数据助力 2.5D 信息输出相关推荐

  1. SolidWorks PDM二次开发---检出与检入

    五一放假后半段了,今天来聊一下PDM中的检出与检入文件. 一翻译,发现检出 和检入的英文是Check Out Check in 好,打开api help. 在索引中发现这个是关于bom对象的.我要找的 ...

  2. 用java程序完成从kafka队列读取消息到sparkstreaming再从sparkstreaming里把数据导入mysql中

    有一段时间没好好写博客了,因为一直在做一个比较小型的工程项目,也常常用在企业里,就是将流式数据处理收集,再将这些流式数据进行一些计算以后再保存在mysql上,这是一套比较完整的流程,并且可以从数据库中 ...

  3. 腾讯再投500亿元资金助力共同富裕;数学家将π计算到62.8万亿位;Go 1.17正式发布|极客头条...

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 孙胜 出品 | CSDN(ID:CSDNnews) ...

  4. 微软希望使用以太坊区块链来打击盗版;腾讯再投 500 亿元资金助力共同富裕;IT 从业者被纳入新生代农民工 | EA周报...

    EA周报 2021年8月20日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.全球 90 多家组织敦促苹果放弃引入"儿童安全"功能计 ...

  5. 再谈批量下载Modis数据之Google earth engine

    再谈批量下载Modis数据之Google earth engine 最近在学习GEE,就拿Modis数据练个手.本文选用MOD13A1 NDVI产品为例,介绍如何通过gee来批量下载Modis数据到本 ...

  6. n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,……依次类推, 直到所有的人都出圈,请输出依次出圈人的编号.

    88,n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,--依次类推, 直到所有的人都出圈,请输出依次出圈人的编号. 输入 n m 输出 出圈的编号 ...

  7. 2. 输入若干个学生信息(包括学号、姓名和某科成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。 输入输出示例: 1 Zhang 78 2 Wang

    输入若干个学生信息(包括学号.姓名和某科成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出. 输入输出示例: 1 Zhang 78 2 Wang 80 ...

  8. 新一轮车检改革下车检市场的破局探究

    前言:         2020和2022两次车检改革,无疑是两次全方面深层次的车检改革,力度之大,前所未有.一方面回应了车主要求降低车检频率.减少车检费用的诉求.另一方面,也是对当前汽车质量提升.车 ...

  9. 加码 2000 亿还不够,阿里云再建三座超级数据中心加速新基建

    作者 | 伍杏玲 出品 | 程序人生(ID:coder_life) 今年4月,阿里云宣布将在3年内投入2000亿,用于研发云操作系统.服务器.芯片.网络等技术和面向未来的数据中心建设.在 6 月 9 ...

最新文章

  1. 「杂谈」如何系统性地学习生成对抗网络GAN
  2. Vue:echarts的柱状图为什么X轴上的文字不显示?
  3. PAT_B_1074 宇宙无敌加法器
  4. mysql delete删除列,在MySQL中删除我的Key列 (Delete my Key column in MySQL)
  5. python 使用进程池Pool进行并发编程
  6. django——会话追踪技术
  7. 阿里P9谈程序员程序员的青春饭
  8. 30万手表推荐_一年收入20万—30万的小生意,市场上有哪些呢?推荐几个供参考...
  9. 一群喵星人把他家包围了。。
  10. python截图模块_pyscreenshot
  11. [深度学习] 深度学习常见概念
  12. Flink技术到底是什么?Flink原理及深度解析
  13. widget(10、Notification)
  14. Android 讯飞语音合成、语音播报(详细步骤+源码)
  15. iphone/ipad保存图片问题(已解决)
  16. TypeScript代理模式/委托模式
  17. CASIA-FASD活体检测库,MSU-MFSD库和NUAA库
  18. C语言循环结构输出爱心,C语言--循环结构(示例代码)
  19. MySQL主外键设置
  20. Android 利用MediaPlayer实现音乐播放

热门文章

  1. 一个系统测试的完整过程
  2. 关于Vue中$nextTick的作用及实现原理(Vue进阶)
  3. INF443 Amphi 1
  4. 理解Pointers In C++:第一重
  5. antd vue form 手动校验_Ant Design 4.0 的一些杂事儿 - Form 篇
  6. 微信小程序登陆,后端接口实现 - springboot
  7. 信奥要学哪些数学知识 学信奥要不要先学python
  8. python中in的用法
  9. 自媒体新人常见问题汇总-千氪
  10. c调用python第三方库_c/c++调用python程序且含tensorflow第三方库