TensorFlow Lite(实战系列一):TFLite Android 迁移训练构建自己的图像识别APP

摘要

人工智能想要从实验室走向大众,一个必不可少的途径就是朝着智能终端、嵌入式产品等边缘设备发展。谷歌基于TFMobile推出了TFLite,我们只需要把训练好的模型按照一定规则转换成拥有.tflite后缀的模型文件,便可以通过Android Studio生成app并嵌入到手机终端里,实现边缘设备的落地。为了让大家体验到TensorFlow Lite的强大。少奶奶将会以Google官网提供的花卉重训练模型案例为基础,逐步为大家详细讲解数据准备,模型迁移训练,tflite文件转换,App嵌入等步骤。让大家也能开发一款自己的模型识别app。

参考链接: 感谢前辈们的贡献.

备注:大家在实践过程中有什么问题 可以直接在评论区留言,少奶奶会定期回复。

开发环境

window 10 + Anaconda + Pycharm + Android Studio + Python 3.6 + Tensorflow-gpu 1.14.0 + Tensorflow 1.14.0 (cpu版本)

花卉数据准备

数据下载地址: 点击下载.
解压后,可以得到五个文件夹,文件夹的名称就是这些数据的标签:
daisy(雏菊)、dandelion(蒲公英)、rose(玫瑰)、sunflower(向日葵)、tulip(郁金香)

下载官网训练代码

代码下载地址: 点击下载.

文件目录结构说明

在这里插入图片描述
android:存放安卓APP相关代码,后期得到tflite模型后,少奶奶会使用android studio导入该工程,并进行嵌入边缘设备操作。
ios:存放ios App的相关代码,可以使用app打包工具,生成能在苹果手机里运行的app。
scripts:进行迁移训练的主要文件夹。
tf_files: 模型文件存放位置。

模型类别说明

在Google提供的预编译模型中,大体可以分成浮点数模型和量化(整数)模型,前者属于高精度模型,size大用时长,适合高性能的边缘设备。后者采用8位二进制存储权重,size大精度低,但用时少,适合低性能边缘设备。本文介绍并使用的花卉模型重训练代码目前只支持Inception_v3和Mobilenet两种预编译模型,默认是使用Inception_v3。所以,少奶奶采用Mobilenet模型进行重训练并采用浮点数模型进行存储权重。

模型重训练

步骤一:使用pycharm打开已经下载好的官网训练代码,并设置anaconda运行环境(不知道怎么设置的同学可以翻阅其他博主撰写的博客)在这里插入图片描述
步骤二:在当前文件夹中,新建如下四个文件夹在这里插入图片描述

bottleneck:代码运行期间存储的临死文件
flower_photos:待训练的图片数据(下载好的训练图片直接解压到该目录)
intermediate_graph:保存临时生成的图结构
retrain_logs:保存日志,可使用tensorboard查看

步骤三:打开pycharm的终端,激活anaconda虚拟环境,并输入以下命令开始训练
python retrain.py --image_dir=../flower_photos --out_graph --output_labels=../tf_files/output_labels.txt --summari
es_dir=../retrain_logs  --how_many_training_steps=40 --model_dir=../tf_files/models --final_tensor_name=final_result --architecture=mobilenet_1.0_224

训练结果展示在这里插入图片描述参数说明
–architecture 为架构类型,支持mobilenet和Inception_v3。
–image_dir 为数据地址。
–output_labels 最后训练生成模型的标签,由于花图片集合已经按照子目录进行了分 类,故retrained_labels.txt最后包含了上述五种花的分类名称。
–output_graph 最后训练生成的模型
–model_dir 命令启动后,程序会把网络自动下载预编译模型放到该位置 --how_many_training_steps 训练步数,不指定的话默认为4000
–bottleneck_dir 用来把top层的训练数据缓存成文件
–learning_rate 学习率
–testing_percentage 把图片按多少比例划分出来当做test数据,默认为10
–validation_percentage 把图片按多少比例划分出来当做validation数据,默认为10
–eval_step_interval 多少步训练后进行一次评估,默认为10
–train_batch_size 一次训练的图片数,默认为100
–validation_batch_size 一次验证的图片数,默认为100
–random_scale 给定一个比例值,然后随机扩大训练图片的大小,默认为0
–random_brightness 给定一个比例值,然后随机增强或减弱训练图片的明亮程度,默 认为0
–random_crop 给定一个比例值,然后随机裁剪训练图片的边缘值,默认为0

步骤四:测试重训练的模型效果

训练好的模型文件会保存在tf_files文件夹中
在这里插入图片描述
打开label_image.py文件,修改如下代码,然后右键运行该代码即可完成测试
在这里插入图片描述
测试结果
在这里插入图片描述

步骤五:模型转换

重训练得到的pb模型包含了网络图结构和网络权重参数,我们先对该模型进行优化,减少其体积,然后转换成tflite模型。

toco --graph_def_file=../tf_files/retrained_graph.pb --output_file=../tf_files/optimized_graph.tflite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,224,224,3 --input_array=input --output_array=final_result --inference_type=FLOAT --input_data_type=FLOAT

备注:input_shape必须为[1,224,224,3]既bitch size为1,input_array和output_array分别为mobilenet网络中国的输入层和输出层的节点名称,可以在retrain.py文件中找到。
在这里插入图片描述

步骤六:嵌入APP设备

使用android studio,导入官网提供的android案例。

在这里插入图片描述
把转换好的tflite和对应标签放入assets文件夹中,导入成功后,编译器会安装一些环境。
在这里插入图片描述
修改模型和标签引入路径
在这里插入图片描述在这里插入图片描述
修改APP读入图片尺寸
在这里插入图片描述
使用USB连接电脑,打开真机的开发者模式,移植app到手机中。在这里插入图片描述
最终效果

在这里插入图片描述

总结

至此,使用Google官网的mobilenet浮点数模型进行重训练,并成功的嵌入到了手机设备中。但这仅仅是使用了TensorFlow Lite的一小部分功能。为了更好的使用TensorFlow Lite进行自定义网络模型训练,例如:使用YOLOV-3训练了一个识别工人类型的模型,并部署到手机中,实现实时监测。则本文就显得捉襟见肘了。因为官网提供的模型很多细节都没有告诉开发者,所以,当少奶奶在实现自定义网络模型嵌入app时,遇到了很多困难,通过查阅前辈们的博客和github,才实现了上述功能。下一篇博文,少奶奶将不再使用官网提供的模型,而是采用自定义的网络模型进行训练,并一步一步的嵌入app中。

评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值