详解 TensorFlow TFLite 移动端(安卓)部署物体检测 demo(2)——量化模型

写在前面

上篇写了使用 TensorFlow 提供的 examples 项目在安卓手机移动端部署一个简单的物体检测 demo。写到换自定义模型部署我给跑了,现在回来接着说(/(ㄒoㄒ)/~~) 上篇写到了想要换成自己的模型大概的步骤,也就是先训自己的模型,然后要 freeze 它,然后 convert 成 tflite 格式,最后再把 labelmap 信息作为 metadata 写入模型输出最后的 tflite放到手机上运行。这几句话说得很笼统,但是想先往前走一走,所以先不说那么详尽了(说的多错的多23333)。

这个 demo 下会先给一个现成可拿来测试的、平时 PC 上训练得到的模型,所以我们可以先不说训练模型的事情。我们就先用这个现成的,主要走后面那三步,也就是 freeze、 convert 和 metadata 三个步骤。

我上一篇中已经说过了,到目前为止 tensorflow 的文档没有全部更新,所以造成很多重要引导信息不能直接获取到。截止到现在,app 下 README 文件还没给最后 metadata 这一步骤以及对应的简要代码(tensorflow 已经提供了这部分代码)。所以仍然照旧,只想看流程的可以直接看“上帝视角”,还想看看我曾经如何找路的可以看“地图探索”

老规矩,害怕把人吓走,先放点结果看看。本篇里面换模型了呦,用的 oid 数据集,里面有一类物体是 football 足球,这在上一篇模型(COCO)数据集里是没有的哦。(我没有足球,这是显示屏,开的百度搜索到的足球图片233333)

在这里插入图片描述

那那那那可以直接开始 freeze,convert 和 metadata 了吗?

不可以。

下载并安装 models

(1)“上帝视角” 下载 models:
完成这两个步骤就需要先下载并安装上篇提到的 model 项目了(本篇中 examples 项目权重就占得少了,主要是 models 项目的介绍比较多)。

cd /path/to/put/models
https://github.com/tensorflow/models.git

models 这个项目下面是官方还有很多研究者提供的模型相关资料。我们最关心的部分是 models/research/object_detection ,这个文件夹下的内容就是物体检测的基本工具和信息,以及 freeze 和 convert 相关的代码。

(2)安装 models:
“上帝视角”:反正我都试了,不安装 models 也行(忙活半天,哎……tensorflow 官方文档真的害人不浅啊/(ㄒoㄒ)/~~)

“地图探索”:此步骤的经历比较曲折,去年做的时候,我是老老实实按照引导来的。之前的 models/research 文件夹下是有一个 setup.py 文件的,通过它就可以安装 object_detection 。 examples 项目那边 app 路径下面的 README 仍然还保留着这个安装的步骤,但是目前最新的 models/research 下面没这个 setup.py 文件了。我不确定是这个 demo 整体更新过不再需要这一步,还是单纯地缺失了 setup.py 文件。整得我有点懵,所以我进行了两种尝试


2021.07 更新
关于 setup 文件“丢失”情况,在 /models/research/object_detection/g3doc/ 路径下 文件 tf1.md 和 tf2.md 中有此 API 的安装方式,大同小异。


尝试安装:我复制了以前版本 models/research 路径下的 setup.py 文件,并且照着以前的安装方式,也成功安装了。总之最后会在你的环境里添加 object_detection1.0 这个包,具体安装命令比较简单,但是里面实际放生步骤比较多,因为想清晰知道发生了什么,我特意根据输出记了一下,有点长,单独放在这里

尝试不安装:我不安装,跳过这一步,为了验证,我还特意建了全新的环境,仍然可以完成整个 freeze 和 convert 过程。所以,emmm 只能说,不安装 models 这一步,仍然可以完成 freeze 和 convert,但是会不会有别的隐患,我目前的二次梳理还没有遇到,因为 freeze 和 convert 也只是整个 modles 项目中的其中一部分功能而已,目前我不确定其他别的使用会不会受到此步骤的影响。

测试不安装 models 新建的环境,我装的 tf1,原因下一段写:

conda create -n lxdpy364tflite python=3.6
conda install tensorflow-gpu=1.14
pip install tf_slim
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/ matplotlib

是时候操心一下环境了

tf 版本用 v1 还是用 v2?

“上帝视角”:取决于你到底用哪个模型,我这个记录里面用的那个 ssd_mobilenet_v2 必须用 tf1。

tf1 和 tf2 分别支持的模型,在 models/research/object_detection/g3doc 下的 tf1_detection_zoo.mdtf2_detection_zoo.md 文件中有详细的列表介绍。这点是无法通过 tf2 compat v1 替代的。

“地图探索”:插一句有用的废话,按照我之前(去年)的路程,这个 models 里面有很多 tf 1 和 2 之间的坑……我当时每天上班都骂骂咧咧的,就是吧,感觉它在 1 和 2 之间好像能无缝切换,但反正根本不是这样。

最后,(针对 app 里面介绍 freeze 和 convert 提供的 ssd_mobilenetv2_oidv4)我是在 tfv1 环境下跑通的,是因为 ssd_mobilenet_v2 仅仅在 tfv1 的模型种类构建范围内(这个后面再说下,截止目前 tf1 和 tf2 的范围是不一样的)。

然后现在我看这个 models 项目,好像在 tf 1 和 2 兼容上又做工作了?我以为我可以直接使用 tf2 了?毕竟官方都说了鼓励使用 tf2,我就信了他们的邪……我就是 TMD 记吃不记打/(ㄒoㄒ)/~~

所以我用的 v2 版本跑了一遍,一路处理下去依次解决问题后,仍然卡在 tfv2 不提供 ssd_mobilenetv2_oidv4 的模型构建功能,针对 ssd_mobilenet_v2 只能用 tfv1。

如果你用 tf2 跑这个 ssd_mobilenet_v2 的话,即使你一路下去解决各种小报错,最终也会卡在这里,报错的最后一行也有明确说明,这个模型根本不在目前 tf2 支持的范围内:

 File "object_detection/export_tflite_ssd_graph.py", line 140, in main
    FLAGS.max_classes_per_detection, use_regular_nms=FLAGS.use_regular_nms)
  File "/home/yx-lxd/mobile_work/tensorflow_models/research/object_detection/export_tflite_ssd_graph_lib.py", line 246, in export_tflite_graph
    pipeline_config.model, is_training=False)
  File "/home/yx-lxd/mobile_work/tens
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值