发布者:Ivan Grishchenko,Valentin Bazarevsky,Eduard Gabriel Bazavan,Na Li,Jason Mayes, Google
姿势检测是了解视频和图像中人体更多信息的一个重要步骤。我们现有的模型支持2D姿势估计已经有一段时间了,你们中的许多人可能已经尝试过了。
今天,我们在TF.js的姿势检测API中推出了第一个3D模型。3D姿势估计为健身、医疗、运动捕捉等应用开辟了新的设计机会--在许多这些领域中,我们看到TensorFlow.js社区的兴趣越来越大。这方面的一个很好的例子是3D运动捕捉来驱动浏览器中的角色动画。
![]() |
使用BlazePose GHUM进行3D动作捕捉,作者Richard Yee (经许可使用,现场演示可在3d.kalidoface.com获得) |
这个社区演示使用了由MediaPipe和TensorFlow.js驱动的多个模型(即FaceMesh、BlazePose和HandPose)。更棒的是,不需要安装任何应用程序,因为你只需要访问一个网页就能享受这种体验。因此,考虑到这一点,让我们了解更多,并看看这个新模式的运作情况
![]() |
尝试一下现场演示! |
安装
姿势检测API为BlazePose GHUM提供了两个运行时间,即MediaPipe运行时间和TensorFlow.js运行时间。
要安装API和运行时库,您可以在您的html文件中使用<script>
标签或使用NPM。
通过脚本标签。
<script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/pose-detection"></script><!-- Include below scripts if you want to use TF.js runtime. --><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-core"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-converter"></script><script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl"></script><!-- Optional: Include below scripts if you want to use MediaPipe runtime. --><script src="https://cdn.jsdelivr.net/npm/@mediapipe/pose"></script>
通过NPM。
yarn add @tensorflow-models/pose-detection# Run below commands if you want to use TF.js runtime.yarn add @tensorflow/tfjs-core @tensorflow/tfjs-converteryarn add @tensorflow/tfjs-backend-webgl# Run below commands if you want to use MediaPipe runtime.yarn add @mediapipe/pose
要在你的JS代码中引用API,这取决于你如何安装该库。
如果通过脚本标签安装,你可以通过全局命名空间poseDetection
来引用该库。
如果通过NPM安装,你需要先导入库。
import * as poseDetection from '@tensorflow-models/pose-detection';// Uncomment the line below if you want to use TF.js runtime.// import '@tensorflow/tfjs-backend-webgl';// Uncomment the line below if you want to use MediaPipe runtime.// import '@mediapipe/pose';
自己试试吧!
首先,你需要创建一个检测器。
const model = poseDetection.SupportedModels.BlazePose;const detectorConfig = { runtime: 'mediapipe', // or 'tfjs' modelType: 'full'};detector = await poseDetection.createDetector(model, detectorConfig);
选择一个适合你的应用需求的modelType,有三个选项供你选择:lite
,full
, 和heavy
。从lite
到heavy
,准确度增加,而推理速度下降。请尝试我们的实时演示来比较不同的配置。
一旦你有了一个检测器,你可以传入视频流来检测姿势。
const video = document.getElementById('video');const poses = await detector.estimatePoses(video);
如何使用输出?poses
代表图像帧中检测到的pose
预测数组。对于每个pose
,它包含keypoints
和keypoints3D
。keypoints
与我们之前推出的二维模型相同,它是一个由33个关键点对象组成的数组,每个对象都有像素单位的x、y。
keypoints3D
是一个带有33个关键点对象的额外数组,每个对象都有x、y、z。x、y、z的单位是米。人的模型就像他们在一个2m x 2m x 2m的立方体空间中一样。每个轴的范围从-1到1(因此总delta为2米)。这个三维空间的原点是臀部中心(0,0,0)。从原点出发,如果向摄像机靠近,则Z为正,如果远离摄像机则为负。请看下面的输出片段的例子。
[ { score: 0.8, keypoints: [ {x: 230, y: 220, score: 0.9, name: "nose"}, {x: 212, y: 190, score: 0.8, name: "left_eye"}, ... ], keypoints3D: [ {x: 0.5, y: 0.9, z: 0.06 score: 0.9, name: "nose"}, ... ] }]
你可以参考我们的ReadMe以了解更多关于API的细节。
当您开始使用BlazePose GHUM进行游戏和开发时,我们将感谢您的反馈和贡献。如果您使用这个模型做了什么,请在社交媒体上标明#MadeWithTFJS,这样我们就能找到您的作品,因为我们很想看到您的作品。
模型的深入研究
建立我们的姿势模型的3D部分的关键挑战是获得真实的、在野外的3D数据。与可以通过人类注释获得的二维数据相比,准确的人工三维注释成为一项独特的挑战。它需要一个实验室设置或带有深度传感器的专业硬件来进行三维扫描--这为在数据集中保持良好的人类和环境多样性带来了额外的挑战。许多研究人员选择的另一种方法是建立一个完全合成的数据集,这又引入了另一个挑战,即对现实世界图片的领域适应。
我们的方法是基于一个叫做GHUM的统计学三维人体模型,该模型是用大量的人体形状和运动的语料库建立的。为了获得三维人体姿势的基础真相,我们将GHUM模型拟合到我们现有的二维姿势数据集上,并在公制空间中用现实世界的三维关键点坐标对其进行扩展。在拟合过程中,GHUM的形状和姿态变量被优化,从而使重建的模型与图像证据相一致。这包括二维关键点和剪影的语义分割对齐,以及形状和姿势的正则化条款。更多的细节见三维姿势和形状推理的相关工作(HUND,THUNDR)。
![]() |
输入图像的GHUM拟合样本。从左到右:原始图像、三维GHUM重建(不同的视角)和投射在原始图像上的混合结果。 |
由于三维到二维投影的性质,三维中的多个点在二维中可以有相同的投影(即X和Y相同但Z不同)。因此,对于给定的二维注释来说,拟合的结果可能是几个真实的三维身体姿势。为了尽量减少这种模糊性,除了二维身体姿势外,我们还要求注释者提供姿势骨架边缘之间的深度顺序,在那里他们是确定的(查看下图)。这项任务被证明是一项简单的任务(与真正的深度注释相比),显示了注释者之间的高度一致性(交叉验证的98%),并有助于将拟合GHUM重建的深度排序误差从25%减少到3%。
![]() |
"深度顺序 "注释:较宽的边缘角表示离相机较近的角(例如,在两个例子中,人的右肩比左肩更靠近相机)。 |
BlazePose GHUM采用了两步检测器-追踪器方法,追踪器在裁剪过的人体图像上操作。因此,模型被训练来预测三维身体姿态,以公制空间的相对坐标为基础,原点在主体的臀部中心。
MediaPipe与TF.js的运行时间对比
使用每种运行时都有一些优点和缺点。如下面的性能表所示,MediaPipe运行时在桌面、笔记本电脑和安卓手机上提供更快的推理速度。TF.js运行时在iPhone和iPad上提供更快的推理速度。TF.js运行时也比MediaPipe运行时小约1MB。
MacBook Pro 15" 2019。 英特尔核心i9。 AMD Radeon Pro Vega 20图形。 (FPS) | iPhone 11 (FPS) | Pixel 5 (FPS) | 台式机 英特尔i9-10900K。Nvidia GTX 1070 GPU。 (FPS) | |
MediaPipe运行时间 使用WASM和GPU加速器。 | 75 | 67 | 34 | 9 | 6 | 不适用 | 25 | 21 | 8 | 150 | 130 | 97 |
TFJS运行时间 有WebGL后端。 | 52 | 40 | 24 | 43 | 32 | 22 | 14 | 10 | 4 | 42 | 35 | 29 |
BlazePose GHUM在不同设备和运行时的推理速度。每个单元格中的第一个数字是精简模型的数字,第二个数字是完整模型的数字,第三个数字是重型模型的数字。
鸣谢
我们要感谢参与创建BlazePose GHUM 3D的同事:Andrei Zanfir、Cristian Sminchisescu、Tyler Zhu、MediaPipe的其他贡献者。张秋玲、Michael Hays、明光勇、Matthias Grundmann,以及参与TensorFlow.js姿势检测API的人。Ahmed Sabie和Ping Yu,当然还有那些用这些模型做出惊人工作的社区。Richard Yee。