基于树莓派和Tensowflow的物体识别-brain

近来这篇文章很火:How to build a robot that “sees” with $100 and TensorFlow (作者是Lukas,CrowdFlower创始人) ,中文译本为《如何用100美金和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  ~/tf
cd /usr/local/lib/python2.7/dist-packages/tensorflow/models/image/imagenet
python 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。 如此一来就把图片转化为小尺寸(100x100),能有效提高运算速度

todo

1、中文语音输出

  • 蓝牙音箱
  • 英->中翻译
  • 语音输出

2、加载到汽车模型上

  • L298N驱动板

原文发布于微信公众号 - 人人都是极客(rrgeek)

原文发表时间:2017-10-26

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏AI科技评论

开发 | TensorFlow 1.0 要来了!它将带来哪些革命性变化?

在发布逾一周年之际,TensorFlow 终于将迎来史上最重大更新:TensorFlow 1.0。 对于不熟悉开源框架的读者,TensorFlow 是谷歌 20...

2956
来自专栏AI科技评论

斩获 ISCA 2018 中国唯一一作论文,清华大学 Thinker 团队提出 AI 计算芯片的存储优化新方法

AI 科技评论按:6 月 2 日至 6 日,第 45 届国际计算机体系结构大会(International Symposium on Computer Arch...

1454
来自专栏PPV课数据科学社区

【数据挖掘】rattle:数据挖掘的界面化操作

R语言是一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。这里的统计计算可以是数据分析、建模或是数据挖掘等,通过无数大牛提供的软件包,...

3436
来自专栏java一日一条

高德百度坐标系转换方法

在开始这个题目之前,先给大家再次扫扫盲,扫的不是坐标系统的盲,而是我们国家所使用的坐标系统。大家都知道,美国GPS使用的是WGS84的坐标系统,以经纬度的形式来...

7222
来自专栏AI科技大本营的专栏

在TensorFlow2.0发布前,帮你掌握TensorFlow的必备内容

【导读】AI科技大本营曾报道过,TensorFlow 2.0 已经在开发计划中了,相信在不久的将来就会和我们见面。那么现在的 TensorFlow 都有哪些功能...

3463
来自专栏AI科技评论

学界丨如何玩转网络安全下的深度学习?最全的学习资料清单看这里

近日,外媒 KDnuggets 刊登了一篇机器学习与网络安全相关的资料大汇总,文中列出了相关数据源的获取途径,优秀的论文和书籍,以及丰富的教程。大部分都是作者在...

40010
来自专栏机器之心

从实验室到工厂,模型部署中的几个重要问题及解决方案

选自kdnuggets 作者:Mauricio Vacas 机器之心编译 参与:Quantum Cheese、微胖 在这篇文章中,我们会讨论在模型管理和部署中如...

3317
来自专栏机器人网

一个简单的多机器人编队算法实现--PID

用PID进行领航跟随法机器人编队控制 课题2:多机器人编队控制 研究对象:两轮差动的移动机器人或车式移动机器人 研究内容:平坦地形,编队的保持和避障,以及避障和...

5037
来自专栏AI研习社

AI 开发者看过来,主流移动端深度学习框架大盘点

AI 研习社按:移动设备相较于 PC ,携带便携,普及率高。近年来,随着移动设备的广泛普及与应用,在移动设备上使用深度学习技术的需求开始涌现。

3533
来自专栏机器之心

综述 | 一文看尽三种针对人工智能系统的攻击技术及防御策略

这篇文章是关于如何使用人工智能构建鲁棒的反滥用保护系统系列文章中的第四篇,也是最后一篇。第一篇文章解释了为何 AI 是构建鲁棒的保护系统的关键,这种保护用来满足...

1113

扫码关注云+社区

领取腾讯云代金券