迁移学习+TfLite Android构建自己的喵咪识别APP(一)

迁移学习+TfLite Android构建自己的喵咪识别APP(一)

博客链接:https://blog.csdn.net/weixin_42042397/article/details/98081911
本教程是我自己实践过程的记录,具体的理论细节请参照其他博客

一、基础知识

项目开始之前,请确保已经安装PIP包tensorflow-hub以及最新版本的TensorFlow,tensorflow-hub的安装说明

二、项目实践

首先,建议新建立一个文件夹,我自己建立了一个的文件夹命名为app


新文件夹

然后, 在终端执行进入该文件夹的命令

进入该文件夹

第一次实践我是使用的教程中的提供的花卉的数据集,第二次实践的数据集是自己整理的一些猫咪的图片

2.1 准备数据集

1、花卉数据集下载

花卉数据集示例

image

image

下载花卉数据集

curl -LO http://download.tensorflow.org/example_images/flower_photos.tgz

喵咪数据集整理

猫咪数据集是我自己整理的,有需要的朋友可以自己下载
猫咪数据集示例

image

image

下载链接

2.2 重新训练

获得图像后,从GitHub下载示例代码,新建文件夹example_code

cd ~/example_code
curl -LO https://github.com/tensorflow/hub/raw/master/examples/image_retraining/retrain.py

image

然后重新训练
在重新训练之前,需要修改retrain.py文件中输出路径,修改为自己的文件夹(不止下图中示例的两项)
image

重新训练命令

python retrain.py --image_dir D:/z_personal_file/APP/cats_photos

--image_dir 表示训练用到的图片路径,修改为自己的训练图片的路径

默认情况下,使用 具有在ImageNet上训练的Inception V3架构的图像特征提取模块,该脚本执行4000个训练步骤,训练时间不到一个小时就可以完成。
其他参数代表的意义如下

 --architecture 为架构类型,支持mobilenet和Inception_v3两种
 --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,这两个值设置完后,training数据占比80%
--eval_step_interval 多少步训练后进行一次评估,默认为10
--train_batch_size 一次训练的图片数,默认为100
--validation_batch_size 一次验证的图片数,默认为100
--random_scale 给定一个比例值,然后随机扩大训练图片的大小,默认为0
--random_brightness 给定一个比例值,然后随机增强或减弱训练图片的明亮程度,默认为0
--random_crop 给定一个比例值,然后随机裁剪训练图片的边缘值,默认为0 

训练结束后得到模型.pd文件以及.txt文件


image

2、3 检验训练效果

1、下载测试代码

curl -LO https://github.com/tensorflow/tensorflow/raw/master/tensorflow/examples/label_image/label_image.py

2、 测试命令

python label_image.py --image=D:/z_personal_file/APP/cats_photos
/American_Shorthair/ia_1500000012.jpg --input_layer=Placeholder --output_layer=final_result --graph=D:/z_personal_file/APP/example_code/tmp/output_graph.pb --labels=D:/z_personal_file/APP/example_code/tmp/output_labels.txt

3、测试结果

image

可以从检测结果看出模型训练效果

american shorthair 0.9833292
canadian hairless 0.007974292
british shorthair cat 0.007008963
siamese 0.0012834456
persian cat 0.00026851168

2.4 转换模型格式

1.模型训练成功后,将.pd的模型转化为.tlite模型,用于接下来的Android Tflite
我们在这里使用TFlite转换器
2.下载官方代码

git clone https://github.com/googlecodelabs/tensorflow-for-poets-2
cd tensorflow-for-poets-2

3.将已经训练好的的outpt_graph.pd以及output_labels.txt移动到~\tensorflow-for-poets-2\tf_files文件夹下,可以修改一下模型的名字,方便辨认。

image

4.模型转化命令

cd /d D:\z_personal_file\APP\tensorflow-for-poets-2

