作者 | MediaPipe 团队

来源 | TensorFlow(ID:tensorflowers)

【导读】我爱计算机视觉(aicvml)CV君推荐道:“虽然它是出自Google Research,但不是一个实验品,而是已经应用于谷歌多款产品中,还在开发中,将来也许会成为一款重要的专注于媒体的机器学习应用框架,非常值得做计算机视觉相关工程开发的朋友参考。”

MediaPipe 是一款由 Google Research 开发并开源的多媒体机器学习模型应用框架。在谷歌,一系列重要产品,如 YouTube、Google Lens、ARCore、Google Home 以及 Nest,都已深度整合了 MediaPipe。

注:MediaPipe GitHub 链接
https://github.com/google/mediapipe

作为一款跨平台框架,MediaPipe 不仅可以被部署在服务器端,更可以在多个移动端 (安卓和苹果 iOS)和嵌入式平台(Google Coral 和树莓派)中作为设备端机器学习推理 (On-device Machine Learning Inference)框架。

为什么需要 MediaPipe?

一款多媒体机器学习应用的成败除了依赖于模型本身的好坏,还取决于设备资源的有效调配、多个输入流之间的高效同步、跨平台部署上的便捷程度、以及应用搭建的快速与否。

基于这些需求,谷歌开发并开源了 MediaPipe 项目。除了上述的特性,MediaPipe 还支持 TensorFlow 和 TF Lite 的推理引擎(Inference Engine),任何 TensorFlow 和 TF Lite 的模型都可以在 MediaPipe 上使用。同时,在移动端和嵌入式平台,MediaPipe 也支持设备本身的 GPU 加速。

MediaPipe 演示案例

在今年六月举行的 CVPR 会议上,Google Research 开源了 MediaPipe 的预览版。为方便开发者学习和使用,我们提供了多个桌面系统和移动端的示例。作为一款应用于多媒体的框架,现已开源的安卓和苹果 iOS 示例包括:

  • 3D 手部标志追踪(3D Hand Tracking)

  • BlazeFace 人脸检测(Face Detection)
  • 改换发色(Hair Segmentation)
  • 物体检测(Object Detection)

              3D 手部标志追踪                 

人脸检测

改换发色 

物体检测

MediaPipe 主要概念

MediaPipe 的核心框架由 C++ 实现,并提供 Java 以及 Objective C 等语言的支持。MediaPipe 的主要概念包括数据包(Packet)、数据流(Stream)、计算单元(Calculator)、图(Graph)以及子图(Subgraph)。数据包是最基础的数据单位,一个数据包代表了在某一特定时间节点的数据,例如一帧图像或一小段音频信号;数据流是由按时间顺序升序排列的多个数据包组成,一个数据流的某一特定时间戳(Timestamp)只允许至多一个数据包的存在;而数据流则是在多个计算单元构成的图中流动。MediaPipe 的图是有向的——数据包从数据源(Source Calculator或者 Graph Input Stream)流入图直至在汇聚结点(Sink Calculator 或者 Graph Output Stream) 离开。

MediaPipe 在开源了多个由谷歌内部团队实现的计算单元(Calculator)的同时,也向用户提供定制新计算单元的接口。创建一个新的 Calculator,需要用户实现 Open(),Process(),Close() 去分别定义 Calculator 的初始化,针对数据流的处理方法,以及 Calculator 在完成所有运算后的关闭步骤。为了方便用户在多个图中复用已有的通用组件,例如图像数据的预处理、模型的推理以及图像的渲染等, MediaPipe 引入了子图(Subgraph)的概念。因此,一个 MediaPipe 图中的节点既可以是计算单元,亦可以是子图。子图在不同图内的复用,方便了大规模模块化的应用搭建。
注:计算单元 链接 
https://github.com/google/mediapipe/tree/master/mediapipe/calculators

想了解更多 MediaPipe 的概念和使用方法,请移步我们的 GitHub 文档。同时,我们也提供了MediaPipe 移动端的使用教程及示例代码:
  • MediaPipe 苹果 iOS Hello World! 教程和代码
  • MediaPipe 安卓 Hello World! 教程和代码
机器感知实例 —— 手部关键点追踪

一个使用 MediaPipe 的实例是在图片或视频中检测手部关键点。我们最近在 谷歌 AI 博客上发表了一篇相关文章: “使用 MediaPipe 实现设备端实时手部追踪”介绍了我们如何使用 MediaPipe 来搭建这个应用。
手部关键点追踪解决方案有两部分:手掌检测(Hand Detection)及手部关键点回归 (Hand Landmark Regression)。
本文将详细讲解第一部分:手掌检测。详解第二部分手部关键点检测的文章,将于近期在谷歌 TensorFlow 的微信公众号发表。请从 MediaPipe 下载手部关键点追踪的模型和图。手掌检测应用的输出结果如下图所示:

