在推出Tensorflow(一下简称TF)时同时推出了TensorFlow Mobile(手机版和标准电脑版有区别,一下简称TFM)对于移动设备上使用深度学习网络还是有相对的限制,主要是计算性能无法达到。近期google推出了专门针对移动设备上可运行的深度网络模型简单版(Tensorflow Lite,一下简称TFT),查看其demo效果识别速度确实比较快,但是也有很多限制目前而言,区别如下:
1 TFT是TFM的进化版,在大多数情况下使用TFT来开发可以减少很多空间,其网络模型要比TFM要小的多。
2 TFT目前为开发预览版本,没有涵盖所有用例,如果有需求还是推荐使用TFM。
3 TFT目前只支持一组有限的运算符,因此默认情况下并不是所有TF网络模型都可以运行。而TFM具有更全面的支持功能。

整个过程可分为3个步骤:
1 使用现有优秀的网络模型训练自己的模型
2 模型转换成TFM可识别使用的模型文件
3 在AndroidStudio进行构建

如何使用现有的网络模型训练自己可用的模型?
这里使用google训练好的模型inception-2015-12-05.tgz(该模型在ImageNet比赛中获得No.1)
https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_224_android_quant_2017_11_08.zip
模型下载需要穿墙。下载好以后新建文件夹retrain存放如新建inception_model 文件夹,这里手动解压,正常应该会有这些文件:(文件夹名称随意)

该模型能识别1000个物体类别,性能表现良好,因此选择该模型进行“迁移学习“

现在开始准备我们需要让网络识别的物体数据,如做人脸识别,可以事先采取人脸数据,每个人脸数据图片不得少于 20 张图片,格式为jpg或者png。这里准备乔布斯照片20张

重点来了,整个文件结构是固定的,有点蛋疼,新建目录data ,在该文件夹下面在新疆 train 文件夹,在train文件夹下面新建某个具体人脸的文件夹 xxxface,然后具体的人脸数据放在对应的文件夹下面,如下:

注意:在train下面一级的文件夹名称必须小写,不能有中文,文件夹名称相当于类别标签。

数据准备完毕后,在retrain文件夹下面新建一个文件夹 bottleneck 该文件夹名称固定(这里是由于网络模型内部结构导致必须如此)

如果有兴趣可以把可视化日子保存下来,如上图的 summaries文件夹就是用来存放日志的

以上都准备完毕后开始准备重建自己的网络模型,首先打开cmd命令行窗口,找到在git上clone下来的Tensorflow项目,找到项目中的 ..\ tensorflow\tensorflow\examples\image_retraining\retrain.py 文件,复制该文件路径到cmd中(这是python脚本因此需要python方式运行),在路径后面追加参数,
参数1:–bottleneck_dir ..\ inception_model\retrain\bottleneck (这里是刚刚新建的空文件夹)
参数2:–how_many_training_steps 100 (这里表示训练次数)
参数3:–model_dir ..\inception_model (这个表示下载下来的模型存放的文件夹)
参数4:–summaries_dir ..\inception_model\retrain\summaries (存放可视化模型日志文件夹)
参数5:–output_graph ..\inception_model\retrain\myoutput_graph.pb (输出模型的位置)
参数6:–output_labels ..\ inception_model\retrain\myoutput_lables.txt (输出类别标签位置)
参数7:–image_dir .. \inception_model\retrain\data\train (存放需要训练图片的文件夹地址)

综上可写入一个批处理文件中 retarin.bat:

python E:\openSource\Deeplearning\TensorFlow\tensorflow\tensorflow\examples\image_retraining\retrain.py ^
--bottleneck_dir E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model\retrain\bottleneck ^
--how_many_training_steps 100 ^
--model_dir E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model ^
--summaries_dir E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model\retrain\summaries ^
--output_graph E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model\retrain\myoutput_graph.pb ^
--output_labels E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model\retrain\myoutput_lables.txt ^
--image_dir E:\workSpace\pythonWorkSpace\tensorflow\src\inception_model\retrain\data\train ^
pause

执行以上语句,训练完成后会在指定位置生产适用自己数据的网络模型 myoutput_graph.pb和myoutput_lables.txt 标签文件.

可以先在电脑上测试下模型是否正确识别训练的图片。

至此学习模型准备完毕。


模型转换

在电脑上训练的网络模型,有些运算在TFM上可能不支持,需要做一些处理,处理步骤如下:
打开cmd,找到tensorflow项目中的strip_unused.py 脚本文件(..\ tensorflow\tensorflow\python\tools\strip_unused.py),复制该路径到cmd中,该脚本需要几个参数。
参数1:–input_graph=..\inception_model\retrain\myoutput_graph.pb (需要转换的模型)
参数2:–output_graph= ..\inception_model\retrain\ my_tfm_output_graph.pb (转换后存放)
参数3:–input_node_names=”Mul” (输入节点的名称,固定)
参数4:–output_node_names=”final_result” (输出节点名称,固定)
参数5:–input_binary=true (输入二进制数据)

执行完以上脚本语句即可进行转换。


最后构建App应用

打开Android Studio 导入项目 ..\ tensorflow\tensorflow\examples\android
导入后他会自动进行构建,构建过程会去下载一些数据,如果没穿墙可能会fail 下载的数据可以在download-models.gradle 文件中看到:

如果不需要下载这些模型数据可以找到build.gradle文件把
apply from: “download-models.gradle” 注释即可。

