论文精读 MediaPipe Hands

news2024/12/30 1:16:29

MediaPipe Hands:On-device Real-time Hand Tracking

MediaPipe手势:设备上的实时手势跟踪

论文地址:2006.10214.pdf (arxiv.org)

源码地址:GitHub - vidursatija/BlazePalm: PyTorch

 

目录

摘要

介绍

架构

BlazePalm Detector

Hand Landmark Model

Dataset and Annotation

Result

Implementation in MediaPipe

Application examples

结论

代码


1 摘要

我们提出了一种实时的设备手跟踪解决方案,该解决方案可以从AR/VR应用的单个RGB相机预测人类的手骨架。我们的管道由两个模型组成:

  • 1)手掌检测器,它为手掌提供一个边界框
  • 2)hand landmarks 模型,它预测手掌骨架

它是通过MediaPipe[12]实现的,这是一个用于构建跨平台ML解决方案的框架。所提出的模型和流水线结构证明了移动GPU上的实时推理速度和高预测质量。MediaPipe Hands的源代码为MediaPipe Studio (google.com).

[12] Camillo Lugaresi,Jiuqiang Tang,Hadon Nash,Chris Mc-Clanahan,Esha Uboweja,Michael Hays,Fan Zhang,Chuo-Ling Chang,Ming Guang Yong,Juhyun Lee,Wan-TehChang,Wei Hua,Manfred Georg,and Matthias Grundmann.Mediapipe:A framework for building perception pipelines.volume abs/1906.08172,2019.

图1:渲染的手跟踪结果

  • (左):用不同色调呈现相对深度的hand landmarks。圆圈越轻、越大,地标就越靠近相机。
  • (右):像素3上的实时多手跟踪。

2 介绍

手部跟踪是为AR/VR中的交互和通信提供自然方式的重要组成部分,也是行业中一个活跃的研究课题[2][15]。基于视觉的手部姿态估计已经研究了多年。以前的大部分工作需要专门的硬件,例如深度传感器[13][16][17][3][4]。其他解决方案不够轻,无法在商品移动设备上实时运行[5],因此仅限于配备强大处理器的平台。在本文中,我们提出了一种新的解决方案,该解决方案不需要任何额外的硬件,并在移动设备上实时执行。我们的主要贡献是:

  1. 一个高效的两阶段手部跟踪管道,可以在移动设备上实时跟踪多只手。
  2. 一种手部姿势估计模型,能够仅使用RGB输入预测2.5D手部姿势。
  3. 以及开源手跟踪管道,作为各种平台上的现成解决方案,包括Android、iOS、Web(Tensorflow.js)和台式电脑。

3 架构

我们的手部跟踪解决方案利用了一个ML管道,该管道由两个协同工作的模型组成:

  • 一种手掌检测器,对全输入图像进行操作,并通过定向的手边界框定位手掌。
  • 在手掌检测器提供的裁剪的手边界框上操作并返回高保真度2.5D界标的手界标模型。

将精确裁剪的手掌图像提供给手部地标模型大大减少了对数据分析(如旋转、平移和缩放)的需求,并使网络能够将其大部分容量用于地标定位的准确性。在实时跟踪场景中,我们从前一帧的地标预测中导出一个边界框,作为当前帧的输入,从而在每一帧上应用检测器。相反,检测器仅应用于第一帧或当手部预测指示手部丢失时。

3.1 BlazePalm Detector

为了检测手部的初始位置,我们使用了一个针对移动实时应用优化的单次检测模型,类似于BlazeFace[1],也可在MediaPipe[12]中获得。检测手部是一项非常复杂的任务:我们的模型必须在大尺度跨度(~20x)的各种手部尺寸上工作,并且能够检测被遮挡和自遮挡的手部。尽管人脸有高对比度的图案,例如眼睛和嘴巴周围,但手上没有这些特征,因此很难单独从视觉特征中可靠地检测到它们。

我们的解决方案使用不同的策略来解决上述挑战。

首先,我们训练手掌检测器而不是手检测器,因为估计手掌和拳头等刚性物体的边界框比检测有关节手指的手要简单得多。此外,由于手掌是较小的对象,非最大值抑制算法即使在双手自遮挡的情况下也能很好地工作,比如握手。此外,手掌可以只使用方形绑定框(SSD)进行建模,忽略其他纵横比,从而将锚的数量减少3~5倍。

其次,我们使用类似于FPN[9]的编码器-解码器特征提取器来实现更大的场景上下文感知,即使对于小对象也是如此。

图2:手掌探测器模型架构 

最后,我们最大限度地减少了训练过程中的焦点损失(Focal loss for dense object detection),以支持由高尺度方差引起的大量锚。高级手掌探测器架构如图2所示。我们在表1中对我们的设计元素进行了消融研究。

