原文:https://tigercosmos.xyz/post/2017/07/ai/tensorflow-flower/index.html
前言
最近机器学习、人工智慧、深度学习等等名词非常夯,本篇用深度学习简单实作一个可以辨识不同种类花朵的 Android App。第一部分是训练图片的模型,这时已经可以在电脑上作辨识了。第二部分是将第一部份训练的模型放进 Android 里面,实作手机辨识的部分。
第一部分
环境设定
Anaconda
Anaconda 可以建立虚拟环境来跑 Python,好处是可以建立很多种不同的环境来测试,并且使用 Anaconda 时 pip
不用 root 权限。
$ wget https://repo.continuum.io/archive/Anaconda3-4.4.0-Linux-x86_64.sh$ bash Anaconda3-4.4.0-Linux-x86_64.sh
Python & Tensorflow
建立一个虚拟环境,因为我用 python2.7 搭配 tensorflow1.1 所以环境名称取为py2t1.1
$ conda create -n py2t1.1 python=2.7
安装好环境后,要进入虚拟环境,启用是用 activate
$ source activate py2t1.1 (py2t1.1)$ # 会显示成这样
而取消启用是用 deactivate
$ source deactivate
接着要安装 tensorflow
,我这边版本是用 tensorflow1.1 python2.7 CPU 版本,有其他需求可以在这里找其他版本。
(py2t1.1)$ pip install --ignore-installed --upgrade \ https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-1.1.0-cp27-none-linux_x86_64.whl
这样就把环境设置好了。
训练模型
前置作业
这时候可以在虚拟环境里,也可以不在。只有当要使用 python 跑 tensorflow 时才一定要进入设置好的虚拟环境。
建个资料夹
$ mkdir flower_classification$ cd flower_classification
取得花朵照片
curl -O http://download.tensorflow.org/example_images/flower_photos.tgztar xzf flower_photos.tgz
取得 retrain.py
,这是使用 Inception v3
训练好的图片辨识模型,并在最后加上新的一层网络,然后重新训练一次模型来辨识照片。
$ curl -O https://raw.githubusercontent.com/tensorflow/tensorflow/r1.1/tensorflow/examples/image_retraining/retrain.py
开始训练
先进入环境
$ source activate py2t1.1
$ python retrain.py \ --bottleneck_dir=bottlenecks \ --model_dir=inception \ --learning_rate=0.5 \ --summaries_dir=training_summaries/long \ --output_graph=retrained_graph.pb \ --output_labels=retrained_labels.txt \ --image_dir=flower_photos
训练完之后会产生 retrained_graph.pb
和 retrained_labels.txt
,这两个档案可以拿来分析新的照片。
辨识照片
取得 label_image.py
这是辨识的程式码
$ curl -L https://goo.gl/3lTKZs > label_image.py
执行辨识
$ python label_image.py 要辨识的花朵照片.jpeg
结果大概会像这样
daisy (score = 0.99071)sunflowers (score = 0.00595)dandelion (score = 0.00252)roses (score = 0.00049)tulips (score = 0.00032)
第二部分
前置作业
tensorflow-for-poets-2
是 googlecodelab 的範例 Andriod App 专案
$ cd ~/$ git clone https://github.com/googlecodelabs/tensorflow-for-poets-2$ cd tensorflow-for-poets-2
将刚刚训练好的花朵辨识整个资料夹 flower_classification
複製进去
$ cp -r ~/flower_classification .
处理模型
优化
$ python -m tensorflow.python.tools.optimize_for_inference \ --input=flower_classification/retrained_graph.pb \ --output=flower_classification/optimized_graph.pb \ --input_names="Cast" \ --output_names="final_result"
压缩
$ python -m scripts.quantize_graph \ --input=flower_classification/optimized_graph.pb \ --output=flower_classification/rounded_graph.pb \ --output_node_names=final_result \ --mode=weights_rounded
将 rounded_graph.pb
和 retrained_labels.txt
放进 android/assets
资料夹
$ cp flower_classification/rounded_graph.pb flower_classification/retrained_labels.txt android/assets/
安装 AndroidStudio
https://developer.android.com/studio/index.html
开启 Android 专案
打开 AndroidStudio,选择 "Open an existing Android Studio project",选择资料夹 tensorflow-for-poets-2/android
。 然后它会问是否用 gradle,选择"ok"。 等 gradle 更新好之后,就可以 build 了。最后再把 APK 安装到手机上。
参考资料
https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/index.html#0
https://codelabs.developers.google.com/codelabs/tensorflow-for-poets-2/#0