介绍
Tensorflow Lite 是谷歌2017年底公布的新框架,基于Tensorflow的衍生。针对移动和嵌入式设备的轻量级解决方案。通过它,可以在移动设备上,实现小模型,低延迟的执行深度学习应用。
和 Tensorflow Mobile的区别
Tf发布的同时,也发布了 tf android 的应用例子。通过一系列复杂配置和编译后,可以生成静态库(.so),用过JNI的方式实现调用。这没有问题!
但是,针对没有深度学习基础的同学来说,针对只想通过深度学习得到的结果实现二次开发的码农来说,不但要掌握点深度学习的知识(确切点说,需要学习完成 deeplearning.ai 的60%的课程),还要敲敲tensorflow的代码(掌握通过tf 实现网络编程、训练、重训、执行),基于这种前提,运用起来还是比较恼火~
于是,Tensorflow Lite把这些都简单化了,可通过很简单的方式移植到我们已有的android 工程上,并进行二次开发。
TensorFlow lite Android Demo:
直接进入正题,先下载一个可使用的工程,解压,根据自己的开发环境,修改gradle等等,实现编译通过。
该工程,在加入CameraKit第三方库,实现图片的获取和显示,如需了解详情,请阅读此篇文章
《针对图像处理的Android Fresh Project》
这个工程通过拍摄单张图像,通过 mobilenet模型,识别出imagenet规定的1000类中的某记类。工程中,通过实现 Classsifer.java中的接口,同lite 的 api ,调用了模型,通过 mainactivity中调用api,实现分类识别;
运行后,可以在手机开到如下界面,包括预览图像,前后置摄像头切换和拍照按钮。当点击拍照按钮,可以看到当前图像的识别结果。
Tensorflow Lite ,用于调用model,实现深度学习的功能(目前的demo用于分类)
导入+配置方式
在gradle 加入以下脚本
android {
aaptOptions {
noCompress "tflite"
noCompress "lite"
}
}
dependencies {
。。。。。。
compile 'org.tensorflow:tensorflow-lite:+'
。。。。。。
}
然后,继承Classifier.java 接口,用过 TensorflowImageClassifier.java实现方法。其中,使用 Tensorflow Lite 自带Api,实现傻瓜式调用,输入图片和类别文档,得到输出(一个一维数组)
调用前,需把分类的模型(.lite)放在了asset文件夹下把标签文件,放在asset文件夹下,识别结果为一维数组,通过概率最大的索引,在标签文件里找到相关类名。具体代码请参考 TensorflowImageClassifier.java:
Notice
怎么把通过 tensorflow训练好并存储好的.pb模型,转换为.lite模型,请参考《Tensorflow 模型转换 .pb convert to .lite》