3.2 Hand Landmark Model

在对整个图像进行手掌检测后,我们随后的 hand landmark 模型通过回归对检测到的手部区域内的21个2.5D坐标进行精确的陆地标记定位。该模型学习一致的手部内部姿势表示,即使对部分可见的手部和自遮挡也很稳健。该模型有三个输出(见图3):

图3:我们的手动地标模型的架构。该模型有三个输出,共享一个特征提取器。每个头部都由标记为相同颜色的相应数据集进行训练。详见第2.2节。

  • 由x、y和相对深度组成的21个手部标志。
  • 指示手在输入图像中存在的概率的手标志。
  • 利手性的二元分类,例如左手或右手。

对于21个地标,我们使用与[14]相同的拓扑结构。2D坐标是从真实世界的图像和合成数据集中学习的,如下所述,腕点的相对深度w.r.t.仅从合成图像中学习。为了从跟踪失败中恢复,我们开发了类似于[8]的模型的另一个输出,以降低所提供的作物中确实存在合理对准的手的事件概率。如果分数低于阈值,则检测器被触发以重新跟踪。手性是AR/VR中使用手进行有效交互的另一个重要属性。这对于每只手都与独特功能相关联的一些应用程序尤其有用。因此,我们开发了一个二进制分类头来预测输入手是左手还是右手。我们的设置针对实时移动GPU推理,但我们也设计了更轻和更重的模型版本,以解决移动设备上的CPU推理问题,这些移动设备分别缺乏适当的GPU支持和在桌面上运行的更高精度要求。

4 Dataset and Annotation

为了获得地面实况数据,我们创建了以下数据集来解决问题的不同方面:

  • 野外数据集:该数据集包含6K的各种图像,如地理多样性、各种照明条件和手部外观。这个数据集的局限性在于它不包含复杂的手关节。
  • 内部收集的手势数据集:该数据集包含10K张图像,涵盖了所有可能的手势的不同角度。这个数据集的局限性在于,它只收集了30个人,背景变化有限。野外数据集和内部数据集相互补充,以提高稳健性。
  • 合成数据集:为了更好地覆盖可能的手部姿势并为深度提供额外的监督,我们在各种背景下绘制了一个高质量的合成手部模型,并将其映射到相应的3D坐标。我们使用了一个商业3Dhand模型,该模型配有24块骨头,包括36个混合形状,可以控制手指和手掌的厚度。该模型还提供了5种不同肤色的纹理。我们创建了手部姿势转换的视频序列,并从视频中采样了10万个图像。我们用一个高动态范围的照明环境和三个不同的相机渲染了每个姿势。示例见图4。

对于手掌检测器,我们只在野外数据集中使用,这足以定位手,并且在外观上提供了最高的多样性。然而,所有数据集都用于训练hand landmark模型。我们用21个landmarks对真实世界的图像进行注释,并使用投影的地面实况3D关节来合成图像。对于手的存在,我们选择真实世界图像的子集作为正示例,并在该区域上采样,不包括注释的手区域作为负示例。对于利手性,我们用利手性对一组真实世界的图像进行注释,以提供这样的数据。

图4:我们的数据集示例。

  • (顶部):带注释的真实世界图像。
  • (底部):带有地面实况注释的渲染合成手图像。详见第3节。 

5 Result

对于手部里程碑模型,我们的实验表明,真实世界和合成数据集的组合提供了最佳结果。详见表2。我们只根据真实世界的图像进行评估。除了质量改进之外,使用大型合成数据集进行训练还可以减少帧间的视觉抖动。这一观察结果使我们相信,我们的真实世界数据集可以被放大以更好地泛化。

表1:手掌探测器的消融研究手掌探测器的设计元素(解码器和损失函数)。

 

表2:我们的模型从不同数据集训练的结果。

表3:手动地标模型性能特征

我们的目标是在移动设备上实现实时性能。我们对不同尺寸的模型进行了实验,发现“完整”模型(见表3)在质量和速度之间提供了良好的权衡。增加模型容量只会在质量上带来微小的改进,但速度会显著降低(详见表3)。我们使用TensorFlow Lite GPU后端进行设备上推理[6]。

6 Implementation in MediaPipe

使用MediaPipe[12],我们的手跟踪管道可以构建为模块化组件的有向图,称为计算器。Mediapipe提供了一组可扩展的计算器,用于解决各种设备和平台上的模型推理、媒体处理和数据转换等任务。裁剪、渲染和神经网络计算等单独的计算器被进一步优化,以利用GPU加速。例如,我们在大多数现代手机上使用TFLite GPU推理。

图5:当触发手部检测模型时,hand landmark 模型输出控制。这种行为是通过MediaPipes强大的同步构建块实现的,从而实现ML管道的高性能和最佳吞吐量。 

