MediaPipe学习笔记

感知AI技术现在已经很成熟了,MediaPipe主要提供实用级别与人相关的感知AI方法供我们使用,这里面主要所属的技术是关键点检测和目标追踪。它主要提供了实用级别的算法模型和内部对数据各种底层的处理,大大简化了我们使用相关AI算法的成本。

基础框架概念

子图

为了重用图,子图就可以像计算器一样包含在 CalculatorGraphConfig 中。当从 CalculatorGraphConfig 加载 MediaPipe 图时,每个子图节点都被相应的计算器图代替。因此,子图的语义和性能与相应的计算器图是一致的。

计算器

每个计算器都是一个图形的节点。我们描述了如何创建一个新的计算器,如何初始化一个计算器,如何执行它的计算,输入和输出流,时间戳和选项。图中的每个节点都实现为 Calculator。大量的图形执行发生在它的计算器中。计算器可以接收零个或多个输入流和/或副包,并产生零个或多个输出流和/或副包。

面网 FaceMesh

是一个人脸几何解决方案,实时估计468个3D 人脸地标。

它捆绑了脸部几何模块。
它建立一个公制的三维空间,并使用人脸关键点在屏幕图像中的坐标来估计人脸在三维空间中的几何形状。

人脸几何数据由常见的3d几何图元组成,包括人脸姿态变换矩阵和三角形人脸网格。在这之下,一个轻量级的统计分析方法称为 Procrustes Analysis 用来驱动一个健壮的,性能和可移植的逻辑分析。分析在 CPU 上运行,并且在 ML 模型推断之上具有最小的速度/内存占用。Procrustes Analysis可以叫做普氏分析,简单的说就是利用最小二乘法寻找形状A到形状B的仿射变换 。

face mesh包含两个模型,人脸检测和3D关键点形状估计模型。自然的是先检测后裁剪然后估计形状。然后这一帧的裁剪区域可以利用上一次关键点获取。
FaceMesh管道被实现为一个 MediaPipe 图,它使用来自脸部地标模块的脸部地标子图,并使用一个专用的脸部渲染器子图进行渲染。

对于关键点检测模型,采用迁移学习训练了一个网络,目的有几个:网络同时预测三维坐标的合成渲染数据和真实世界的二维语义轮廓的标注数据。

模型输出三维点的位置,以及人脸在输入中出现和合理对齐的概率。

Face Geometry Module 面部几何模块

人脸几何模块在屏幕坐标空间进行但是关键点检测。x 坐标和 y 坐标是归一化的屏幕坐标,而 z 坐标是相对的,在弱透视投影摄像机模型下缩放为 x 坐标。这种格式非常适合于某些应用程序,但是它不能直接支持全光谱的虚拟扩增实境(AR)特性,比如将虚拟3 d 对象与检测到的人脸对齐。

人脸几何模块从屏幕坐标空间移动到一个公制的3D 空间,并提供必要的原语来处理检测到的人脸作为一个正常的3D 对象。通过设计,你可以使用透视摄像机将最终的三维场景投影到屏幕坐标空间,并保证脸部地标位置不会改变。

在人脸几何模块中建立的度量3D 空间是一个右手正交度量3D 坐标空间。在空间内,有一个虚拟透视相机位于空间原点,并指向负方向的 z 轴。在目前的流水线中,假设输入的摄像机帧被这个虚拟摄像机精确地观察到,因此它的参数后来被用来将屏幕地标坐标转换回公制3 d 空间。虚拟摄像机参数可以自由设置,但为了获得更好的结果,建议尽可能接近真实的物理摄像机参数。

MediaPipe学习笔记_第1张图片

标准人脸模型是一个静态的人脸三维模型,遵循了脸部标志模型的468个三维人脸拓扑结构。该模式具有两项重要功能:
定义公制单位: 厘米
桥接静态和运行时空间: 脸部姿势变换矩阵事实上是一个线性映射,估计每一帧从规范的脸部模型到运行时脸部关键点集的变换。通过这种方式,围绕标准人脸模型建模的虚拟3 d 资产可以通过应用人脸姿势变换矩阵与跟踪的人脸对齐。

Components 组件

