探索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

相关文章

使用Sentinel自定义返回和实现区分来源方式

《使用Sentinel自定义返回和实现区分来源方式》:本文主要介绍使用Sentinel自定义返回和实现区分来源方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Sentinel自定义返回和实现区分来源1. 自定义错误返回2. 实现区分来源总结Sentinel自定

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

如何自定义Nginx JSON日志格式配置

《如何自定义NginxJSON日志格式配置》Nginx作为最流行的Web服务器之一,其灵活的日志配置能力允许我们根据需求定制日志格式,本文将详细介绍如何配置Nginx以JSON格式记录访问日志,这种... 目录前言为什么选择jsON格式日志?配置步骤详解1. 安装Nginx服务2. 自定义JSON日志格式各

Android自定义Scrollbar的两种实现方式

《Android自定义Scrollbar的两种实现方式》本文介绍两种实现自定义滚动条的方法,分别通过ItemDecoration方案和独立View方案实现滚动条定制化,文章通过代码示例讲解的非常详细,... 目录方案一:ItemDecoration实现(推荐用于RecyclerView)实现原理完整代码实现

基于Spring实现自定义错误信息返回详解

《基于Spring实现自定义错误信息返回详解》这篇文章主要为大家详细介绍了如何基于Spring实现自定义错误信息返回效果,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录背景目标实现产出背景Spring 提供了 @RestConChina编程trollerAdvice 用来实现 HTT

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

SpringBoot自定义注解如何解决公共字段填充问题

《SpringBoot自定义注解如何解决公共字段填充问题》本文介绍了在系统开发中,如何使用AOP切面编程实现公共字段自动填充的功能,从而简化代码,通过自定义注解和切面类,可以统一处理创建时间和修改时间... 目录1.1 问题分析1.2 实现思路1.3 代码开发1.3.1 步骤一1.3.2 步骤二1.3.3

dubbo3 filter(过滤器)如何自定义过滤器

《dubbo3filter(过滤器)如何自定义过滤器》dubbo3filter(过滤器)类似于javaweb中的filter和springmvc中的intercaptor,用于在请求发送前或到达前进... 目录dubbo3 filter(过滤器)简介dubbo 过滤器运行时机自定义 filter第一种 @A