Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >一头栽进了tensorflow lite的巨坑里

一头栽进了tensorflow lite的巨坑里

作者头像
云水木石
发布于 2019-07-01 09:42:09
发布于 2019-07-01 09:42:09
1.2K0
举报

之前写过一篇《这个中秋,我开发了一个识别狗狗的app》。图片识别可以算作是深度学习领域烂大街的主题,几乎每本书和教程都会拿来作为入门示例。移动端的图片识别的教程也很多,大多数都脱胎于Google的教程《TensorFlow for Poets》和《TensorFlow for Poets 2: Android》。有了现成的教程,我对实现狗狗的图像识别信心满满,认为重点在于信息的展示及狗狗信息的收集。

然而多年的开发经验告诉我,真正自己做起来,一定会碰到问题,特别是像tensorflow lite这种频繁迭代的产品。果然,我就一头栽进了tensorflow lite 的巨坑里。下面我就说道说道这个坑。

参考上面提到的教程,将基本功能实现出来还算顺利。然而,等代码build出来,安装到手机上一测试,拿一张狗狗的图片识别,结果的top 1概率都是0.0 ~ 0.02之间,使用训练的图片测试也是如此。为了更好的进行测试,我写了一个测试用例:predictSingleImage(),直接测试sd卡上的图片。排查问题过程如下:

  1. 确认传递给ImageClassifier的bitmap是正常的,这个可以通过将bitmap保存到文件确认。经过人眼观察,送到ImageClassifier的bitmap中狗狗的图像还是很明显的。
  2. 确认模型问题。我开始采用的是Google Inception V3模型,换成教程中使用的mobilenet模型,问题依旧。将我训练出来的mobilenet模型放到TensorFlow for Poets 2: Android的示例代码中,工作正常,虽然准确率不高,但至少top 1的概率大于0.4。可以确认模型没有问题。
  3. 确认代码,基本上复制的TensorFlow for Poets 2: Android示例代码,不可能出现问题。

到了这一步,就非常郁闷了,于是上网搜索,看有没有和我碰到同样问题的。果然,有个哥们在stackoverflow上提了一个问题:Accuracy score of inceptionV3 tflite model is not good as of retrained_graph.pb file,链接在此:https://stackoverflow.com/questions/49952165/accuracy-score-of-inceptionv3-tflite-model-is-not-good-as-of-retrained-graph-pb

这个帖子将问题步骤描述得很详细,最后贴出了测试结果:

然而,这个问题没有人回答。这一下子又陷入了困顿,有一阵子甚至开始怀疑人生:识别静态照片和camer流中一帧图像难道有本质区别吗?

一次搜索中,我无意中看到一个帖子:TfLite Image classification score is not consistent it keeps increasing for same image untill it reaches to some saturation(actual score)。链接地址:https://groups.google.com/a/tensorflow.org/forum/#!topic/tflite/fREwHb4rAPM

外国人提问题都比较严谨,这个帖子也贴了代码,大意就是说对于同一张图片,Tflite的图片分类的结果不一样,每识别一次,top 1概率就会提升,直到到达一个固定值。

看到这里,我才恍然大悟。回想我的代码和教程代码不同之处就在于:我只调用了一次识别过程,而教程是针对图像帧进行识别,会反复调用识别过程,可能之前的概率很低,但很快被后面的结果给覆盖了。

开始,我猜测是代码中tensorflow lite没有初始化好就调用其识别过程。但我在测试代码中加入延时,没有效果。加入循环,对一个图片反复识别几次,后面的识别就正常了。值得一提的是,不需要反复识别同一图片,换几个图片识别,后面再换其他的图片识别一样没问题。为此我添加了predictImages()方法,测试一系列图片,可以看到开始的top 1 score很低,但识别了几张之后,后面的top 1概率就正常了。

这时,我算是明白,我真的跌进tensorflow lite的巨坑里面了。Tensorflow Lite出现这样一个问题也真是匪夷所思,同样的输入和同样的处理,输出结果却不同,真的颠覆了我对编程的理解。

当年爱因斯坦面对量子力学,提出了“上帝是在执骰子吗?”的疑问。

