一头栽进了 TensorFlow Lite 的巨坑里

栏目: 数据库 · 发布时间: 6年前

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

一头栽进了 TensorFlow Lite 的巨坑里

之前写过一篇《 这个中秋,我开发了一个识别狗狗的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

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

一头栽进了 TensorFlow Lite 的巨坑里

然而,这个问题没有人回答。这一下子又陷入了困顿,有一阵子甚至开始怀疑人生:识别静态照片和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出现这样一个问题也真是匪夷所思,同样的输入和同样的处理,输出结果却不同,真的颠覆了我对编程的理解。

一头栽进了 TensorFlow Lite 的巨坑里

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

深度学习也是如此?

一头栽进了 TensorFlow Lite 的巨坑里


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Windows核心编程(第5版)

Windows核心编程(第5版)

Jeffrey Richter、Christophe Nasarre / 葛子昂、周靖、廖敏 / 清华大学出版社 / 2008-9 / 99.00元

这是一本经典的Windows核心编程指南,从第1版到第5版,引领着数十万程序员走入Windows开发阵营,培养了大批精英。. 作为Windows开发人员的必备参考,本书是为打算理解Windows的C和C++程序员精心设计的。第5版全面覆盖Windows XP,Windows Vista和Windows Server 2008中的170个新增函数和Windows特性。书中还讲解了Windows......一起来看看 《Windows核心编程(第5版)》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

URL 编码/解码
URL 编码/解码

URL 编码/解码

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具