怎样在Nvidia的Jetson开发板上运行Caffe深度学习视觉库

jetson

Photo by Gareth Halfacree

我的同事贾扬清,Caffe的创建者,最近花了一些业余时间使得Caffe框架可以在Nvidia的Jetson开发板上运行。如果你还没有听说过Jetson,它是一块集成了Nvidia TK1移动GPU芯片的小型开发板。TK1已经开始出现在高端的平板电脑中,它拥有192核,因此非常适合运行像深度学习这样计算密集型的任务。Jetson是一种非常不错的方式让我们尝试一下我们可以在未来的移动设备上能做什么,它运行的是Ubuntu系统,非常方面用来开发。

Cafee预建了“Alexnet”模型,一个能够识别1000种不同对象的Imagenet获奖架构的版本。使用这个作为基准,Jetson可以在仅仅34ms分析一副图像!基于这个我估计用它来绘图大概功率在10~11瓦,比一般移动设备耗电,但也是太明显。

根据扬清的指导,我已经在我的Jetson上运行通过,因此你只需要按照如下步骤安装和运行Caffe。

安装

Jetson开箱后的第一步就是登陆。你可以接上一个显示器和键盘,但是我推荐你仅仅将它插入到一个本地的路由器,然后使用ssh登陆(elinux.org/Jetson/Remote_Access有更多的细节),在你的本地网络Jetson会显示为“tegra-ubuntu.local”,用户名是“ubuntu”。

ssh ubuntu@tegra-ubuntu.local

默认密码是“ubuntu”,下一步我们需要运行Nvidia设备自带的installer,然后重启。

sudo NVIDIA-INSTALLER/installer.sh
sudo shutdown -r now

重启完成后,你可以登录并且继续安装Caffe需要用到的其他安装包。

ssh ubuntu@tegra-ubuntu.local
sudo add-apt-repository universe
sudo apt-get update
sudo apt-get install libprotobuf-dev protobuf-compiler gfortran \
libboost-dev cmake libleveldb-dev libsnappy-dev \
libboost-thread-dev libboost-system-dev \
libatlas-base-dev libhdf5-serial-dev libgflags-dev \
libgoogle-glog-dev liblmdb-dev gcc-4.7 g++-4.7

你将需要使用Cuda SDK来构建和运行GPU程序,elinux.org/Tegra/Installing_Cuda有非常不错的通用指导手册。总的来说,你需要注册成为Nvidia开发者,然后登陆网页下载Cuda6.0 for ARM安装包到你的机器,并将它复制到Jetson上。

scp ~/Downloads/cuda-repo-l4t-r19.2_6.0-42_armhf.deb ubuntu@tegra-ubuntu.local:

然后用ssh连接到你的Tegra,按如下步骤安装Cuda。

sudo dpkg -i cuda-repo-l4t-r19.2_6.0-42_armhf.deb
sudo apt-get update
sudo apt-get install cuda-toolkit-6-0
sudo usermod -a -G video $USER
echo “# Add CUDA bin & library paths:” >> ~/.bashrc
echo “export PATH=/usr/local/cuda/bin:$PATH” >> ~/.bashrc
echo “export LD_LIBRARY_PATH=/usr/local/cuda/lib:$LD_LIBRARY_PATH” >> ~/.bashrc
source ~/.bashrc

如果每一步安装都没有问题,执行“nvcc -V”将返回给你编译版本信息。接下来,你需要获取Tegra版本的OpenCV。通过你的主机上访问developer.nvidia.com/rdp/assets/opencv-run-tegra-k1 anddeveloper.nvidia.com/rdp/assets/opencv-dev-tegra-k1下载安装包,然后拷贝到Jetson。

scp ~/Downloads/libopencv4tegra* ubuntu@tegra-ubuntu.local:

在Jetson上,按如下步骤安装这些包。

sudo dpkg -i libopencv4tegra_2.4.8.2_armhf.deb
sudo dpkg -i libopencv4tegra-dev_2.4.8.2_armhf.deb

接下来,我们需要下载和安装Caffe。

sudo apt-get install -y git
git clone https://github.com/BVLC/caffe.git
cd caffe && git checkout dev
cp Makefile.config.example Makefile.config
sed -i “s/# CUSTOM_CXX := g++/CUSTOM_CXX := g++-4.7/” Makefile.config

我们必须使用4.7版本的gcc,因为nvcc在默认的4.8版本下会出现一些问题。

make -j 8 all

一旦安装完成,你需要运行Caffe的测试程序来检查Caffe是否能正确运行,这个会需要一点时间。

make -j 8 runtest

最后你可以运行Caffe的基准测试代码来衡量性能。

build/tools/caffe time –model=models/bvlc_alexnet/deploy.prototxt –gpu=0