深度学习也是如此?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-09-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云水木石 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TensorFlow Lite for Android 初探(附demo)
TensorFlow Lite 是用于移动设备和嵌入式设备的轻量级解决方案。TensorFlow Lite 支持 Android、iOS 甚至树莓派等多种平台。
OpenCV学堂
2019/11/13
1.2K0
Android上的TensorFlow Lite,了解一下?
TensorFlow Lite是TensorFlow针对移动和嵌入式设备的轻量级解决方案。它可以在移动设备上高效运行机器学习模型,因此您可以利用这些模型进行分类、回归或其他功能,而无需和服务器交互。
云水木石
2019/07/02
1.9K0
Android上的TensorFlow Lite,了解一下?
【免费教学】在嵌入式中使用 TensorFlow Lite
第一期中,分享了 TensorFlow Lite 的一些基本知识。今天与大家分享 Android 平台上的一些 TensorFlow Lite 应用,先来一起看看视频吧:
刘盼
2018/07/26
1.6K0
TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案 | Google 开发者大会 2018
2018 年 9 月 21 日 ,凌钰城(Google Brain 软件工程师)带来一场《TensorFlow Lite:TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案》的演讲,本文将对演讲做一个回顾。
云水木石
2019/07/01
2.3K0
TensorFlow在移动设备与嵌入式设备上的轻量级跨平台解决方案 | Google 开发者大会 2018
TensorFlow 智能移动项目:11~12
在前九章中,我们使用 TensorFlow Mobile 在移动设备上运行各种由 TensorFlow 和 Keras 构建的强大的深度学习模型。 正如我们在第 1 章,“移动 TensorFlow 入门”中提到的那样,Google 还提供了 TensorFlow Lite(可替代 TensorFlow Mobile 的版本)在移动设备上运行模型。 尽管自 Google I/O 2018 起它仍在开发人员预览中,但 Google 打算“大大简化开发人员针对小型设备的模型定位的体验。” 因此,值得详细研究 TensorFlow Lite 并为未来做好准备。
ApacheCN_飞龙
2023/04/24
4.5K0
TensorFlow 智能移动项目:11~12
使用Tensorflow构建属于自己的图片分类器
近几年火热的AI领域吸引了众多有志之士加入,在一段时间的学习之后,不知道你是否有一个疑惑:我能够用AI来做点什么呢?
云水木石
2019/07/01
1.1K0
使用Tensorflow构建属于自己的图片分类器
TensorFlow Lite for Android 初探(附demo)一. TensorFlow Lite二. tflite 格式三. 常用的 Java API四. TensorFlow Lite
我们知道大多数的 AI 是在云端运算的,但是在移动端使用 AI 具有无网络延迟、响应更加及时、数据隐私等特性。
fengzhizi715
2018/12/07
3.2K0
【免费教学】Tensorflow Lite极简入门
边缘计算时代离我们越来越近,当前嵌入式设备的智能框架还是 TensorFlow Lite比较成熟,这里我准备用一系列免费课程和大家一起讨论下 TensorFlow Lite在移动设备上的应用,让我们的设备智能起来。
刘盼
2018/07/26
1.3K0
【免费教学】Tensorflow Lite极简入门
当微信小程序遇上TensorFlow:Server端实现
又是一年一度的十一黄金旅游周,你是在景区看人从众叕,还是在高速公路上观看大妈打太极呢?旅游黄金周我一般是尽量不出门,这个十一也不例外。十月一日跑了一个半马迎接国庆,十月二号选择去了一个偏门的景点:张之洞与武汉博物馆。今天则宅在家,吃吃喝喝之余,琢磨起识别狗狗的微信小程序。
云水木石
2019/07/01
1.2K0
当微信小程序遇上TensorFlow:Server端实现
基于Paddle Lite在Android手机上实现图像分类
Paddle Lite是飞桨基于Paddle Mobile全新升级推出的端侧推理引擎,在多硬件、多平台以及硬件混合调度的支持上更加完备,为包括手机在内的端侧场景的AI应用提供高效轻量的推理能力,有效解决手机算力和内存限制等问题,致力于推动AI应用更广泛的落地。
夜雨飘零
2020/08/02
7950
基于Paddle Lite在Android手机上实现图像分类
谷歌终于推出TensorFlow Lite,实现在移动设备端部署AI
安妮 编译整理 量子位 出品 | 公众号 QbitAI 还得从半年前说起。 今年5月的谷歌I/O大会上,安卓工程副总裁Dave Burke宣布将推出一个专门为移动设备优化的TensorFlow,称为T
量子位
2018/03/23
1.2K0
基于Tensorflow2 Lite在Android手机上实现图像分类
Tensorflow2之后,训练保存的模型也有所变化,基于Keras接口搭建的网络模型默认保存的模型是h5格式的,而之前的模型格式是pb。Tensorflow2的h5格式的模型转换成tflite格式模型非常方便。本教程就是介绍如何使用Tensorflow2的Keras接口训练分类模型并使用Tensorflow Lite部署到Android设备上。
夜雨飘零
2020/07/22
3.3K0
基于Tensorflow2 Lite在Android手机上实现图像分类
推出 TF Lite Task Library 接口,简化 ML移动端开发流程
作者 | Lu Wang、Chen Cen、Arun Venkatesan 和 Khanh LeViet
磐创AI
2020/09/28
1.4K0
推出 TF Lite Task Library 接口,简化 ML移动端开发流程
Tensorflow Lite Model Maker --- 图像分类篇+源码
The TensorFlow Lite Model Maker library simplifies the process of adapting and converting a TensorFlow neural-network model to particular input data when deploying this model for on-device ML applications. 解读: 此处我们想要得到的是 .tflite 格式的模型,用于在移动端或者嵌入式设备上进行部署
XianxinMao
2021/10/10
1.3K0
Tensorflow Lite之图片识别研究
有关TensorFlow的介绍建议看官网,如果懒的话可以直接看我上篇文章。官方告诉我们,入门TensorFlow lite的最好姿势是学习他的demo,这里从第一个例子,图片识别开始。
老码小张
2019/06/05
2.8K1
模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo
近日,TensorFlow模型优化工具包又添一员大将,训练后的半精度浮点量化(float16 quantization)工具。
量子位
2019/08/09
1.4K0
模型压缩一半,精度几乎无损,TensorFlow推出半精度浮点量化工具包,还有在线Demo
用 TensorFlow Lite 在安卓系统上实现即时人体姿态跟踪
作者 | Eileen Mao和Tanjin Prity,谷歌工程实习生,2019年夏季发布。
AiTechYun
2019/08/19
4K0
用 TensorFlow Lite 在安卓系统上实现即时人体姿态跟踪
跨越重重“障碍”,我从 PyTorch 转换为了 TensorFlow Lite
本文最初发表在 Towards Data Science 博客,经原作者 Ran Rubin 授权,InfoQ 中文站翻译并分享。
深度学习与Python
2020/11/06
1.7K0
跨越重重“障碍”,我从 PyTorch 转换为了 TensorFlow Lite
TensorFlow小程序探索实践
最近业余时间做些创新探索,在微信小程序上实现找到纸或笔记本,定位,然后取到纸上的简笔画,之后进行简笔画识别,找到对应位置(之后可以在此位置上加载对应3d模型,实现ar效果, 对应ar官方案例:https://github.com/bbSpider/miniprogramThree)
EchoROne
2022/12/29
2.1K0
TensorFlow小程序探索实践
如何将自己开发的模型转换为TensorFlow Lite可用模型
对于开发者来说,在移动设备上运行预先训练好的模型的能力意味着向边界计算(edge computing)迈进了一大步。[译注:所谓的边界计算,从字面意思理解,就是与现实世界的边界。数据中心是网络的中心,PC、手机、监控照相机处在边界。]数据能够直接在用户手机上处理,私人数据仍然掌握在他们手中。没有蜂窝网络的延迟,应用程序可以运行得更顺畅,并且可大幅减少公司的云服务账单。快速响应式应用现在可以运行复杂的机器学习模型,这种技术转变将赋予产品工程师跳出条条框框思考的力量,迎来应用程序开发的新潮流。
云水木石
2019/07/01
3.2K0
如何将自己开发的模型转换为TensorFlow Lite可用模型
推荐阅读
相关推荐
TensorFlow Lite for Android 初探(附demo)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档