手掌模型检测教程 
我们训练了基于SSD 架构的 BlazePalm 模型来进行手掌检测,并对移动端进行了优化。手部检测相较人脸检测来说,是一个更加困难的问题,例如:手的大小角度会有较大范围的变动,手没有显著的纹理结构,以及存在更多遮挡的情景。因此,我们的解决方案采取了不同的思路。我们训练的模型只对手掌区域进行检测,其好处体现在以下几点:首先,手掌相对于整个手而言是一个较为受限的目标,并且由于手掌的区域较小,我们的非极大抑制(Non-Maximum Suppression)算法也会有更好的效果,例如,在两只手相握的情况下,即使手的大部分区域重叠在一起,两只手掌的区域依然可以被区分开;其次,手掌的边框可以用正方形来描述,这样可以减少 3-5 倍数量的锚定位(Anchor),从而最大化模型的容量;最后,经过实验,我们发现使用focal loss可以获得最好的检测结果。该模型在我们的测试数据集上可以达到 95.7% 的平均准确率。
注:MediaPipe BlazePlam 手掌检测应用 链接
https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_detection_mobile_gpu.md

我们使用 MediaPipe 来做移动端模型推理的框架,如下图所示,input_video 为输入图像,output_video 为输出图像。为了保证整个应用的实时运算,我们使用 FlowLimiterCalculator 来筛选进行运算的输入帧数,只有当前一帧的运算完成后,才会将下一帧图像送入模型。当模型推理完成后,我们使用 MediaPipe 提供的一系列计算单元来进行输出的渲染和展示——结合使用 DetectionsToRenderDataCalculator, RectToRenderDataCalculator 及AnnotationOverlayCalculator 将检测结果渲染在输出图像上。

手掌检测应用的核心部分为上图中的蓝紫色模块(HandDetection子图)。如下图所示,HandDetection 子图包含了一系列图像处理的计算单元和机器学习模型推理的模块。ImageTransformationCalculator 将输入的图像调整到模型可以接受的尺寸,用以送入 TF Lite 模型的推理模块;使用 TfLiteTensorsToDetectionsCalculator,将模型输出的 Tensor 转换成检测结果;运用 NonMaxSuppressionCalculator 等计算单元做后处理;最终从HandDetection子图输出检测结果给主图。

致谢:感谢唐久强,张颿,杨民光, 张倬领及其他 MediaPipe 团队成员。
如果您想详细了解 MediaPipe 的相关内容,请参阅以下文档:
  • MediaPipe GitHub & 联系我们
    https://github.com/google/mediapipe
    mediapipe@google.com
  • MediaPipe ReadtheDocs 文档
    https://mediapipe.readthedocs.io/en/latest/
  • MediaPipe BlazeFace 人脸检测应用
    https://github.com/google/mediapipe/blob/master/mediapipe/docs/face_detection_mobile_gpu.md
  • MediaPipe 手部标志追踪应用
    https://github.com/google/mediapipe/blob/master/mediapipe/docs/hand_tracking_mobile_gpu.md
  • MediaPipe 改换发色应用
    https://sites.google.com/corp/view/perception-cv4arvr/hair-segmentation
  • MediaPipe 示例
    https://github.com/google/mediapipe/blob/master/mediapipe/docs/examples.md
  • MediaPipe 苹果 iOS Hello World! 教程和代码
    https://github.com/google/mediapipe/blob/master/mediapipe/docs/hello_world_ios.md
  • MediaPipe 安卓 Hello World! 教程和代码
    https://github.com/google/mediapipe/blob/master/mediapipe/docs/hello_world_android.md
  • MediaPipe Visualizer
    https://viz.mediapipe.dev
  • MediaPipe Third Workshop on Computer Vision for AR/VR 论文
    https://sites.google.com/corp/view/perception-cv4arvr/mediapipe
(*本文为AI科技大本营转载文章,转载联系作者)

精彩推荐

倒计时!由易观携手CSDN联合主办的第三届易观算法大赛还剩 7 天,冠军团队将获得3万元!

本次比赛主要预测访问平台的相关事件的PV,UV流量(包括Web端,移动端等),大赛将会提供相应事件的流量数据,以及对应时间段内的所有事件明细表和用户属性表等数据,进行模型训练,并用训练好的模型预测规定日期范围内的事件流量。

推荐阅读

  • 知乎算法团队负责人孙付伟:Graph Embedding在知乎的应用实践

  • 必看,61篇NeurIPS深度强化学习论文解读都这里了

  • 打破深度学习局限,强化学习、深度森林或是企业AI决策技术的“良药”

  • 激光雷达,马斯克看不上,却又无可替代?

  • 卷积神经网络中十大拍案叫绝的操作

  • Docker是啥?容器变革的火花?

  • 5大必知的图算法,附Python代码实现

  • 阿里云弹性计算负责人蒋林泉:亿级场景驱动的技术自研之路

  • 40 岁身体死亡,11 年后成“硅谷霍金”,他用一块屏幕改变 100 万人!

  • AI大神如何用区块链解决模型训练痛点, AI+区块链的正确玩法原来是这样…… | 人物志

