探索MediaPipe自定义机器学习模型

2024-03-01 04:59

本文主要是介绍探索MediaPipe自定义机器学习模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MediaPipe支持人脸识别、目标检测、图像分类、人像分割、手势识别、文本分类、语音分类。每个模块都有对应的模型,但是原有模型可能比较大、推理耗时比较长,我们可以自定义模型来进行进行优化。

 

目录

一、训练准备

1、准备数据

1.1 原始数据

1.2 标注数据

2、简化模型

2.1 减少标签

2.2 剪裁边缘

2.3 模型复用

3、训练迭代

二、目标检测训练

1、准备安装包

2、准备数据集

3、加载数据集

4、训练模型

5、验证模型

6、导出模型


一、训练准备

1、准备数据

在自定义模型前,准备两种数据:原始数据、标注数据。

1.1 原始数据

找到足够多的数据去训练模型比较具有挑战性。首先,需要确认使用的图像或文本有没版权限制。为了避免版权问题,我们可以自己制作数据,也可以去Kaggle寻找数据集。有些dataset已经加了标注,有些则没有标注。

1.2 标注数据

我们可以用Label Studio来添加标注。支持3种形式安装:pip、Anaconda、docker。这里以pip安装为例:

# Requires Python >=3.7 <=3.9
pip install label-studio# Start the server at http://localhost:8080
label-studio

2、简化模型

2.1 减少标签

选择2-5个类别给图像打标签,遵从简单原则。

2.2 剪裁边缘

样本图像尽可能保留完整轮廓。剩下一部分样本进行裁剪,这样利于提高模型的鲁棒性。

2.3 模型复用

由于MediaPipe Model Maker使用迁移学习,即复用原有模型,使用新数据来重新训练原来的模型。这样可以节省训练时间,节约模型数据。Model Maker可用于训练物体检测、手势检测、图像分类、音频分类的模型。通过删除数据分类的层级,然后使用新数据来重建,最终输出新模型,框架图如下:

大概需要100个样本,其中80%用于训练,10%用于测试,剩下10%用于验证。 

3、训练迭代

第一次训练的模型比较难达到理想效果。那么,我们需要花时间去选择合适样本,添加恰当标注,从而提升成功率。添加样本,或者修改样本,反复迭代训练,不断完善。

二、目标检测训练

1、准备安装包

安装mediepipe model maker:

pip install --upgrade pip
pip install mediapipe-model-maker

导入object detector包:

import os
import tensorflow as tf
assert tf.__version__.startswith('2')
from google.colab import filesfrom mediapipe_model_maker import object_detector

2、准备数据集

从官网下载数据集,以小狗动物为例:dog dataset

并且声明模型的训练路径、验证路径:

train_dataset_path = "dogs/train"
validation_dataset_path = "dogs/validate"

3、加载数据集

加载训练、验证的数据集:

train_data = object_detector.Dataset.from_pascal_voc_folder('dogs copy/train',cache_dir="/tmp/od_data/train")validate_data = object_detector.Dataset.from_pascal_voc_folder('dogs copy/validate',cache_dir="/tmp/od_data/validatation")

4、训练模型

使用样本数据来训练TensorFlow模型,设置相关参数:

  • batch_size=8
  • learning_rate=0.3
  • epochs=50

根据参数选项、数据路径来创建模型:

hparams = object_detector.HParams(batch_size=8, learning_rate=0.3, epochs=50, export_dir='exported_model')
options = object_detector.ObjectDetectorOptions(supported_model=object_detector.SupportedModels.MOBILENET_V2,hparams=hparams)
model = object_detector.ObjectDetector.create(train_data=train_data,validation_data=validate_data,options=options)

5、验证模型

使用未用过的图像来验证模型:

loss, coco_metrics = model.evaluate(validate_data, batch_size=4)
print(f"Validation loss: {loss}")
print(f"Validation coco metrics: {coco_metrics}")

6、导出模型

以TensorFlow Lite的格式导出模型,然后下载下来:

model.export_model('dogs.tflite')
!ls exported_model
files.download('exported_model/dogs.tflite')

这篇关于探索MediaPipe自定义机器学习模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/761294

相关文章

kafka自定义分区器使用详解

《kafka自定义分区器使用详解》本文介绍了如何根据企业需求自定义Kafka分区器,只需实现Partitioner接口并重写partition()方法,示例中,包含cuihaida的数据发送到0号分区... 目录kafka自定义分区器假设现在有一个需求使用分区器的方法总结kafka自定义分区器根据企业需求

Java领域模型示例详解

《Java领域模型示例详解》本文介绍了Java领域模型(POJO/Entity/VO/DTO/BO)的定义、用途和区别,强调了它们在不同场景下的角色和使用场景,文章还通过一个流程示例展示了各模型如何协... 目录Java领域模型(POJO / Entity / VO/ DTO / BO)一、为什么需要领域模

深入理解Redis线程模型的原理及使用

《深入理解Redis线程模型的原理及使用》Redis的线程模型整体还是多线程的,只是后台执行指令的核心线程是单线程的,整个线程模型可以理解为还是以单线程为主,基于这种单线程为主的线程模型,不同客户端的... 目录1 Redis是单线程www.chinasem.cn还是多线程2 Redis如何保证指令原子性2.

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型

Linux五种IO模型的使用解读

《Linux五种IO模型的使用解读》文章系统解析了Linux的五种IO模型(阻塞、非阻塞、IO复用、信号驱动、异步),重点区分同步与异步IO的本质差异,强调同步由用户发起,异步由内核触发,通过对比各模... 目录1.IO模型简介2.五种IO模型2.1 IO模型分析方法2.2 阻塞IO2.3 非阻塞IO2.4

SpringBoot AspectJ切面配合自定义注解实现权限校验的示例详解

《SpringBootAspectJ切面配合自定义注解实现权限校验的示例详解》本文章介绍了如何通过创建自定义的权限校验注解,配合AspectJ切面拦截注解实现权限校验,本文结合实例代码给大家介绍的非... 目录1. 创建权限校验注解2. 创建ASPectJ切面拦截注解校验权限3. 用法示例A. 参考文章本文

Vite 打包目录结构自定义配置小结

《Vite打包目录结构自定义配置小结》在Vite工程开发中,默认打包后的dist目录资源常集中在asset目录下,不利于资源管理,本文基于Rollup配置原理,本文就来介绍一下通过Vite配置自定义... 目录一、实现原理二、具体配置步骤1. 基础配置文件2. 配置说明(1)js 资源分离(2)非 JS 资

Unity新手入门学习殿堂级知识详细讲解(图文)

《Unity新手入门学习殿堂级知识详细讲解(图文)》Unity是一款跨平台游戏引擎,支持2D/3D及VR/AR开发,核心功能模块包括图形、音频、物理等,通过可视化编辑器与脚本扩展实现开发,项目结构含A... 目录入门概述什么是 UnityUnity引擎基础认知编辑器核心操作Unity 编辑器项目模式分类工程

聊聊springboot中如何自定义消息转换器

《聊聊springboot中如何自定义消息转换器》SpringBoot通过HttpMessageConverter处理HTTP数据转换,支持多种媒体类型,接下来通过本文给大家介绍springboot中... 目录核心接口springboot默认提供的转换器如何自定义消息转换器Spring Boot 中的消息

Python学习笔记之getattr和hasattr用法示例详解

《Python学习笔记之getattr和hasattr用法示例详解》在Python中,hasattr()、getattr()和setattr()是一组内置函数,用于对对象的属性进行操作和查询,这篇文章... 目录1.getattr用法详解1.1 基本作用1.2 示例1.3 原理2.hasattr用法详解2.