Web 上的 MediaPipe

2020 年 2 月 17 日 谷歌开发者

文 / Michael Hays 和 Tyler Mullen, MediaPipe 团队


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


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

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



MediaPipe 可视化工具

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

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



MediaPipe 可视化工具的使用演示

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

边缘检测

人脸检测

头发分割

手部追踪


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


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



实现详情

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


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


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



性能

执行 WebAssembly 通常比纯 JavaScript 代码快,但慢于执行本地 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

  • Emscripten 
    https://emscripten.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



— 推荐阅读 —



登录查看更多
0

相关内容

【2020新书】实战R语言4,323页pdf
专知会员服务
100+阅读 · 2020年7月1日
模型优化基础,Sayak Paul,67页ppt
专知会员服务
75+阅读 · 2020年6月8日
【实用书】Python爬虫Web抓取数据,第二版,306页pdf
专知会员服务
117+阅读 · 2020年5月10日
TensorFlow Lite指南实战《TensorFlow Lite A primer》,附48页PPT
专知会员服务
69+阅读 · 2020年1月17日
KGCN:使用TensorFlow进行知识图谱的机器学习
专知会员服务
81+阅读 · 2020年1月13日
【电子书推荐】Data Science with Python and Dask
专知会员服务
43+阅读 · 2019年6月1日
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
开源巨献:Google最热门60款开源项目
程序猿
5+阅读 · 2017年7月12日
Rapid Customization for Event Extraction
Arxiv
7+阅读 · 2018年9月20日
Arxiv
5+阅读 · 2018年6月5日
Arxiv
14+阅读 · 2018年4月18日
VIP会员
相关资讯
用Now轻松部署无服务器Node应用程序
前端之巅
16+阅读 · 2019年6月19日
支持多标签页的Windows终端:Fluent 终端
Python程序员
7+阅读 · 2019年4月15日
百度开源项目OpenRASP快速上手指南
黑客技术与网络安全
5+阅读 · 2019年2月12日
Android P正式发布,你需要尽快做适配了
前端之巅
3+阅读 · 2018年8月7日
教你用Python来玩跳一跳
七月在线实验室
6+阅读 · 2018年1月2日
开源巨献:Google最热门60款开源项目
程序猿
5+阅读 · 2017年7月12日
Top
微信扫码咨询专知VIP会员