Mediapipe学习记录

学习文档

1、Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现 - 极术社区 - 连接开发者与智能计算生态

2、【转载】Google MediaPipe:设备端机器学习【完整解决方案】背后的技术实现

3、MediaPipe框架结构 - 走看看

Handtracking封装

1、Mediapipe - 将Mediapipe handtracking封装成动态链接库dll/so,实现在桌面应用中嵌入手势识别功能_HW140701的博客-CSDN博客

2、Mediapipe - 将Mediapipe handtracking封装成动态链接库dll/so,实现在桌面应用中嵌入手势识别功能 - StubbornHuang Blog

HolisticTracking封装

1、Mediapipe – 将Mediapipe HolisticTracking封装成动态链接库dll/so,实现在桌面应用中嵌入全身关节点识别、手势识别、抬手放手检测识别功能_HW140701的博客-CSDN博客

2、Mediapipe – 将Mediapipe HolisticTracking封装成动态链接库dll/so,实现在桌面应用中嵌入全身关节点识别、手势识别、抬手放手检测识别功能 - StubbornHuang Blog

Github链接:

GitHub - HW140701/GoogleMediapipePackageDll: package google mediapipe hand and holistic tracking into a dynamic link library

学习记录:

一、常见的机器学习流水线

常见的机器学习流水线:从数据流入、数据预处理、引擎推理计算、渲染结果、数据流出

1、Image Transform:视频或图像接入需要做图像变换如Resize或者裁剪到模型接受的大小,以及对图片进行旋转等;
2、Image To Tensor:处理好的图片转换到模型认识的类型,如TensorType,但如果是GPU做推理,则还需要把CPU Tensor转换为GPU Tensor,会涉及OpenGL等操作,但若是GL,则前面一步可能在Image Transform过程可能也需要考虑是在GPU上来做;
3、Inference:这部分是推理的核心,模型和输入Tensor给到,输出output tensor;
4、Tensor To Landmarks:在得到推理的output tensor后,需要将其翻译为标注点、检测点的信息如x、y轴的信息等等、也需要做很多工作;
5、Renderer:在得到Landmark坐标信息后,还需要与原图做渲染,将最终渲染后的图片放进手机屏幕或者视频中。

二、常见的机器学习流水线与mediapipe对比

MediaPipe已经提供了很多预设的Calculator,主要分以下四类:

1、对图像等媒体数据处理的calculator
2、TensorFlow与TFLite相关用于推理的Calculator
3、后处理Calculator
4、辅助性的Calculator
 

Calculator的实现都是C++,要用时需要定义接口类型,即输入、输出的类型
                                                               定义方法,open、Process、close

三、Mediapipe的源码结构

MediaPipe中核心源码的结构如下,BUILD为Bazel编译文件、calculators为图结构的计算单元、docs为开发文档、examples为mediapipe的应用示例、framework为框架包含计算单元属性,上下文环境,数据流管理,调度队列,线程池,时间戳等、gpu为OpenGL的依赖文件、graphs为mediapipe各项示例的图结构(边缘检测,人脸检测,姿态追踪等等)、java为安卓应用开发的依赖项、MediaPipe.tulsiproj为相关配置文件、models为各个应用的tflite模型,modules为示例组件、objc为 objective-c语言相关文件、util为工具代码。

框架的加速部分主要在framework中,源码中包括计算单元基类,计算单元数据类型定义、计算单元的状态控制、计算单元的上下文环境管理、图结构中输入流和输出流、调度器队列、线程池、时间戳同步等。下面主要分析调度器队列(scheduler_queue),线程池(thread_pool),时间戳(timestamp)怎样通过调度数据流实现时数据流时间戳同步,再GPU计算渲染,从而达到mediapipe管线的最大数据吞吐量。

四、一些对mediapipe框架的理解

(1)使用MediaPipe,可以将机器学习任务构建为一个图形的模块表示的数据流管道,可以包括推理模型和流媒体处理功能。

(2)MediaPipe通过将各个感知模型抽象为模块并将其连接到可维护的图中来解决这些问题。

(3)借助MediaPipe,可以将数据流处理管道构建为模块化组件图,包括推理处理模型和媒体处理功能。将视频和音频流数据输入到图中,通过各个功能模块构建的图模型管道处理这些数据,如物体检测或人脸点标注等最后结果数据从图输出。输入是摄像头采集的视频数据帧通过图中各个模块的处理输出到显示屏上。

(4)MediaPipe未定义神经网络的内部结构,而是指定了嵌入一个或多个模型的较大规模的处理图。

五、对mediapipe构建文件的理解


cc_binary即声明了一个构建规则,用于编译生成一个可执行文件。

*_binary 规则:指定生成相应语言的可执行程序。cc_binary表示c++可执行程序,jave_binary表示java可执行程序。

可执行文件名(目标名)由name属性指定,name属性的值的类型可以看出是string类型。
srcs属性指定了源文件,srcs属性的值的类型可以看出是list of strings。

srcs表示源文件、deps代表依赖项

cc_library 中参数 visibility = ["//visibility:public"] 表明该库对所有包可见。

在我们使用google的工程的时候,还有一个class 叫做 absl::Status。

六、mediapipe中各解决方案编译时所依赖的一些文件

1、Handtracking

 

 2、Face_detection

猜你喜欢

转载自blog.csdn.net/pingchangxin_6/article/details/128148053