前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >AIoT应用创新大赛-基于TFML的迁移学习实践

AIoT应用创新大赛-基于TFML的迁移学习实践

原创
作者头像
flavorfan
修改2022-02-23 19:33:32
2.2K0
修改2022-02-23 19:33:32
举报
文章被收录于专栏:范传康的专栏

1. eIQ@Toolkit概述

NXP eIQ平台提供了嵌入式平台集成化的机器学习应用部署能力,支持BYOD(Bring Your Own Data)和BYOM(Bring You Own Model)的两种建模应用的工作流。

BYOD and BYOM
BYOD and BYOM

BYOM相对更灵活,模型选择、训练及转换更自由。TFLM(TensorFlow Lite Micro)是BYOM的实现方式之一,是TensorFlow ML框架的一员,用来转换TensorFLow 模型到嵌入式可使用的模式。TFLM的嵌入式部署实现分为运行框架(解释器)和模型文件,这和GLOW模型直接转换为可执行的二进制文件不同。

本文使用迁移学习技术使用mobilenet-v2的预训练模型,加上少量数据数据(flower)实现对5中花的识别。

  • 硬件平台:TencentOS Tiny AIoT开发套件
  • 模型训练:Linux, python 3.8, tflite_model_maker
  • 嵌入式开发:WIn10, mcuxpresso IDE

2. 总体流程

TensorFlow Lite For Microcontrollers Process

model workflow of fine-tune and deploy
model workflow of fine-tune and deploy

3 模型构建环境

模型环境用于下载预训练模型,基于少量应用场景数据进行迁移学习(transfer-learning or fine-tune),比较适合的开发环境是Linux,可以无缝和主流模型开发环境契合。

代码语言:python
代码运行次数:0
复制
conda create -n eiq python=3.8
conda activate eiq

python -m pip install -U pip
python -m pip install -U setuptools
python -m pip install tflite-model-maker
python -m pip install onnxmltools mmdnn tensorflow-datasets opencv-python PILLOW
python -m pip install numpy scipy matplotlib ipython jupyter pandas sympy nose imageio 
python -m pip install netron

4 迁移学习及输出模型文件(基于tflite-model-maker)

1) 下载及解压数据文件

代码语言:shell
复制
wget http://download.tensorflow.org/example_images/flower_photos.tgz
tar -xvzf flower_photos.tgz

下载完,目录结构如下

目录结构
目录结构

2)训练及输出tflite(flower_lab.py)

代码语言:python
代码运行次数:0
复制
import os
import tensorflow as tf
from tflite_model_maker import image_classifier
from tflite_model_maker import ImageClassifierDataLoader
from tflite_model_maker.config import QuantizationConfig

#Specify image directory
image_path = os.path.join(os.getcwd(), 'flower_photos')

#Split up images into different training categories for training, validation, and testing. 
data = ImageClassifierDataLoader.from_folder(image_path)
train_data, rest_data = data.split(0.8)
validation_data, test_data = rest_data.split(0.5)

mobilenetv1_spec = image_classifier.ModelSpec(uri='https://tfhub.dev/google/imagenet/mobilenet_v1_025_128/feature_vector/4',input_image_shape=[128,128], name='mobilenet_v1')
model = image_classifier.create(train_data, model_spec=mobilenetv1_spec, validation_data=validation_data)
model.summary()

#Evaluate final model
print('Done training\n')
loss, accuracy = model.evaluate(test_data)

#Write out .tflite file
print('Write out model\n')

config = QuantizationConfig.for_int8(representative_data=test_data, inference_input_type=tf.int8, inference_output_type=tf.int8,
    supported_ops=tf.lite.OpsSet.TFLITE_BUILTINS_INT8) 

model.export(export_dir='.',tflite_filename='flower_model_int8.tflite',label_filename='flower_labels.txt',with_metadata=False,quantization_config=config)

3)转成.h文件

代码语言:shell
复制
xxd -i flower_model.tflite > flower_model.h

生成的头文件大小约为 5.5MB,需要稍作修改以将其集成到 MCUXpresso SDK 中。 打开flower_model.h 文件并对文件顶部进行以下更改。

代码语言:txt
复制
#include <cmsis_compiler.h>
#define MODEL_NAME "mobilenet_v1_0.25_128_flower"
#define MODEL_INPUT_MEAN 127.5f
#define MODEL_INPUT_STD 127.5f
const char flower_model_tflite[] __ALIGNED(16) = {

根据flower_labels.txt构造flower_labels.h文件

代码语言:txt
复制
const char* labels[] = {
    "daisy",
    "dandelion",
    "roses",
    "sunflowers",
    "tulips"
};

4)IDE的样本工程中导入模型文件

IDE首先导入样本工程evkmimxrt1060_tensorflow_lite_micro_label_image,接着导入模型。

导入文件
导入文件

要导入步骤3输出的文件:flower_model.h 和 flower_labels.h,将分别取代model_data.h和labels.h(引用时取代)。

然后需要修改model/model.cpp修改对应的模型数据文件的应用;修改output_postproc.cpp完成对应显示标签的引用修改。

5)运行

如果时导入rt1062官方开发板,那基本上完成;导入硬件平台TencentOS Tiny AIoT开发套件由于硬件底层的不同(引脚使用不同,camera和lcd的不同),需要做一定的驱动移植适配。和本文主旨无关,加篇幅所限。

运行时,可以从lcd看到camera的摄像画面,下面同步输出识别的结果。

串口输出
串口输出

5. 总结及扩展阅读

个人认为NXP RT1060系列及eIQ工具链最强大的在于建立了方便的工作流,把通用模型导入到受限的嵌入式上去。这次大赛原本想做点有意思的模型,挑战客制化的手势识别,声音关键字,及多模型协调。主客观原因都有,预定时间内恐怕不能完成。

-eIQ Toolkit

-Machine Learning on MCUs

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. eIQ@Toolkit概述
  • 2. 总体流程
  • 3 模型构建环境
  • 4 迁移学习及输出模型文件(基于tflite-model-maker)
    • 1) 下载及解压数据文件
      • 2)训练及输出tflite(flower_lab.py)
        • 3)转成.h文件
          • 4)IDE的样本工程中导入模型文件
            • 5)运行
            • 5. 总结及扩展阅读
            相关产品与服务
            TencentOS Server
            TencentOS Server 是腾讯云推出的 Linux 操作系统,它旨在为云上运行的应用程序提供稳定、安全和高性能的执行环境。它可以运行在腾讯云 CVM 全规格实例上,包括黑石物理服务器2.0。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档