人工智能(AI)和深度学习(Deep Learning)在最近几年得到迅猛的发展,除了AlphaGO击败人类棋手外,AI正在向生活的各个领域进军。更让人激动的是,国内外的互联网巨头们纷纷将自己的深度学习产品开源,让每个人都有机会参与到人工智能的开发中。
几年前开源的Hadoop成就了大数据的爆发,眼下众多深度学习框架的开源必将在未来几年内引领下一波人工智能的大爆发。对于没有抓住上次机会的小伙伴们来说,现在的机会不容错过。
Rapp也开始了深度学习之旅,并且先给自己制订了一个小目标:打造一款简单的AI产品,比如图像识别app
经过一番Google和深入思考,我打算使用以下的策略来开发:
- 选择谷歌的TensorFlow作为后端的AI引擎(不要问我为什么选择它,也不要花过多时间比较哪个深度学习框架最好,先拿一个来学,以后再尝试其他的)
- 现在没有大量的图片数据作为训练集怎么办?那就先利用TensorFlow预先训练好的图像识别模型:Inception-v3,它能识别1000种类别的物体,对于初学者来说已经足够强大
- 使用Shiny为App开发UI和Server端程序
- 最终的效果是:用户上传一张图片(jpg格式),app会识别图片中的主要物体,列出前几种可能的物体名称以及它们的置信度
我们先来安装TensorFlow(基于Ubuntu系统):
- 先安装pip
$ sudo apt-get install python-pip python-dev - 再安装TensorFlow
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/cpu/tensorflow-0.10.0rc0-cp27-none-linux_x86_64.whl
$ sudo pip install --upgrade $TF_BINARY_URL
接下来,准备TensorFlow预先训练好的图像识别模型:
- 找到classify_image.py程序的路径,比如:
/usr/local/lib/python2.7/dist-packages/tensorflow/models/image/imagenet/classify_image.py - 第一次运行该程序的时候会自动下载模型文件,默认的目录是/tmp/imagenet,可以用--model_dir参数设置模型保存的目录:
$ python classify_image.py --model_dir model - 在默认的情况下,程序会对一张自带的熊猫照片进行识别,如果一切正常,你会看到识别的结果,排在第一位的就是“giant panda”
TensorFlow的准备工作已经结束,下面我们需要用Shiny来开发Web应用。Shiny应用程序的开发很敏捷,只需要安装好Shiny Server,再写2个程序:ui.R(用户界面)和server.R(服务器端程序),上传到指定目录下即可通过浏览器使用。(本文的重点并不是介绍Shiny程序的开发和部署,如果读者对这个方面感兴趣,可以继续关注【App开发】系列文章)
以下是Shiny程序的代码:
ui.R
server.R
我给开发好的app起了个名字:RappEyes,并部署在我的个人网站上:http://112.74.107.44/shiny/rappeyes
打开网页后,RappEyes会对TensorFlow自带的熊猫照片进行识别:
也可以自己上传图片:
当背景比较干净的时候,识别准确率会很高:
我以为RappEyes会告诉我它们是apple,没想到还让我学习了用英语怎么说“青苹果”:Granny Smith,真是意外收获:)
掌握deep learning是一件很有挑战性的任务,我们今天只是迈出了第一步:安装了TensorFlow,对图像识别有了一个感性的认识,也练习了基于R的Web开发。我相信,“边学习边应用”是掌握一门技能最好的方法,希望今天的文章能给大家带来一些帮助。
如果你喜欢本文,欢迎积极打赏:)