『1』对深度学习(Deep Learning)的简单介绍
以下解释来自维基百科:
深度学习的用途实在太广泛,最为普通人所熟知的,就是以下和民生相关的应用:人脸识别,语音识别,图像搜索,在线翻译,等等。深度学习是机器学习拉出的分支,它试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。
『3』在树莓派上安装TensorFlow
按作者的文档,通过极其简单的几步操作,就可以在树莓派上把TensorFlow跑起来。如果你有兴趣,可以直接去看作者写的教程。
首先要声明的是:
文章来源:http://www.codelast.com/
然后剩下最关键的一步就是,从GitHub下载一个wheel文件并安装。
wheel是众多Python软件安装包格式中的一种,本质上是一个zip包格式,它使用.whl作为扩展名,用于安装Python模块。
如果你使用Python 2.7:
1
2
|
wget https:
//github
.com
/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0
.11.0
/tensorflow-0
.11.0-cp27-none-linux_armv7l.whl
sudo
pip
install
tensorflow-0.11.0-cp27-none-linux_armv7l.whl
|
如果你使用Python 3.3+(但据作者所说,3.5以及3.6是不保证能支持的,不过,我用3.5.2还是安装成功了):
1
2
|
wget https:
//github
.com
/samjabrahams/tensorflow-on-raspberry-pi/releases/download/v0
.11.0
/tensorflow-0
.11.0-py3-none-any.whl
sudo
pip3
install
tensorflow-0.11.0-py3-none-any.whl
|
下载whl安装包的过程可能会比较漫长,我使用的是Python 3.5.2,下面是我的命令行输出内容:
Processing ./tensorflow-0.10.0-py3-none-any.whlCollecting protobuf==3.0.0b2 (from tensorflow==0.10.0)Downloading protobuf-3.0.0b2-py2.py3-none-any.whl (326kB)100% |████████████████████████████████| 327kB 11kB/sCollecting wheel>=0.26 (from tensorflow==0.10.0)Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)100% |████████████████████████████████| 71kB 18kB/sRequirement already satisfied (use --upgrade to upgrade): numpy>=1.8.2 in /usr/lib/python3.5/site-packages (from tensorflow==0.10.0)Requirement already satisfied (use --upgrade to upgrade): six>=1.10.0 in /usr/lib/python3.5/site-packages (from tensorflow==0.10.0)Requirement already satisfied (use --upgrade to upgrade): setuptools in /usr/lib/python3.5/site-packages (from protobuf==3.0.0b2->tensorflow==0.10.0)Installing collected packages: protobuf, wheel, tensorflowSuccessfully installed protobuf-3.0.0b2 tensorflow-0.10.0 wheel-0.29.0You are using pip version 8.1.2, however version 9.0.1 is available.You should consider upgrading via the 'pip install --upgrade pip' command.
文章来源:http://www.codelast.com/
然后呢?然后就搞定了!就这么简单!
如果上面的步骤失败了,那么你就只能选择从源码来编译TensorFlow,这是一个相当麻烦的工作,只能祝你好运了,不过好消息就是,作者已经帮大家踩过很多坑了,教程在这里。
『4』在树莓派上使用TensorFlow
要识别一张图片里的物体是什么,我们需要先训练一个图像分类模型,这个过程非常消耗计算资源,在树莓派上干这事是不明智的,我们可以直接使用Google已经训练好的Inception-v3模型。
Inception-v3 is trained for the ImageNet Large Visual Recognition Challenge using the data from 2012. This is a standard task in computer vision, where models try to classify entire images into 1000 classes, like "Zebra", "Dalmatian", and "Dishwasher".
先下载Inception-V3模型到任意目录中,并解压出来:
1
2
3
4
|
mkdir
~
/tensorflow-related/model
cd
~
/tensorflow-related/model
wget http:
//download
.tensorflow.org
/models/image/imagenet/inception-2015-12-05
.tgz
tar
xf inception-2015-12-05.tgz
|
解压出来一堆文件:
classify_image_graph_def.pbcropped_panda.jpgimagenet_2012_challenge_label_map_proto.pbtxtimagenet_synset_to_human_label_map.txtLICENSE
然后就可以开始进行图像识别啦。在这里我从网上找了一张时下很流行的摩拜单车(Mobike)的图片:
文章来源:http://www.codelast.com/
用TensorFlow来识别它:
1
2
|
cd
/usr/lib/python3
.5
/site-packages/tensorflow/models/image/imagenet
python3.5 classify_image.py --model_dir
/root/tensorflow-related/model
--image_file
/root/tensorflow-related/test-images/mobike
.jpg
|
其中,/usr/lib/python3.5/site-packages/tensorflow/models/image/imagenet 这个路径是TensorFlow的 Python图像分类程序 classify_image.py 所在的路径,不同的OS可能不一样。
--model_dir 参数传入的是我们前面解压出来的模型文件所在的路径,--image_file 是待识别的图片的路径。
注:如果找不到classify_image.py文件,请参考本文末的更新说明。
输出如下:
/usr/lib/python3.5/site-packages/tensorflow/python/ops/array_ops.py:1750: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the futureresult_shape.insert(dim, 1)W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().bicycle-built-for-two, tandem bicycle, tandem (score = 0.33731)tricycle, trike, velocipede (score = 0.16082)unicycle, monocycle (score = 0.12926)mountain bike, all-terrain bike, off-roader (score = 0.10689)parking meter (score = 0.01563)[root@alarmpi imagenet]# python3.5 classify_image.py --model_dir /root/tensorflow-related/model --image_file /root/tensorflow-related/test-images/mobike.jpg/usr/lib/python3.5/site-packages/tensorflow/python/ops/array_ops.py:1750: VisibleDeprecationWarning: converting an array with ndim > 0 to an index will result in an error in the futureresult_shape.insert(dim, 1)W tensorflow/core/framework/op_def_util.cc:332] Op BatchNormWithGlobalNormalization is deprecated. It will cease to work in GraphDef version 9. Use tf.nn.batch_normalization().mountain bike, all-terrain bike, off-roader (score = 0.56671)tricycle, trike, velocipede (score = 0.12035)bicycle-built-for-two, tandem bicycle, tandem (score = 0.08768)lawn mower, mower (score = 0.00651)alp (score = 0.00387)
可见,TensorFlow认为图片是山地自行车(mountain bike)/全地形自行车(all-terrain bike)/越野车(off-roader)的概率是0.56671,识别结果还算可以。
文章来源:http://www.codelast.com/
『5』计算速度问题
上面的一次图像识别试验,总共花了50多秒的时间!这么慢的速度在实际应用中基本没有实用价值。
但实际上,这个时间是可以大幅缩短的。
所以至少50多秒这种恐怖的数字是可以避免的。
文章来源:http://www.codelast.com/
『6』在树莓派上跑TensorFlow有什么用
我随意想到的一个可能有意义的应用就是:一个幼儿辅助学习系统。在树莓派上挂载一个摄像头,孩子在摄像头前拿着一样东西,摄像头抓拍一张图片,识别出里面的东西,朗读出概率最大的那个英文单词。
当然,这里面有非常多的工程上的问题需要解决。
我相信,随着树莓派下一代的计算能力继续增强,以及TensorFlow每一次发布,都让性能提高一些,在不久的将来,在树莓派上跑TensorFlow应用的实用性将会非常好。
『7』更新
在本文写完之后不久,作者就发布了基于TensorFlow 1.0.0的Python wheel包,我试验了一下,它无法在Python 3.6.0的环境下安装,提示错误是:
tensorflow-1.0.0-cp34-cp34m-linux_armv7l.whl is not a supported wheel on this platform
作者说这是因为暂时不支持Python 3.5+。所以为了装上新版的TensorFlow,我用回了Python 2.7,然后就发现可以正常安装了:
1
2
|
pacman -S python2 python2-pip
pip2
install
tensorflow-1.0.0-cp27-none-linux_armv7l.whl
|
期待以后能支持。
如果你安装的是1.1.0版本的TensorFlow on Raspberry Pi,那么你会发现你找不到classify_image.py文件,这是因为此版本确实不再包含该文件,这时你可以在TensorFlow的这个子项目里找到该文件。