本港台开奖现场直播 j2开奖直播报码现场
当前位置: 新闻频道 > IT新闻 >

wzatv:MobileNet教程(2):用TensorFlow搭建安卓手机上的图像(2)

时间:2017-08-06 21:36来源:报码现场 作者:本港台直播 点击:
python tensorflow/examples/label_image/label_image.py --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --image=/home/harvitronix/ml/blogs/road- not -road/test-image.jpg --input_layer=input

python tensorflow/examples/label_image/label_image.py --graph=/tmp/output_graph.pb --labels=/tmp/output_labels.txt --image=/home/harvitronix/ml/blogs/road- not-road/test-image.jpg --input_layer=input --output_layer=final_result --input_mean= 128--input_std= 128--input_width= 128--input_height= 128

wzatv:MobileNet教程(2):用TensorFlow搭建安卓手机上的图像

系统认为这张图片是道路的可能性为99.023%

这个系统速度很快,在我们搭载NVIDIA GeForce 960m GPU的笔记本上,识别1,000张图片只需要3.36秒,即每秒钟能识别297.6张图片。

把MobileNet应用到Android App中

现在我们拥有了一个小巧、快速、足够精确的模型,接下来我们准备把它搭载到一个Android App上,从而在真实环境中进行测试。

继续使用TensorFlow提供的工具,我们马上就会使用里面的Android示例项目完成模型的搭载。

1. 建立项目

如果你还没有准备好,可以从TensorFlow的repository下载这个Android示例项目:

git clone https://github.com/tensorflow/tensorflow.git --depth 1

具体的文件夹是tensorflow/examples/android。用Android Studio打开这个文件夹,编译,atv,然后把生成的APK安装包搭载到你的手机上,你就得到了一个搭载着在ImageNet数据集上训练出的Inception V3模型的图像分类器App,它能够准确地把猫咪跟鸭嘴兽区分开来。

如果你编译apk安装包过程有问题,可以参考他们的readme文档中的指示。(https://github.com/tensorflow/tensorflow/tree/master/tensorflow/examples/android)

我遇到的最大的挑战是NDK(Native Developer Kit)的版本问题,降级到r12b版本后才能正常的编译。

2. 评测搭载了Inception的App

我们现在运行的app上搭载的是Inception模型,让我们它做一些测评,从而可以与之后的MobileNet模型比较。

搭载了Inception的这个app的大小是53.9Mb,而搭载MobileNet的只有1.6Mb。它能够以240ms的速度识别一张图片(即4fps),CPU的占用达到了40%。

搭载Inception V3的App在4fps速度下运行时的CPU占用情况

让我们把运行速度调到1fps试试:

搭载Inception V3的app在1fps速度下运行时的CPU占用情况

现在,内存的占用仍然在35%以上,让我们盼着MobileNet能够比这表现得好些,否则我们就达不到之前定下的目标了(内存占用上限为5%)

3. 换成MobileNet

接下里让我们对这个Android project做一些小修改,从而搭载上我们的MobileNet。

首先,把你的模型和标签文件复制到project的assets文件夹里。我的是分别是/tmp/output_graph.pb 和 /tmp/output_labels.txt。

接下来,打开ClassifierActivity,具体地址是在:

tensorflow/examples/android/src/org/tensorflow/demo/ClassifierActivity.java

将这个文件中的开头部分中定义的参数设置为我们的新模型。即从一打开时的这样:

private static final int INPUT_SIZE = 224;private static final int IMAGE_MEAN = 117;private static final float IMAGE_STD = 1;private static final String INPUT_NAME = "input";private static final String OUTPUT_NAME = "output";private static final String MODEL_FILE = "file:///android_asset/tensorflow_inception_graph.pb";private static final String LABEL_FILE = "file:///android_asset/imagenet_comp_graph_label_strings.txt";

改为这样:

private static final int INPUT_SIZE = 128;private static final int IMAGE_MEAN = 128;private static final float IMAGE_STD = 128;private static final String INPUT_NAME = "input";private static final String OUTPUT_NAME = "final_result";private static final String MODEL_FILE = "file:///android_asset/output_graph.pb";private static final String LABEL_FILE = "file:///android_asset/output_labels.txt";

点击运行从而开始编译,然后在你的手机上运行相应的apk安装包,你就得到了自己的道路识别器。

结果

下面是我实际使用我这个app的视频,我对UI进行了一些小改动,从而使显示结果更直观。

那么它运行速度和CPU占用的情况怎样呢?

在我的小米5上,它识别一张图片需要55毫秒,也就是每秒18帧(18fps)。

不过,在这个识别速度下,CPU的占用也比较大。在加足马力运行的情况下,CPU的占用大概为25到30%。

搭载MobileNet的App在18fps速度下运行时的CPU占用情况

(责任编辑:本港台直播)
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
栏目列表
推荐内容