- 非常入门的TFLite目标检测,基本上是整合了官网的一些教程,自己加上了配合安卓模拟器使用的这一部分。
- 移动端比较:
移动端跑深度学习模型大概现在TFLite用的比较多,所以有移动端运行需要的大概就要早期搭网络的时候就使用tensorflow了吧。
我的操作系统是Windows, 目标检测网络为mobileNet+SSD。
- 搭建过程:
- 安装andriod studio,版本3.2以上。(https://developer.android.com/studio/index.html)
- git clone https://github.com/tensorflow/examples.git (可以基于这个repo改其他模型)
- 在andriod studio中打开 tensorflow/examples/lite/examples/object_detection/android这个目录
- 安装安卓模拟器测试:(我没有安卓手机所以用了安卓模拟器,如果直接连接真机更简单,在安卓手机中设置->开发者选项->USB调试打开)
-
安装夜神模拟器(要调用电脑摄像头作为模拟器的手机摄像头,有些模拟器不支持)
-
在cmd里通过 adb devices 查看连接情况:
- 显示XXX device即连接成功。
- 同时在Android Studio中Android monitor处也会显示模拟的设备:
(采用夜神模拟器时,安装好后会直接连接到Android studio,其他模拟器需要查找模拟器的端口号后,打开cmd 执行 adb connect 地址:端口号 进行连接)
- 此处可能出现的问题:
- 问题1:提示“'adb' 不是内部或外部命令,也不是可运行程序或批处理文件”
- 解决方法:打开SDK manager,根据Android SDK Location 的路径,在其子目录platform-tools中找到adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll三个文件将其复制到C:\Users\Admin>(打开cmd时显示的默认路径)目录下
- 问题2:尝试手动连接时, 执行adb connect 127.0.0.1:62001(夜神模拟器的端口号通常为62001),出现“cannot connect to 127.0.0.1:6200: 由于目标计算机积极拒绝,无法连接。”
- 解决方法:学习笔记:夜神模拟器127.0.0.1:62001: 由于目标计算机积极拒绝,无法连接解决方法_weimeig的博客-CSDN博客
-
- Build project(一般每打开一个新的项目,AS都会自动sync编译一次)
- 如果报错通常都是缺少安装包,而且错误提示中会指出,根据提示安装即可,安装好build->rebuild project重新编译。
Build成功。
- 如果报错通常都是缺少安装包,而且错误提示中会指出,根据提示安装即可,安装好build->rebuild project重新编译。
- Run
- 本次运行的是mobileNet+SSD模型, .tflite(模型文件)和label 文件在android/app/src/main/assets文件夹下(运行的时候会自动将这俩文件下载到这个文件夹下),安卓模拟器中选择摄像头即可检测。
- 在安卓模拟器中会出现TFDetect这个图标,后面可以直接通过打开这个app进行检测。
- 检测结果:
-
这个基础模型的泛化性不是很好。
- 应用其他train好的tensorflow模型:将训练好的模型转tensorflow lite可使用的模型主要有两种方式
- 用python API中的转换器:
import tensorflow as tf converter=tf.lite.TFLiteConverter.from_saved_model(saved_model) tflite_model = converter.convert() open("converted_model.tflite", "wb").write(tflite_model)
saved_model为.pb模型(Frozen GraphDef)
得到的tflite文件是包含计算图和参数的。
-
在命令行中使用转换器(官方不推荐这种方式我就没细看):
bazel run //tensorflow/lite/python:tflite_convert -- --output_file=...
- 用python API中的转换器:
-
原项目中需要修改的地方:
-
将新的detect.tflite文件和新的labelmap.txt复制到 ./lite/examples/object_detection/android/app/src/main/assets目录下,这俩文件名保持不变就不用再改Android studio中的代码了
-
如果文件名改变,打开
./lite/examples/object_detection/android/app/src/main/java/org.tensorflow.lite.examples.detection/DetectorActivity.java
-
修改相关配置。(其中TF_OD_API_IS_QUANTIZED决定是否对模型进行优化,true时表示量化,通过降低模型中数值(values)和运算符(operations)的精度(precision),量化(quantization)可以减小模型的大小和推理所需的时间。)
-
同时需要打开
./lite/examples/object_detection/android/app/build.gradle 文件,注释掉 apply from:'download_model.gradle' , 防止重新下载覆盖刚复制进去的tflite和label文件。
-
重新build and run即可。
-
版权声明:本文为CSDN博主「今儿学习了没」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/chenf1995/article/details/122849791
暂无评论