tflite_convert --graph_def_file=tf_files/cats_graph.pb --output_file=tf_files/optimized_cat_graph.lite --input_format=TENSORFLOW_GRAPHDEF --output_format=TFLITE --input_shape=1,299,299,3 --input_array=Placeholder --output_array=final_result --inference_type=FLOAT --input_data_type=FLOAT

得到lite模型,如下:

image

2.5 下载Android studio

注意Android studio的安装好像需要翻墙,国内安装参考开头的博客链接

下载安装

细节参照点此
1、官网下载最新版本 https://developer.android.google.cn/studio
2、下载安装包后,点击进行安装
3、更改安装路径
4、安装之后,进行配置,点击DO not import settings
5、为了省事我选择的选择自定义安装,然后是选择主题风格,按个人喜欢自行选择
6、安装成功后,配置SDK和NDK
选择configure-->settings--> system settings-->android SDK
选择SDK platforms下载与你手机对应的android版本的android系统环境
选择SDK tools下载NDK,NDK版本要大于14.(图片来自其他博客)
安装结束。

2.6 AndroidStudio 本地项目实现

  1. 打开AndroidStudio
    image

    。加载后,从弹出窗口中选择“ 打开现有的Android Studio项目”:

image

2、选择tensorflow-for-poets-2/android/tflite
打开界面如下:


image

3、连接安卓手机
参考https://jingyan.baidu.com/article/15622f24d2fcb2fdfcbea5dc.html
以我用的小米手机为例
• 首先,打开开发者模式,不同型号的手机开启方式可以百度;
• 然后,小米手机很麻烦,如果需要通过USB下载App的话,需要在在开发者选择中关闭MIUI优化,以及打开USB安装
• 连接电脑和手机就可以了
4、进行“Gradle Sync”配置,点击sync Project whit Gradle Files

在这里插入图片描述

5、然后点击run
image

image

2.7 app效果

三、问题集合

3.1 测试模型出现KeyError: "The name 'import/input' refers to an Operation not in the graph."

问题分析:

image

==解决方法:==
修改label_image.py中的
input_height = 299
input_width = 299
同时测试命令行增加
--input_layer=Placeholder

3.2 安装Android Studio出现Gradle sync failed: Failed to find target with hash string 'android-26' in: D:\app2\Android\SDK (2 m 55 s 917 ms)

解决方法:File—>Project Structure
修改Properties的Compile Sdk Version
Flavors 的target SDK version

3.3 Android Studio连接成功后出现错误error: resource android:style/TextAppearance.Material not found.

分析地址:https://blog.csdn.net/caojengineer/article/details/83651916

==解决方法:==

修改build.gradle文件:
compileSdkVersion 修改成25
buildToolsVersion 修改成25.4.0,implementation 'com.android.support:appcompat-v7:25.2.1'

3.4 DELETE_FAILED_INTERNAL_ERROR Error while Installing APKs

我用的小米手机,所以这里应该是小米手机才会出现的问题

==解决方法:==
1:检查Android Studio的设置

File->Settings->Build,Execuion,Deployment->Instant Run

然后把Enable Instant Run to...那一项的勾去掉就好了

2:检查小米手机的是否启用MIUI优化

3:因为本人一般测试机不用Sim卡,所以会造成升级的时候关闭USB安装这个选项,开启这俩个选项就好了,其他的手机应该也是差不多的套路

3.5 建立自己数据集加载时出现InvalidArgumentError (see above for traceback): Expected image (JPEG, PNG, or GIF), got unknown format starting with 'BM^6\016\000\000\000\000\0006\000\000\000(\000'[[node DecodeJpeg (defined at retrain.py:936) ]]

在这里插入图片描述

==解决方法:== 不知名原因,我直接删除错误图片,没有问题。

四、总结与改进

转化为app实现模型之后,猫咪的识别率产生了断崖式的下降,后续还需要改进一下,有时间再继续写下去。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容