后续(移植到手机上)

上一篇博客中介绍了如何使用Tensorflow object detection API 搭建属于自己的物体识别模型(https://blog.csdn.net/dy_guox/article/details/79111949),由于我们的模型是基于ssd_mobilenet训练,这个模型本身是相对较为轻量级的,也可以在手机上使用,因此,这篇博客将介绍如何将Tensorflow object detection API 训练的模型迁移导入到手机中使用。


首先需要确认,已经训练好了自己的模型(以 .pb结尾)。即在object_detection\tv_vehicle_inference_graph文件夹下的 frozen_inference_graph.pb 文件。接下来将以我在视频教程中的例子(检测武大靖)进行示范。(参考之前博客教程的视频地址:https://www.bilibili.com/video/av21539370/

首先,将 frozen_inference_graph.pb 文件重命名为 WDJ_frozen_inference_graph.pb, 这样便于跟其他模型区分开来。

我的测试将在Android系统进行,IOS系统没有测试。


运行效果视频:

https://www.bilibili.com/video/av22957279/?p=1

如果你觉得有点帮助,欢迎投币支持。



1、安装配置 TensorFlow on Android

https://www.tensorflow.org/mobile/android_build

上述网址有详细的教程,考虑到国内可能被墙,继续重复一遍。

首先先根据提示把Demo跑起来,后面的工作在此基础上进行。

1)安装 Android Studio

去官网下载安装即可。

2)在Github上 clone TensorFlow 

如果电脑上安装了Git,那么在特定目录下,运行git 命令

[plain]  view plain  copy
  1. git clone https://github.com/tensorflow/tensorflow  

如果连Git都没有,那就到

https://github.com/tensorflow/tensorflow

右上方绿色“clone or download”下载 zip到本地,解压。

3)搭建 Android Studio环境

打开Android Studio,选择 “Open an existing Android Studio project”,在“Open File or Project ”,选择在2)中对应的 tensorflow/examples/android 文件夹,OK。如果需要“Gradle Sync”,选择OK。第一次启动可能需要安装或更新很多模块,耐心等待。

4) 在 build.gradle 文件中(在左侧 1:Project 面板  Android 下面 Gradle Scripts ),找到  nativeBuildSystem 这个变量,设置等于 “none”:

// set to 'bazel', 'cmake', 'makefile', 'none'
def nativeBuildSystem = 'none'

5) 点击上方菜单 Run -> Run 'android'  命令, 在弹出菜单选择 右侧的 Proceed Without Instant Run。

6)同时,打开手机的开发者模式与USB调试,用USB连接电脑。不同手机方法不同,自行百度。

成功连接后运行命令时会识别对应手机型号,选择后继续,将会在手机上安装4个不同的APP,期间注意查看手机,允许安装(默认会拒绝)。

7)4个不同APP有不同的功能,大概就是深度学习的几个重要的研究方向:

TF Classify. 物体识别,识别图中有什么物体;


TF Detect. 物体检测,除了识别有什么物体,还能检测物体的位置,跟上一篇博客的目的一致,也是本博客模型迁移的目标;


TF Stylize. 实时风格变换,将摄像头拍摄到的图片自动转换成不同的风格,类似前段时间很火的模仿梵高作画;


TF Speech. 选择单词说出来,软件能识别。



Demo视频如下:

https://www.bilibili.com/video/av22957279/?p=1




2.配置模型

1)将之前训练好的识别武大靖的模型 WDJ_frozen_inference_graph.pb 放在 Android文件夹中的 assets 

文件夹下。

2)继续在当前文件夹下,能发现数个 ‘...labels.txt’ 文件,复制其中任意一个,重命名为 “WDJ_labels.txt”用于储存标签,名字随意起,只要你自己能理解就行。打开 “WDJ_labels.txt”,建议用 Sublime Text,直接用记事本打开所有标签会挤在同一行。在Sublime text中,发现第一行是“???”,不用管,后面每一行是一个标签,由于我的任务只有一个,就是“WDJ”,注意标签跟之前训练模型时候保持一致。保存退出。

3) 查找 “DetectorActivity.java”文件,用Sublime text 打开,找到 TF_OD_API_MODEL_FILE 与 TF_OD_API_LABELS_FILE 这两个变量,前一个改成自己模型的路径,如  ".../assets/WDJ_frozen_inference_graph.pb",后一个改成标签 .txt文件的路径,如 “.../assets/WDJ_labels.txt

4 )“DetectorActivity.java” 文件中  MINIMUM_CONFIDENCE_TF_OD_API  变量,决定最低多少置信度画识别的框,如果发现移植到手机上的模型效果不理想,可以把这个值调低,就会更容易识别出物体(但是也更容易误识别),根据自己的实际运行效果测试修改。


3. Run 

跟第1步中一样的运行步骤,等待安装。完成后在手机上打开 TF Detect ,发现跟Demo不一样了(我们不一样!)。

具体效果视频:

https://www.bilibili.com/video/av22957279/?p=2





当然,因为之前的模型训练的效果就很一般,所以在手机上的效果也是半斤八两甚至还要差,但是至少能跑了。对比之前视频里的效果,这样的结果也在预期之内,如果想追求完美,那就多训练数据,用更好的模型,比如mobile net V2,这就有待读者自己探索了。

猜你喜欢

转载自blog.csdn.net/weixin_40355324/article/details/80651350