- $ uname - a Linux raspberrypi 4.4.50 - v7 + #970 SMP Mon Feb 20 19 : 18 : 29 GMT 2017 armv7l GNU / Linux
首先需要添加所有必要的依赖项。
- $ sudo apt - get update $ sudo apt - get - y install git cmake build - essential g++-4.8 c++-4.8 liblapack * libblas * libopencv * python - opencv libssl - dev screen
随后需要克隆 **MXNet 代码库并签出 ** 最新的稳定版本。最后一步不能省略,因为我发现大部分时候 HEAD 都是损坏的(2017 年 4 月 30 日更新:MXNet 开发团队联系了我,他们说持续集成现已就位,我也确认了 HEAD 已经可以成功构建。做的好!)。
- $ git clone https: //github.com/dmlc/mxnet.git --recursive
- $ cd mxnet#List tags: v0.9.3a is the latest at the time of writing $ git tag - l $ git checkout tags / v0.9.3a
MXNet 可以通过 S3 加载和存储数据,因此有必要启用该功能,这样后面的操作可以更简单些。MXNet 还支持 HDFS,但需要在本地安装 Hadoop,所以还是算了吧…… :)
这样就可以直接运行 make 了,但考虑到树莓派有限的处理能力,构建过程会需要很长时间:你肯定不希望由于 SSH 会话超时打断构建过程!可以使用 Screen 解决这个问题。
为了尽可能加快速度,我们可以用(总共四个内核中的)两个内核并行运行一个 make。不建议使用更多内核,我自己这样尝试时树莓派停止响应了。
- $ export USE_S3 = 1 $ screen make - j2
整个过程需要大约一小时。最后一步需要安装库文件及其 Python 绑定。
- $ cd python $ sudo python setup.py install $ python Python 2.7.9(
- default, Sep 17 2016, 20 : 26 : 04)[GCC 4.9.2] on linux2 Type "help",
- "copyright",
- "credits"or "license"
- for more information. >>> import mxnet as mx >>> mx.__version__ '0.9.3a'
将模型文件复制到树莓派之后,还需要确保可以实际加载这些模型。此时可以使用第 5 篇文章中用到的代码。另外需要提醒的是,CLI 模式下的树莓派有大约 580MB 可用内存,所有数据可存储在一张 32GB 的 SD 卡中。
试试看加载 VGG16。
- >>> vgg16,
- categories = init("vgg16") terminate called after throwing an instance of 'std::bad_alloc'what() : std: :bad_alloc
糟糕!VGG16** 太大 **,内存装不下。那就试试 ResNet-152。
- >>> resnet152,
- categories = init("resnet-152") Loaded in 11056.10 microseconds >> print predict("kreator.jpg", resnet152, categories, 5) Predicted in 7.98 microseconds[(0.87835813, 'n04296562 stage'), (0.045634001, 'n03759954 microphone, mike'), (0.035906471, 'n03272010 electric guitar'), (0.021166906, 'n04286575 spotlight, spot'), (0.0054096784, 'n02676566 acoustic guitar')]
ResNet-152 只用了大约 10 秒就成功加载,预测工作可在不到 10 微秒内完成。接着再试试 Inception v3。
- >>> inceptionv3,
- categories = init("Inception-BN") Loaded in 2137.62 microseconds >> print predict("kreator.jpg", resnet152, categories, 5) Predicted in 2.35 microseconds[(0.4685601, 'n04296562 stage'), (0.40474886, 'n03272010 electric guitar'), (0.073685646, 'n04456115 torch'), (0.011639798, 'n03250847 drumstick'), (0.011014056, 'n02676566 acoustic guitar')]
在树莓派这种资源有限的设备上,模型之间的差异就更明显了!Inception v3 加载速度快很多,可在不到 1 毫秒内完成预测。就算成功加载该模型之后,树莓派依然有大量可用内存可用于运行其他程序,因此它非常适合某些嵌入式应用。我们接着继续 :)
我们可以给树莓派添加各种外设,其中最有趣的可能就是摄像头模块。用法也很简单!
- >>> inceptionv3,
- categories = init("Inception-BN") >>> import picamera >>> camera = picamera.PiCamera() >>> filename = '/home/pi/cap.jpg' >>> print predict(filename, inceptionv3, categories, 5)
这里有个例子。
- Predicted in 12.90 microseconds[(0.95071173, 'n04074963 remote control, remote'), (0.013508897, 'n04372370 switch,
- electric switch, electrical switch'), (0.013224524, 'n03602883 joystick'), (0.00399205, 'n04009552 projector'), (0.0036674738, 'n03777754 modem')]
很酷吧!
我还试着通过之前写的 Python 脚本(文章,代码)使用 Amazon Rekognition 对同一张图片进行了识别。
- $. / rekognitionDetect.py jsimon - public cap.jpg copy Label Remote Control,
- confidence: 94.7508468628
Rekognition 的效果也不错。接下来,如果能让树莓派用声音告诉我们图片的内容,是不是感觉更酷了!几步简单操作即可将 Amazon Polly 加入我们的环境(文章)。
Amazon Rekognition 和 Amazon Polly 都是基于深度学习技术的托管服务。用户无需自行考虑模型或基础架构本身,只需要调用 API 即可。
下面这个视频演示了我通过树莓派用 MXNet 中运行的 Inception v3 模型进行实时物体检测,并通过 Amazon Polly 描述识别结果的过程。
Youtube 介绍视频:https://youtu.be/eKGYFfr9MKI
这一系列 6 篇文章,我们真是取得了不错的进展,我们已经了解了如何:
这一系列文章主要侧重于通过卷积神经网络进行的物体识别,其实 MXNet 的能力远不止于此,以后有机会再说吧。
本系列内容全部完结。希望你喜欢并能有所收获。
作者:Julien Simon,阅读英文原文:An introduction to the MXNet API?—?part 6
感谢杜小芳对本文的审校。
给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ,@丁晓昀),微信(微信号:InfoQChina)关注我们。
评价本文
来源: http://www.infoq.com/cn/articles/an-introduction-to-the-mxnet-api-part06