这个步骤会花费大概30秒时间,并输出一组统计。每个识别通道运行50次迭代,每一个输入图像会分析10个不同的组进行分析,所以必须将“Average Forward pass”的时间除以10来得到每次识别结果的时间。我的平均时间是337.86ms,所以每幅图像耗费34ms。你也可以设置-gpu=0来看看CPU运行的结果,我的结果是585ms,所以Cuda的加速效果还是蛮明显的。

 

 

文章来源:Pete Warden’s

How to run the Caffe deep learning vision library on Nvidia’s Jetson mobile GPU board

翻译整理:Eric Chen

Advertisements

一篇文章教你读懂人工智能和深度学习

人工智能貌似已经在技术行业无处不在了。我们所说的AI,已经被应用到了Gmail的电子邮箱、学习汽车驾驶,存储度假照片中,扎克伯格甚至造了做家务的AI。而问题在于“人工智能”的概念要比它现在所擅长的东西宽泛的多,它可以让超级计算机通过不断获取照片来操控太空飞船,而非仅仅充当垃圾邮件过滤器。你知道的,人类也在担心人工智能会在什么时候以什么样的方式毁灭人类社会。

一些科技公司通过他们的人工智能或者科幻作品让大家对其有了非常初步的理解,但对我们理解超级计算机到底可以做什么新奇有趣的事情上用处并不大。在这个前提下,我们这篇文章的主要目的就是科普一些普遍使用的措辞给消费级领域的普通大众————同时我们也会看到现在科学技术所遇到的瓶颈,以及我们暂时还要不要花精力担心机器人的“起义”。

机器人正在尝试着打开一扇门

神经网络、机器学习和深度学习这三个术语应该大家最近常常听到的,为了尽量让讲解通俗易懂,我们可以将他们理解为处于不同的层次。神经网络是底层,它们是一种计算机体系结构,人工智能就是在它上面建立起来的;机器学习居中,它是一种在神经网络上运行的程序,通过大量的数据来“训练”它并让其去寻求特定的答案;深度学习居于顶层,它是一种最近十年才逐渐兴起的特定的机器学习类型,它的兴起多亏了两大资源:廉价的数据处理和丰富的数据(也被称为互联网)。

神经网络的概念在五十年前就有了,它也象征着AI开始被作为一个独立的研究领域。简单的说,这些网络是构建电脑的方式,它和我们的大脑很像,由类似于神经元的节点组成,这些节点连接在一起形成一个网络。每个单独的节点都是“哑巴”节点,它们可以回答非常基础的问题,但是结合起来就可以回答困难的问题。更重要的是,通过正确的算法,他们可以被“教育”,举例子,然后让计算机通过深度学习了解要做的是什么。

纽约大学计算机科学专家Ernest Davis说,“如果你想要一个计算机学会怎么过马路,你可以使用传统的编码方式为其设定非常精确的规则,教它怎么左看看右看看,等车辆通过,使用人行横道等等,然后再让其通过;而通过机器学习呢,你要给它看10,000段行人安全通过马路的视频(和10,000被车撞的视频),然后让它做自己该做的事情。这个学习过程中最困难的地方是让计算机可以在第一时间吸收这些视频中的信息。”在过去的几十年里,人们曾尝试各种不同的方法来教育计算机。这些方法包括:强化学习(在得到想要结果后给计算机一些奖励,让它逐渐掌握最佳的解决方案)、遗传学算法(模拟达尔文生物进化论的自然选择和遗传学机理的生物进化过程的计算模型,是一种通过模拟自然进化过程搜索最优解的方法)。

0

机器学习教计算机学会开车

现今一种“教育”方式在实验室中风靡:深度学习——一种机器学习,使用了很多层神经网络,用不同的抽象方式分析数据。这么说吧,如果你通过深度学习系统查阅一张照片,它会用自己很多的神经网络层上追踪不同的放大倍数。底层也许只追踪5*5像素网格,对当前网格展示的东西给出一个“是/否”的答案。如果回答“是”,较一层会看这个5*5像素网格是怎样融入更大的版面的。比如说这是一条线的开始,或者是一个角?这是一个复杂的构建过程,可以通过分解至各组成部分,来让软件来理解更复杂的数据。

“经过一层一层的分析,监测到的东西会越来越全面化”,脸书的人工智能研究组组长Yann LeCun告诉我们,“经过越来越多的抽象,之后最顶层会告诉我们这张照片上是一个人、一只狗还是一个滑翔机,无论它是什么吧。”

深度学习系统需要大量的数据和大量的工作时间

接下来,我们用深度学习来“教会”计算机什么样的东西是猫咪。首先,我们使用神经网络架构方式来编码不同的层,用来辨别猫的不同元素:比如说爪子、掌垫、晶须等等(每一个层都被分别定义,用来辨别特定的元素,这是为什么被称为深度学习的原因。)之后,这个系统会被展示很多猫的图像和其他动物的图像,并被告之都分别是什么。我们会告诉机器“这是一只猫。这不是一只猫。”随着系统看到不同的图像,神经网络内不同的层和不同的节点,会在发现爪子、掌垫,和晶须等之后被“点亮”。随着时间的推移,系统会记住这些层所标记的元素哪些是不重要的而哪些是重要的,强调一些并抛弃一些。他们会发现爪子和猫的联系密切,但是也会发现其他的东西也会有爪子,所以它们会寻找一些和晶须一块儿出现的爪子。