几何管道是一个关键的组成部分,它负责在三维空间估计人脸几何对象。在每一帧上,按照给定的顺序执行以下步骤:
人脸关键点屏幕坐标转换成公制3D 空间坐标;
人脸姿态变换矩阵被估计为一个严格的线性映射,从规范的脸部公制关键点集到运行时脸部关键点集,并最小化两者之间的差异;
利用运行时的人脸公制关键点作为顶点位置(XYZ)生成人脸网格,而顶点纹理坐标(UV)和三角形拓扑都继承自上文提到的典型的人脸模型;

几何管道实现为 MediaPipe 计算器。为了方便起见,人脸几何管道计算器与相应的元数据绑定到一个统一的 MediaPipe 子图中。人脸几何格式被定义为 Protocol Buffer 消息。

EFFECT RENDERER 效果渲染器

效果渲染器是一个组件,它作为一个面部效果渲染器的工作例子。它以 OpenGL ES 2.0 API 为目标,在移动设备上实现实时性能,并支持以下呈现模式:
三维物体渲染模式: 虚拟物体与被检测面对齐,以模拟连接到该面的物体(例如: 眼镜) ;
人脸网格渲染模式: 纹理在人脸网格表面的顶部被拉伸,以模拟人脸绘制技术。
在两种渲染模式中,首先将面部网格渲染为一个遮挡物直接渲染到深度缓冲区中。这一步通过在脸部表面隐藏不可见的元素,有助于创造一个更可信的效果。
效果渲染器实现为 MediaPipe 计算器。

Holistic

整体架构

Holistic就是整体的意思,整合了MediaPipe中的三个部分,人脸,姿势,手势。
Holistic提供了一种新的,先进的人体拓扑姿态结构改变了MediaPipe原来的流水线流程适应这个整体检测。
组件在移动端性能接近实时,内存消耗少,三个组件可以进行组合替换。
Holistic整体要求每帧最多8个模型之间的协调ーー1个姿态检测器,1个姿态标志模型,3个重新裁剪模型和3个手部和脸部关键点模型。

新的流水线:

原因
不同部分的检测需要图像不同的区域,那么需要每个区域的大小足够大才有好的检测性能。如果只用一张图像输入,那么要想每个区域都大,输入就太大了,所以先检测出需要的区域,进行裁剪,然后再进一步检测。
实现流程
先利用姿态出的关键点,推断出手和脸的三个区域(感兴趣区域 = ROI),然后利用重裁剪模型提高ROI准确度。最后,从原始输入图像中裁剪出ROI,送入人脸检测和手部检测模型,得出相应的关键点,于姿势关键点整合,得出最终的结果。

为了让ROI识别更有效率,使用了类似独立人脸和人手检测算法类似的思路,假设它们不会显著移动然后进行追踪。但是可能丢失目标,这时候使用姿势检测进行辅助。每一帧都进行姿势检测,然后用姿势检测的ROI辅助。

然后姿势分辨率低,得出的ROI裁剪不好裁剪,团队直接训练了一个轻量级的ROI优化网络,额外推理时间10%。6,遇到难点,nn大法直接上,完事儿。

性能:

延伸

mediapipe相关技术主要是来自论文BlazePose,
创新点:
1、它通过在输入的第一帧先检测人脸,然后根据人脸估计姿势,然后后面不是用检测,而是用追踪技术,达到实时性能。细节,候选框ROI优化模型。
2、人的形态变化太大,一般的目标是刚性的,不会这样变化多,所以一些技术点不适应,要改进,这里主要提出改进点NMS,怎么改进?这里很巧妙,值得学习,不是换掉NMS,而是让NMS去检测人脸!!!,人脸特征明显,且基本上是刚性的。

可以将检测出来的关键点进一步应用机器学习算法来做技术或者应用。比如识别动作,深蹲动作识别分类,根据 http://www.bilibili.com/video/BV1dL4y1h7Q6?p=2
其中有一步还是需要手动计算一些数值作为输入,比如肩膀和胯部的距离,脚对应点的角度,不是直接拿的点的坐标做分类。

你可能感兴趣的:(深度学习,人工智能,自动驾驶)