我们的手部跟踪MediaPipe图如图5所示。该图由两个子图组成,一个子图用于手部检测,另一子图用于landmark计算。MediaPipe提供的一个关键优化是,手掌可以根据需要检测运行(很少),从而节省大量计算。我们通过从前一帧中计算的手部着陆标记推导当前视频帧中的手部位置来实现这一点,从而无需在每一帧上应用手掌检测器。为了鲁棒性,手跟踪器模型还输出一个额外的标量,该标量捕获手在输入裁剪中存在并合理对齐的置信度只有当置信度低于某个阈值时,手部检测模型才重新应用于下一帧。

7 Application examples

图6:实时手势识别的屏幕截图。手势的语义呈现在图像的顶部。 

图7:基于我们预测的手部骨骼的实时AR效果示例。 

我们的手跟踪解决方案可以很容易地用于许多应用,如手势识别和AR效果。在预测的手骨架之上,我们使用一个简单的算法来计算手势,见图6。首先,每个手指的状态,例如弯曲或笔直,是通过关节的累积角度来确定的。然后,我们将一组手指状态映射到一组预定义的手势。这种简单而有效的技术使我们能够以合理的质量估计基本的静态手势。除了静态手势识别之外,还可以使用一系列地标来预测动态手势。另一个应用程序是在骨骼顶部应用AR效果。基于手的AR效果目前很受欢迎。在图7中,我们展示了一个霓虹灯风格的手骨架的AR渲染示例。

8 结论

在本文中,我们提出了MediaPipe Hands,这是一种端到端的手部跟踪解决方案,可在多个平台上实现实时性能。我们的管道在没有任何专门硬件的情况下预测2.5D地标,因此可以轻松地部署到商品设备上。我们开源了该管道,以鼓励研究人员和工程师利用我们的管道构建手势控制和创造性的AR/VR应用程序。

代码

import cv2
import mediapipe as mp

mp_drawing = mp.solutions.drawing_utils
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(
        static_image_mode=False,
        max_num_hands=2,
        min_detection_confidence=0.75,
        min_tracking_confidence=0.75)

cap = cv2.VideoCapture(0)
while True:
    ret,frame = cap.read()
    frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
    frame= cv2.flip(frame, 1)
    results = hands.process(frame)
    frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

    if results.multi_hand_landmarks:
      for hand_landmarks in results.multi_hand_landmarks:
        print('hand_landmarks:', hand_landmarks)
        mp_drawing.draw_landmarks(
            frame, hand_landmarks, mp_hands.HAND_CONNECTIONS)
    cv2.imshow('MediaPipe Hands', frame)
    if cv2.waitKey(1) & 0xFF == 27:
        break

cap.release()

>>> 如有疑问,欢迎评论区一起探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1206929.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

振南技术干货集:深入浅出的Bootloader(1)