这是一个漫长的迭代过程,基于人类的反馈,这个系统会变得越来越好。人类的指正,可以将其向正确的方向上推进。或者,如果网络拥有足够多的带有标签的数据,它可以自己做测试,看看它自己的各个层产生正确结果的权重。现在,你可以设想到底需要多少步来确定一个东西到底是不是一只猫。再进一步猜想这个系统究竟要有多复杂才能完全认知世界上所有现存事物。这就是几周前微软公布能鉴别狗种类的应用程序都会那么自豪的原因。对于我们来说区分杜宾和雪纳瑞也许是非常容易的,但是在计算机能够做出区分之前,它需要定义很多细微差异。 这就是脸书、谷歌和其他公司在用的人工智能?大多数情况下,是的。

深度学习技术现在被应用于各类日常任务中。很多大技术公司都有自己的人工智能部门,而且谷歌和脸书都尝试通过开源他们的软件来进一步推动其AI的发展。谷歌在上个月甚至推出了为期三个月的免费深度学习课程。而且在许多研究人员都保持缄默的时候,有些公司机构利用被开源出来的技术推出了一些粗制滥造的应用,从谷歌的情绪识别到图像识别,不放过任何可能。这也是我们最近常常能听到深度学习这个词的原因:很多面向消费者的公司正在使用它们,分享一些自己正在制作的奇怪东西。

智能是一个与常识无关的事情

深度学习已经证明了它所擅长的领域,比如说语音和图像的识别——一些有很多商业应用领域的东西——这些还有很多不完美的地方。不仅仅是深度学习需要大量的数据和微调工作,它们所谓的智能也是非常狭窄和脆弱的。正如认知心理学家Gary Marcus在纽约客中写道,现在流行的深度学习方法缺少表示“因果关系的逻辑(比如说疾病和它的表现)”,而且在获取抽象概念的时候也更容易遇到困难,比如说在理解“兄弟姐妹”或“等同于”这类词的时候。它们没有明确的方法来执行逻辑推理,而且距整合抽象知识还有一段很长的路要走。比如说某个东西到底携带了什么样的信息,它们是用来干什么的。换句话说,不会整合共性。

谷歌神经网络的哑铃

比如说,上图就是谷歌在其研究项目中让系统生成的哑铃照片,这个系统的神经网络受到了大量哑铃照片的“训练”。其实它生成的哑铃的照片倒也没啥打错:两个灰圈,被一个水平管链接。可惜每个哑铃的外围都会有健美选手手臂的肌肉轮廓。这是因为提供给神经网络的图片常常都是健美运动员举着哑铃。深度学习也许能够通过数以万计的照片猜到哑铃的通用视觉属性,但是它永远不会有哑铃并没有手臂的认知飞跃。这种问题不仅仅会受到常识的限制,还有它们监测数据的方式。深度学习还可能会随机模式愚弄,比如说你可以确切的认知那是一只豹子,但是一台电脑会告诉你它有95%的可能性是一只豹子。

然而这种不足也可以被巧妙地隐藏掉。比如说,新兴的数字助理Siri,它常常看起来是能够理解我们的,会回答问题、设定闹钟、给我们讲一些预先设定好的笑话,并且一直在“进步”。但作为计算机科学家的Hector Levesque指出,这个怪物只是显示出了我们和真正的人工智能之间到底有多大的鸿沟。Hector Levesque指出Siri最难的技术点在于如何欺骗人类让他们觉得自己正在与人对话。它们使用笑话,引用、情绪爆发、误导和各种口头语来造成迷惑和避免直面问题。

640

这个领域中真正的人工智能的测试应该是让机器回答超现实、逻辑性的宽泛问题,Levesque给出了问题例子,“鳄鱼能跑障碍赛吗?”、“棒球运动员准许在他们的帽子上粘小翅膀吗?”想想类似的这些问题,它们是真正的人工智能需要了解并回答的。

641

IBM的沃森

所以说根本没有什么人工智能,一切都是噱头吗?

其实也不尽然。这要看你心目中的人工智能是什么样了。我们的机器肯定会变得越来越聪明,但不一定是我们科幻小说中设想的那样。AI的未来可能是非常微妙的。想象一下,将来你会有一辆完美的自动驾驶汽车,配备先进的数字助理。你可以在早上通勤的时候与它交换笑话、聊新闻、安排日历、改变目的地。这个自动驾驶汽车学会的不仅仅是交通规则。当我们做到这一点的时候,你还会在意人工智能是不是一个噱头吗?它看起来不令我们满意吗?