你点的每个“在看”,我都认真当成了喜欢

MediaPipe:Google Research 开源的跨平台多媒体机器学习模型应用框架相关推荐

  1. MediaPipe: Google Research 开源的跨平台多媒体机器学习模型应用框架

    点击我爱计算机视觉标星,更快获取CVML新技术 本文转载自TensorFlow. CV君:今天跟大家分享一篇来自谷歌的文章,介绍了Google Research 开源的多媒体机器学习模型应用框架Med ...

  2. Google FlatBuffers——开源、跨平台的新一代序列化工具

    >>> Google FlatBuffers--开源.跨平台的新一代序列化工具 转载自:http://www.cnblogs.com/lizhenghn/p/3854244.html ...

  3. 使用pmml跨平台部署机器学习模型Demo——房价预测

      基于房价数据,在python中训练得到一个线性回归的模型,在JavaWeb中加载模型完成房价预测的功能. 一. 训练.保存模型 工具:PyCharm-2017.Python-39.sklearn2 ...

  4. 如何利用 Google 开源的 TFCO 构建机器学习模型?

    在机器学习模型中引入公平性远非易事,本文就利用Google AI研究院开源的Tensor Flow Constrained Optimization Library(TFCO),来优化机器学习模型的各 ...

  5. 利用colab保存模型_在Google Colab上训练您的机器学习模型中的“后门”

    利用colab保存模型 Note: This post is for educational purposes only. 注意:此职位仅用于教育目的. In this post, I would f ...

  6. 使用pmml实现跨平台部署机器学习模型

    一.概述   对于由Python训练的机器学习模型,通常有pickle和pmml两种部署方式,pickle方式用于在python环境中的部署,pmml方式用于跨平台(如Java环境)的部署,本文叙述的 ...

  7. 腾讯AI Lab开源世界首款自动化模型压缩框架PocketFlow:将深度学习装进口袋

    来源:腾讯AI 实验室 腾讯AI Lab机器学习中心今日宣布成功研发出世界上首款自动化深度学习模型压缩框架--PocketFlow,并即将在近期发布开源代码.这是一款面向移动端AI开发者的自动模型压缩 ...

  8. 用PMML实现机器学习模型的跨平台上线

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

  9. java调用pmml_用PMML实现机器学习模型的跨平台上线

    在机器学习用于产品的时候,我们经常会遇到跨平台的问题.比如我们用Python基于一系列的机器学习库训练了一个模型,但是有时候其他的产品和项目想把这个模型集成进去,但是这些产品很多只支持某些特定的生产环 ...

最新文章

  1. 一场实验室意外爆炸事故,解决了58年量子难题,让科学家意外发现“核电共振”...
  2. 系统集成资质培训 - 标准系列 -软件文档管理指南
  3. popupmenu java_Java基于JPopupMenu实现系统托盘的弹出菜单,解决PopupMenu弹出菜单中文乱码...
  4. RabbitMQ(四) Work模式下的消息产生以及消费代码实现示例
  5. 你不是一个人在战斗!
  6. 标准库举例:sys、copy
  7. STM-1和SDH的关系
  8. Struts2+Spring3+MyBatis3整合以及Spring注解开发
  9. 关于DiskFileUpload的杂谈
  10. TouchDesigner学习 全屏输出
  11. 坚果nuts 加速 官网_坚果 R2 发布:骁龙 865、1 亿像素、双曲面屏,售价 4499 元...
  12. jQuery ThickBox很好很弓虽大
  13. 怎样批量给pdf文件添加水印?
  14. linux 防火墙文件路径,linux防火墙设置
  15. WS-Trust和WS-SecureConversation
  16. Python的优点与缺点
  17. 隐藏在sketch的10个实用技巧,学会就是赚到!
  18. 【JavaScript】开工竣工工期计算
  19. springboot启动报错org.yaml.snakeyaml.error.YAMLException...
  20. 过采样和欠采样问题(二分类数据不均衡)

热门文章

  1. 度量快速开发平台端口映射的介绍
  2. 谈谈UI架构设计的演化
  3. android 关于字符转化问题
  4. 我对bgwriter.c 与 guc 关系的初步理解
  5. sql数据库打包部署安装
  6. Ubuntu双击运行Shell脚本
  7. 爬虫与浏览器的区别,爬虫产生(出自简书)
  8. 【转载】标准输入输出、错误输出、重定向标准输出
  9. 力扣—— 三维形体投影面积
  10. 实现一个 能在O(1)时间复杂度 完成 Push、Pop、Min操作的 栈