注解目录 1、烧录方式的更新迭代 1.1 古老的烧录方式 (怀旧一下,单片机高压烧录器。) 1.2 ISP 与ICP 烧录方式 (还记得当年我们玩过的 AT89S51?) 1.3 更方便的 ISP 烧录方式 1.3.1串口 ISP (是 STC 单片机成就了我们,还是我们成就了…

Python 列表List数据复杂操作

一、将列表数据每2个取一个数据添加到新列表中 prov_code [130100000000, 石家庄市, 130200000000, 唐山市, 130300000000, 秦皇岛市, 130400000000,邯郸市,130500000000, 邢台市, 130600000000, 保定市, 130700000000, 张家口市, 130800000000,承德市,130900000000, 沧州市, …

基于51单片机的智能窗控制系统设计

**单片机设计介绍, 基于51单片机的智能窗控制系统设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于51单片机的智能窗控制系统通常是指通过单片机控制窗户的开关和调节,在实现基本的开关功能的同时&…

汽车OBD2蓝牙诊断仪解决方案程序开发

1、因TL718已经为你建立了物理层、数据链层和部分应用层的协议,所以只要OBD2标准应用层协议文本,ISO15031-5 或 SAE J1979(这两个协议是相同的内容)。 2、TL718诊断接口 1 套或用TL718芯片自建电路。3、家用PC机电脑一台。4、安…

@Accessors使用和详解

一、什么是Accessors注解? RequiredArgsConstructor是Lombok的一个注解,简化了我们对setter和getter方法操作。它可以作用在类上,也可以作用在类的单个属性上。修饰类的时候对这个类的所有属性都是有效的,修饰单个属性的时候,只…

element ui + echarts点击表格显示对应的图形

一、vue封装饼图、树状图、雷达图等组件 目录 resize.js需要utils.js utils.js import { parseTime } from ./yunhis/*** 表格时间格式化*/ export function formatDate(cellValue) {if (cellValue null || cellValue "") return "";var date new Da…

使用yolov8的一些错误

出现这个报错的时候: AutoInstall will run now for ultralytics.nn.modules.conv but this feature will be removed in the future. Recommend fixes are to train a new model using the latest ultralytics package or to run a command with an official YOLO…

新能源充电桩物联网应用之工业4G路由器

新能源充电桩是智慧城市建设中不可缺少且可持续发展的重要设施,而工业4G路由器物联网应用为其提供了更加高效、智能、实时的管理方式。充电桩通过工业4G路由器可以与充电运营商的管理中心建立稳定的连接,实现双向数据传输,为用户提供优质的充…

浪潮服务器安装操作系统

文章目录 一、准备工作1.1 制作启动 U 盘 一、准备工作 一开始认为将镜像文件导入U盘即可,但实操中并不行,得首先将U盘制作成启动盘才行。   首先需要确定安装的版本,我这里要安装的是 CentOS 7.9 版本,镜像文件为 CentOS-7-x86…

JSP教务管理系统eclipse定制开发mysql数据库BS模式java编程servlet

一、源码特点 java 教务管理系统是一套完善的web设计系统 系统采用serlvetdaobean 模式开发,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,eclipse开发,数…

BUUCTF 爱因斯坦 1

BUUCTF:https://buuoj.cn/challenges 题目描述: 下载附件,解压得到一张.jpg图片。 密文: 解题思路: 1、因为题目没有什么提示,我们就一一尝试。将图片放到StegSolve中,在查看图片的File Format时&#x…

盘点60个Python网站项目Python爱好者不容错过

盘点60个Python网站项目Python爱好者不容错过 学习知识费力气,收集整理更不易。 知识付费甚欢喜,为咱码农谋福利。 链接:https://pan.baidu.com/s/1mY8pNUpZEV0Q-5-UvJTtBA?pwd8888 提取码:8888 项目名称 (No longermainta…

【史上最全】涵盖所有「存图方式」与「最短路算法」

题目描述 这是 LeetCode 上的 「1334. 阈值距离内邻居最少的城市」 ,难度为 「中等」。 Tag : 「最短路」、「图」 有 个城市,按从 到 编号。 给你一个边数组 edges,其中 代表 和 两个城市之间的双向加权边,距离阈值是一个整…

优化千万级数据表的实用指南

文章目录 优化千万级数据表的一次实践一、查询耗时太长二、优化解决方案三、优化后查询速度 优化千万级数据表的一次实践 一、查询耗时太长 随着数据量的增长,数据库性能往往成为关注的焦点。特别是在处理千万级数据表时,查询性能往往成为一个挑战。在这…

服务器数据恢复—服务器发生故障导致数据丢失如何恢复服务器数据?

服务器常见故障: 硬件故障:磁盘、板卡、电源故障等。 软件故障:操作系统崩溃、程序运行错误等。 入侵破坏:加密、删除服务数据等。 不可控力:浸水、火烧、倒塌等。 误操作:格式化、删除、覆盖等。 如何减少…

Cesium和Three.js的初步认识

一、Threejs和Cesium的对比 相同点: 都是基于WebGL技术开发的Javascript库,用于在浏览器中创建和显示动画3D计算机图形。 不同点: Threejs:受众面比较广,是封装了webgl的一些底层用法,让初学者更容易上…

[linux网络实验] 多网卡绑定

聚合链路技术 什么是bonding 提供了一种将多个网络接口设备绑定到一个网络接口的方法。这可用于网络负载平衡和网络冗余; 实现将两个网卡虚拟成一个网卡。这种聚合设备看起来就像一个以太网接口设备。通俗地说,这意味着两个网卡拥有相同的 IP 地址&am…

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和

代码随想录算法训练营第五十三天 | LeetCode 1143. 最长公共子序列、1035. 不相交的线、53. 最大子数组和 文章链接:最长公共子序列、不相交的线、最大子数组和 视频链接:最长公共子序列、不相交的线、最大子数组和 1. LeetCode 1143. 最长公共子序列 1…

WMS系统出库管理:功能、流程与优势

一、WMS系统出库管理概述 WMS系统是一种用于仓库管理的信息系统,它涵盖了从货物入库、在库管理到出库的全过程。在WMS系统中,出库管理是非常重要的一环,它涉及到的功能包括订单处理、拣货、打包、发货等。通过WMS系统的出库管理,…

世界互联网大会|美创科技新一代 数据安全管理平台,携五大新特性发布亮相

11月7日,2023年世界互联网大会“互联网之光”博览会在浙江乌镇开幕。今年是博览会办展第十年,重点突出国际性、创新性、引领性。在新产品新技术发布活动中,美创科技全新升级的新一代 数据安全管理平台(简称:DSM Cloud&…