1、Mac环境下安装和编译
TensorFlow的深度学习有GPU和CPU两种版本,因为手上的MacBookPro16是不带独立GPU的,所以只能选择不带GPU版本的通过本地的PIP安装环境依赖,下列操作均在终端进行:
//请先泡茶
git clone https://github.com/tensorflow/tensorflow
//这时候去喝茶,喝完回来你会看到才刚开始
cd tensorflow
git checkout Branch
//切换到制定分支,如r1.0,实际上如果不求稳定,关系也不大
接下来安装编译环境bazel,这个是谷歌开源的分布式构建工具
//首先确保JDK环境为1.8
java -version
//安装Homebrew,这是mac下的自动安装工具
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
//安装bazel,这里一般不会出问题,有问题请自行谷歌
brew install bazel
最后安装python依赖:
sudo pip install six numpy wheel
环境到此应该就好了,接下来是配置脚本的工作
./configure //这里会有一堆的询问,按照实际情况填写即可
编译PIP安装包
bazel build --config=opt //tensorflow/tools/pip_package:build_pip_package
生成.whl文件,供安装使用
bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
安装
sudo pip install /tmp/tensorflow_pkg/tensorflow-1.0.1-cp27-cp27m-macosx_10_12_x86_64.whl
试运行python
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))
接下来是编译Android 平台应用,下载SDK和NDK,修改WORKSPACE文件如下:
# Uncomment and update the paths in these entries to build the Android demo.
android_sdk_repository(
name = "androidsdk",
api_level = 23,
build_tools_version = "25.0.2",
# Replace with path to Android SDK on your system
path = "/users/william/library/android/sdk",
)
#
android_ndk_repository(
name="androidndk",
path="/users/william/library/android/ndk/r13b",
api_level=21)
然后编译:
bazel build -c opt //tensorflow/examples/android:tensorflow_demo
根据生成的文件提示即可
2、Android studio 编译
直接在Android studio中打开tensorflow/examples/android 目录工程即可,如有必要需要打开gradle编译部分依赖关系和语法问题
如果发现assets文件夹下缺少pb等学习模型文件,则下载以下文件,解压内容放在该目录下即可
https://storage.googleapis.com/download.tensorflow.org/models/inception5h.zip
https://storage.googleapis.com/download.tensorflow.org/models/mobile_multibox_v1a.zip
https://storage.googleapis.com/download.tensorflow.org/models/stylize_v1.zip
最后准备一杯茶,点击编译,慢慢喝茶干点别的事情,比如说写这篇文章 我的配置是MacBook Pro 2016款带Touchbar,内存为16Gb
补充一句,这个工程的NDK是通过调用Bazel完成的,部分拷贝动作通过python和一些sh脚本完成
3、Yolo模型的使用(不看也关系不大)
Yolo是一个不错的算法模型:YOLO: Real-Time Object Detection 这里提供了一些训练好了的weights数据,效果见:https://www.youtube.com/watch?v=VOC3huqHrss 但是呢,因为我们用的是Android,所以使用的是tiny版本,反应速度和识别信度都比较低。
Darkflow thtrieu/darkflow 提供了一个将weights数据转化为TensorFlow pb模型的方法 打开上面的android demo代码,在DetectorActivity 中看到这里已经集成了这部分的实现,1.0之后Google官方已经将Classifier抽象出来了,具体内容很简单,自己看代码。
具体可以通过./flow –model cfg/tiny-yolo-voc.cfg –load bin/tiny-yolo-voc.weights –savepb –verbalise=True 命令在darkflow中将weights转化为pb文件,保证命名正确之后将pb文件放在assets中即可