美文网首页
迁移学习+TfLite Android构建自己的喵咪识别APP(

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

作者: 鱼呲呲 | 来源:发表于2019-08-01 21:13 被阅读0次

    迁移学习+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实现模型之后,猫咪的识别率产生了断崖式的下降,后续还需要改进一下,有时间再继续写下去。

    相关文章

      网友评论

          本文标题:迁移学习+TfLite Android构建自己的喵咪识别APP(

          本文链接:https://www.haomeiwen.com/subject/urhhdctx.html