您的位置 首页 TMT

Web 上的 MediaPipe

文/MichaelHays和TylerMullen,MediaPipe团队 MediaPipe是用于构建跨平台多模态ML流水线应用的框架。我们之前已在移动设备(Android,iOS)和边缘设备(如GoogleCoral)上,演示了以MediaPipe计算图构建与运行ML流水线。

文 / Michael Hays 和 Tyler Mullen,MediaPipe 团队

Web 上的 MediaPipe

MediaPipe是用于构建跨平台多模态 ML 流水线应用的框架。我们之前已在 移动设备 (Android,iOS) 和 边缘设备(如 Google Coral) 上,演示了以 MediaPipe 计算图构建与运行 ML 流水线。

在本文中,我们很高兴能够展示在 Web 浏览器中实时运行的 MediaPipe 计算图,由 WebAssembly 提供支持,并采用 XNNPack ML 推理库加速。我们将预览功能集成到基于 Web 的可视化工具 (Visualizer) 中,为快速迭代计算图设计提供了一个 Playground。由于我们直接在浏览器中运行所有内容,所有视频一直在用户本地的计算机上,您可以实时的在网络摄像流中进行迭代 测试(即将支持任意视频格式)。

Web 上的 MediaPipe

图 1 :可视化工具中运行的 MediaPipe 人脸检测示例

MediaPipe 可视化工具

MediaPipe 可视化工具(参见图 2)的托管地址为 viz.mediapipe.dev。可以通过将代码粘贴到“编辑器”选项卡或将计算图文件上传到可视化工具中来检查 MediaPipe 计算图。用户可以使用鼠标和滚轮来平移和放大计算图的图形化表示,并可看到编辑器中更改的实时响应。

Web 上的 MediaPipe

图 2:托管于 https://viz.mediapipe.dev上的 MediaPipe 可视化工具

MediaPipe 可视化工具的使用演示

我们用现有的 MediaPipe 计算图示例创建了几个可视化工具演示。您可通过 Chrome 浏览器访问以下地址,在可视化工具中查看:

边缘检测

人脸检测

Web 上的 MediaPipe

头发分割

手部追踪

您可通过点击编辑器顶部的奔跑小人图标,在浏览器中逐一运行这些演示(如果加载的是非演示工作区,则该图标会显示为灰色):

Web 上的 MediaPipe

点击后会打开一个新的选项卡以运行当前的计算图(需要使用网络摄像头)。

实现详情

为了最大程度地提高可移植性,我们使用 Emen将所有必需的 C++ 代码直接编译成 WebAssembly,这是专为 Web 浏览器设计的特殊形式的底层汇编代码。运行时,Web 浏览器会创建虚拟机,系统会在其中快速地执行这些指令,速度比执行传统的 Java 代码快得多。

我们还为 Java 和 C++ 的通信创建了简单的 API,从而使我们可以直接在 Java 中做出更改并与 MediaPipe 计算图交互。对于熟悉 Android 开发的读者来说,您可以将此视为类似于使用 Android NDK 编写 C++/Java 桥接模式的过程。

最后,我们将所有必要的演示资源(ML 模型和辅助文本/数据文件)打包成独立的二进制数据包,用于在运行时加载。对于图形和渲染来说,我们允许 MediaPipe 直接自动进入 WebGL,以便大多数基于 OpenGL 的计算器都可以在网页上“正常运行”。

性能

执行 WebAssembly 通常比纯 Java 代码快,但慢于执行本地 C++ 代码,所以我们做出一些优化以提供更好的用户体验。我们尽可能使用 GPU 执行图像操作,并选择使用所有 ML 模型中最轻量的版本(为速度舍弃一些质量)。然而,由于计算着色器 (Compute Shader) 尚未在 Web 中广泛应用,所以我们无法轻松利用 TensorFlow Lite GPU 进行机器学习推理,而由此产生的 CPU 推理通常会成为重要的性能瓶颈。因此,为了缓解这种情况,我们通过使用 XNNPack ML 推理库来对 “ TfLiteInferenceCalculator” 进行自动增强,从而为应用带来 2 到 3 倍的速度提升。

目前,基于 Web 的 MediaPipe 中存在一些重要限制:

仅可使用上述演示计算图中的计算器

用户必须编辑其中一个计算图模板;无法从头开始构建自己的内容

用户无法添加或更改资源

必须使用单线程的图执行程序(即 ApplicationThreadExecuto)

不支持 GPU 上的 TensorFlow Lite 推理

我们计划在这个新平台上持续构建,尽可能多地消除上述的限制,为开发人员提供更多控制权(例如,对资源进行动态管理)。请关注 Google 开发者上的 MediaPipe 系列内容。

致谢

感谢 Marat Dukhan、Chuo-Ling Chang、Jianing Wei、Ming Guang Yong 和 Matthias Grundmann 对此文作出的贡献。 返回搜狐,查看更多

MediaPipe https://mediapipe.dev

移动设备 https://developers.googleblog.com/2019/12/object-detection-and-tracking-using-mediapipe.html

边缘设备 https://developers.googleblog.com/2019/11/updates-from-coral-mendel-linux-4.html#more

MediaPipe 计算图 https://mediapipe.readthedocs.io/en/latest/concepts.html#graph

XNNPack ML 推理库 https://github.com/google/XNNPACK

人脸检测示例 https://viz.mediapipe.dev/demo/face_detection

MediaPipe 计算图示例 https://github.com/google/mediapipe/blob/master/mediapipe/docs/examples.md

边缘检测 http://viz.mediapipe.dev/demo/edge_detection

人脸检测 https://viz.mediapipe.dev/demo/face_detection

头发分割 http://viz.mediapipe.dev/demo/hair_segmentation

手部追踪 http://viz.mediapipe.dev/demo/hand_tracking

Emen https://emen.org/

WebAssembly https://webassembly.org/

WebGL https://www.khronos.org/webgl/

NNPack ML https://github.com/google/XNNPACK

TfLiteInferenceCalculator https://github.com/google/mediapipe/blob/master/mediapipe/calculators/tflite/tflite_inference_calculator.cc

责任编辑:

作者: 网站小编

这家伙很懒什么都没说!

为您推荐

返回顶部