这篇文章将为大家详细讲解有关基于树莓派和Tensowflow 的物体识别是怎样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
我们先来实现这个项目的核心部分:用树莓派和Tensowflow的识别现实世界的物体。
随手把桌子上同事给的橘子拍下来,之后我们试着让树莓派认出它
任务描述
How to build a robot that “sees” with $100 and TensorFlow 已经把要做的是事说清楚了
物体识别是近来机器学习领域的热点之一。对于识别人脸或是区分猫狗这件事上,计算机已经胸有成竹,而在更大的图片集中识别一个指定的物体还是人工智能领域的“圣杯”,不过近年也有很大进展
我们将造一个能自己识别物体的机器人(不需要云服务)
工具介绍
树莓派
树莓派(Raspberry Pi)是一款基于Linux的单板机电脑,它只有巴掌大小,却有惊人的计算能力,你可以把它当做一台普通电脑。
树莓派的使命是制作一套启发孩子的电脑,降低孩子们试错的成本
树莓派最新的版本是树莓派3,较前一代树莓派2,树莓派3的处理器升级为了64位的博通BCM2837,并首次加入了Wi-Fi无线网络及蓝牙功能。加量不加价
TensorFlow
TensorFlow是一个由"Google大脑"团队的研究人员开发的机器学习库,Google遵循Apache License 2.0将其开源。该系统可以被用于语音识别、图片识别等多个领域
在这个项目中我们主要用到一个叫做 inception 的模型(基于ImageNet数据集)。它可以完成物体识别,我们直接使用预训练好的模型。训练模型可是个费时费力的工作
你把智能当黑盒使用的时候,并不需要有那么多偷懒的负罪感啦(哈哈 我还是有一点)
电气时代来临的时候,变革社会的除了那些发电的人,那些懂得使用电力去改造传统行业,创造新的行业的人,也许对社会的变革更为深刻。尽管他们可能连卡诺循环都不知道,甚至不知如何将水蒸汽中的动能转换为功,进而驱动电机发电
ImageNet数据集
这个数据集包含约120万张训练图像、5万张验证图像和10万张测试图像,分为1000个不同的类别,用于机器学习中训练图像识别系统
准备工作
我们先准备好树莓派,我用的是安装了 raspbian-2016-05-31 版本的树莓派3代(使用其他版本应该也没问题),关于树莓派的相关配置可以参考我之前的文章: 树莓派折腾笔记之系统安装与配置
安装Tensowflow
How to build a robot that “sees” with $100 and TensorFlow 这篇文章里,作者采用的是TensorFlow提供的makefile命令,在树莓派中本地编译,这一步骤花费了作者几个小时。不过好处是一步到位。安装完后可以直接运行: tensorflow/contrib/pi_examples/label_image/gen/bin/label_image
来识别物体
我不打算编译安装,除了过程费事,还需要在安装的几个小时里提心吊胆,深怕某个依赖问题导致前功尽弃,重新编译。 我在手动编译opencv的时候就曾备受折磨
我的安装过程
我们先安装已经适合树莓派的Tensowflow,这种工作,肯定有人做过,github一搜果不其然: tensorflow-on-raspberry-pi 。我们开始安装:
wget https://github.com/samjabrahams/tensorflow-on-raspberry-pi/raw/master/bin/tensorflow-0.9.0-cp27-none-linux_armv7l.whl sudo pip install tensorflow-0.9.0-cp27-none-linux_armv7l.whl #这一步会安装其他依赖,如果太慢,可以用-i参数,使用豆瓣源
安装过程很快,也就喝杯茶时间,过程十分流畅
Tensowflow安装完成,我们开始加载模型,安装过程参考这里: pi_examples
mkdir ~/tfcd /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/imagenetpython classify_image.py --model_dir ~/tf/imagenet #--model_dir 指定模型数据存放的目录
完成后我们来测试下是否正常
python /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/imagenet/classify_image.py --model_dir ~/tf/imagenet
如果是如下输出则一切就绪:
giant panda, panda, panda bear, coon bear, Ailuropoda melanoleuca (score = 0.89233)indri, indris, Indri indri, Indri brevicaudatus (score = 0.00859)lesser panda, red panda, panda, bear cat, cat bear, Ailurus fulgens (score = 0.00264)custard apple (score = 0.00141)earthstar (score = 0.00107)
测试
我们来试一下我的伞(拍于办公室):
python /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/imagenet/classify_image.py --model_dir ~/tf/imagenet --image_file /tmp/test.jpg # 图片需是jpg格式
输出为
程序会给出5个可能的物体,得分最高的是雨伞,识别的很准确
我们接着给它看一张橘子的图片:
输出为
lemon (score = 0.72036)orange (score = 0.16516)spaghetti squash (score = 0.01571)butternut squash (score = 0.00304)ocarina, sweet potato (score = 0.00298)
它认为最大的可能是柠檬,橘子和柠檬确实很相似
如果你想自己来训练你的模型,可以参考googleblog上的这篇文章: Train your own image classifier with Inception in TensorFlow
优化
目前物体识别的性能不高,需要等一会儿,Lukas的机器人很有趣,它每次拍下照片,开始计算的时候会说 I'm thinking
。延时得很自然,机器也确实是在“思考”
关于如何提高运算速度,以下是几个可能
-
利用GPU来计算。树莓派支持GPU运算,不过 tensorflow-on-raspberry-pi 目前没有GPU版本的whl,linux/mac都有GPU版本的whl. 此问题详细谈论可以参考: Question on GPU
-
使树莓派超频可以加快运算速度
-
把tensorflow部署到小车控制器坐在的电脑上(本地电脑),实际计算在本地进行(这样可以把tensorflow用到任何client里,不过需要联网运行)
-
把tensorflow部署到云上,提供网络服务
另一个优化是,缩小图片尺寸,可以使用ImageMagick提供的convert指令: convert -resize 100x100 test.png dest.jpg
。 如此一来就把图片转化为小尺寸(100×100),能有效提高运算速度。
关于基于树莓派和Tensowflow 的物体识别是怎样的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/206597.html