(姊妹仨)BlazePalm: 先检手掌再检骨架,虚拟合成数据助力 2.5D 信息输出
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 信息输出相关推荐
- SolidWorks PDM二次开发---检出与检入
五一放假后半段了,今天来聊一下PDM中的检出与检入文件. 一翻译,发现检出 和检入的英文是Check Out Check in 好,打开api help. 在索引中发现这个是关于bom对象的.我要找的 ...
- 用java程序完成从kafka队列读取消息到sparkstreaming再从sparkstreaming里把数据导入mysql中
有一段时间没好好写博客了,因为一直在做一个比较小型的工程项目,也常常用在企业里,就是将流式数据处理收集,再将这些流式数据进行一些计算以后再保存在mysql上,这是一套比较完整的流程,并且可以从数据库中 ...
- 腾讯再投500亿元资金助力共同富裕;数学家将π计算到62.8万亿位;Go 1.17正式发布|极客头条...
「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 孙胜 出品 | CSDN(ID:CSDNnews) ...
- 微软希望使用以太坊区块链来打击盗版;腾讯再投 500 亿元资金助力共同富裕;IT 从业者被纳入新生代农民工 | EA周报...
EA周报 2021年8月20日 每个星期7分钟,元宝带你喝一杯IT人的浓缩咖啡,了解天下事.掌握IT核心技术. 周报看点 1.全球 90 多家组织敦促苹果放弃引入"儿童安全"功能计 ...
- 再谈批量下载Modis数据之Google earth engine
再谈批量下载Modis数据之Google earth engine 最近在学习GEE,就拿Modis数据练个手.本文选用MOD13A1 NDVI产品为例,介绍如何通过gee来批量下载Modis数据到本 ...
- n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,……依次类推, 直到所有的人都出圈,请输出依次出圈人的编号.
88,n个人围成一圈,从第一个人开始报数,数到m的人出列,再由下一个人重新从1开始报数, 数到m的人再出圈,--依次类推, 直到所有的人都出圈,请输出依次出圈人的编号. 输入 n m 输出 出圈的编号 ...
- 2. 输入若干个学生信息(包括学号、姓名和某科成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出。 输入输出示例: 1 Zhang 78 2 Wang
输入若干个学生信息(包括学号.姓名和某科成绩),输入学号为0时输入结束,建立一个单向链表,再输入一个成绩值,将成绩大于等于该值的学生信息输出. 输入输出示例: 1 Zhang 78 2 Wang 80 ...
- 新一轮车检改革下车检市场的破局探究
前言: 2020和2022两次车检改革,无疑是两次全方面深层次的车检改革,力度之大,前所未有.一方面回应了车主要求降低车检频率.减少车检费用的诉求.另一方面,也是对当前汽车质量提升.车 ...
- 加码 2000 亿还不够,阿里云再建三座超级数据中心加速新基建
作者 | 伍杏玲 出品 | 程序人生(ID:coder_life) 今年4月,阿里云宣布将在3年内投入2000亿,用于研发云操作系统.服务器.芯片.网络等技术和面向未来的数据中心建设.在 6 月 9 ...
最新文章
- 「杂谈」如何系统性地学习生成对抗网络GAN
- Vue:echarts的柱状图为什么X轴上的文字不显示?
- PAT_B_1074 宇宙无敌加法器
- mysql delete删除列,在MySQL中删除我的Key列 (Delete my Key column in MySQL)
- python 使用进程池Pool进行并发编程
- django——会话追踪技术
- 阿里P9谈程序员程序员的青春饭
- 30万手表推荐_一年收入20万—30万的小生意,市场上有哪些呢?推荐几个供参考...
- 一群喵星人把他家包围了。。
- python截图模块_pyscreenshot
- [深度学习] 深度学习常见概念
- Flink技术到底是什么?Flink原理及深度解析
- widget(10、Notification)
- Android 讯飞语音合成、语音播报(详细步骤+源码)
- iphone/ipad保存图片问题(已解决)
- TypeScript代理模式/委托模式
- CASIA-FASD活体检测库,MSU-MFSD库和NUAA库
- C语言循环结构输出爱心,C语言--循环结构(示例代码)
- MySQL主外键设置
- Android 利用MediaPlayer实现音乐播放
热门文章
- 一个系统测试的完整过程
- 关于Vue中$nextTick的作用及实现原理(Vue进阶)
- INF443 Amphi 1
- 理解Pointers In C++:第一重
- antd vue form 手动校验_Ant Design 4.0 的一些杂事儿 - Form 篇
- 微信小程序登陆,后端接口实现 - springboot
- 信奥要学哪些数学知识 学信奥要不要先学python
- python中in的用法
- 自媒体新人常见问题汇总-千氪
- c调用python第三方库_c/c++调用python程序且含tensorflow第三方库