修改编译模式,在build.gradle文件中默认编译工具为bazel ,如果选择bazel需要先安装这个构建工具,这里选择cmake方式构建jni文件,修改:

def nativeBuildSystem = 'cmake'

接下来把刚刚转换好的模型和标签文件放入 项目 assets 文件夹下面:

修改org.tensorflow.demo. ClassifierActivity.java页面(demo识别人口)

把这些属性修改成以上值,在进行构建,构建成功后可直接运行到移动设备上。
效果:

TF标准模型TensorFlow Mobile for Android相关推荐

  1. [译] 如何在安卓应用中使用 TensorFlow Mobile

    原文地址:How to Use TensorFlow Mobile in Android Apps 原文作者:Ashraff Hathibelagal 译文出自:掘金翻译计划 本文永久链接:githu ...

  2. 将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

    2017/02/23 更新 贴一个TensorFlow 2017开发者大会的Mobile专题演讲 移动和嵌入式TensorFlow 这里面有重点讲到本文介绍的三个例子,以及其他的移动和嵌入式方面的TF ...

  3. tensorflow学习笔记九:将 TensorFlow 移植到 Android手机,实现物体识别、行人检测和图像风格迁移详细教程

    2017/02/23 更新 贴一个TensorFlow 2017开发者大会的Mobile专题演讲 移动和嵌入式TensorFlow 这里面有重点讲到本文介绍的三个例子,以及其他的移动和嵌入式方面的TF ...

  4. Tensorflow MNIST for Android

    本篇博客主要介绍如何使用 tensorflow 通过 CNN 实现 MNIST 手写数字识别问题,并将模型持久化在Android端运行. 整体介绍 主要需要通过以下几步: 模型生成过程:使用 tens ...

  5. TF:tensorflow框架中常用函数介绍—tf.Variable()和tf.get_variable()用法及其区别

    TF:tensorflow框架中常用函数介绍-tf.Variable()和tf.get_variable()用法及其区别 目录 tensorflow框架 tensorflow.Variable()函数 ...

  6. TF学习——Tensorflow框架之基础概念、设计思路、常用方法之详细攻略

    TF学习--tensorflow框架之基础概念.设计思路.常用方法之详细攻略 目录 Tensorflow框架基础概念 Tensorflow框架设计思路 Tensorflow框架常用方法 Tensorf ...

  7. Jquery Mobile设计Android通讯录第二章

    本文是jQuery Mobile设计Android通讯录系统教程的第二篇,在上一篇教程中(http://publish.itpub.net/a2011/0517/1191/000001191561.s ...

  8. TensorFlow Lite编译Android so库

    工作中最近用到了Google TensorFlow技术,Android端对相机预览图进行预处理,并加载tflite模型并推测运行结果.期间需要用到lite的so库等相关sdk,并自己实践编译了一下. ...

  9. tensorflow移植到Android端,实现物体检测自动拍照

    tensorflow移植到Android端实现物体检测 一. 说明 1. tensorflow是什么: 是谷歌基于DistBelief进行研发的第二代人工智能学习系统. 2. 为什么要使用tensor ...

  10. tf.variance_scaling_initializer() tensorflow学习:参数初始化

    CNN中最重要的就是参数了,包括W,b. 我们训练CNN的最终目的就是得到最好的参数,使得目标函数取得最小值.参数的初始化也同样重要,因此微调受到很多人的重视,那么tf提供了哪些初始化参数的方法呢,我 ...

最新文章

  1. phpStorm无法使用svn1.8的解决办法
  2. 面向服务的计算(SOC)课程相关资料
  3. 八十四、SpringBoot微服务Dubbo和Zookeeper分布式
  4. 【推荐】国外优秀Drupal答疑网站
  5. 【CF1189F】Array Beauty【dp】【复杂度玄学优化】
  6. ptmalloc内存分配和回收详解(文字版)
  7. 【今日CV 视觉论文速览】05 Dec 2018
  8. 免费中文深度学习课程来了!北大本科生同款,孙剑领衔旷视研究团队开讲
  9. php把字符串变成多组,php把字符串变成数组(有分隔符)
  10. js保存网络图片至本地
  11. python 计算时间、日期差值类
  12. ## 2018-2019-1 《信息安全系统设计基础》 20165232 20165231 20165235 实验五 通信协议设计...
  13. 用Java简单实现验证码功能以及校验
  14. 找不到Break键怎么Quit / 退出服务CTRL-BREAK怎么输入啊?/ 笔记本键盘上没有break键
  15. PreScan 教程:0. PreScan与Matlab连接
  16. 从编程当中走向创业之路
  17. 2023考研常识知识之五类数学有哪些区别
  18. jQuery 表单提交衣服尺寸选择勾选获取value值-20130720
  19. 基于FPGA的UART全双工数据控制器
  20. 写给那些进步缓慢却全然不知的IT人

热门文章

  1. 为什么随机存取存储器叫做随机
  2. 2021年济南市居民普通门诊统筹定点医疗机构名单
  3. Oblog 4.5-4.6 accessmssql getshell 0day
  4. 轻松获得oblog2.52的WebShell
  5. 动易2006CMSSP3+动网论坛 DVBBS 7.1 SP1+Oblog 3.13绿色整合版
  6. 中级java面试问题大全及答案大全
  7. QLExpress入门学习
  8. 英语音标中KK音标、IPA音标、DJ音标各是什么意思
  9. mysql查询1970年以后出生的人_1970年属狗女一生命运,70年属狗人一生灾难有哪些...
  10. 【寒江雪】Go实现命令模式