NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

MXNet API 入门 —第 6 篇

  • 2017-07-23
  • 本文字数:2568 字

    阅读完需:约 8 分钟

第5 篇文章中,我们使用三种预训练模型进行物体检测,并通过一些图片对他们的效果进行了对比。

在这一过程中发现这些模型有着截然不同的内存需求,最“节省”的Inception v3“只”需要43MB 内存。那这就提出了另一个问题:“能否在某些非常小型的设备,例如树莓派上运行这些模型?”嗯,一起试试吧!

在树莓派上构建MXNet

目前已经有了官方教程,但我发现其中缺少一些关键步骤,因此我也写了一版。该教程在运行最新版Raspbian 的Raspberry Pi 3 上可以完美运行。

复制代码
$ 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')]

很酷吧!

增加各类 Amazon AI 服务,反正完全可行!

我还试着通过之前写的 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 篇文章,我们真是取得了不错的进展,我们已经了解了如何:

  • 使用 NDArray 管理数据,
  • 使用 Symbol 定义模型,
  • 使用 Module 运行预测,
  • 加载并对比用于物体检测的预训练模型,
  • 在树莓派上实时运行预训练模型。

这一系列文章主要侧重于通过卷积神经网络进行的物体识别,其实 MXNet 的能力远不止于此,以后有机会再说吧。

本系列内容全部完结。希望你喜欢并能有所收获。

作者 Julien Simon 阅读英文原文 An introduction to the MXNet API?—?part 6


感谢杜小芳对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2017-07-23 17:032087
用户头像

发布了 283 篇内容, 共 102.2 次阅读, 收获喜欢 61 次。

关注

评论

发布
暂无评论
发现更多内容

APP自动化之Toast识别

霍格沃兹测试开发学社

为企业连接一切,用友BIP商业网络正式发布!

用友BIP

商业网络

NFTScan | 08.21~08.27 NFT 市场热点汇总

NFT Research

NFT\

百亿补贴通用H5导航栏方案 | 京东云技术团队

京东科技开发者

移动开发 H5页面 企业号 8 月 PK 榜 导航栏

医疗器械行业的MES系统解决方案

万界星空科技

解决方案 MES系统 医疗器械

如何用大模型解决产业场景实战问题?案例精讲教程来了!

飞桨PaddlePaddle

人工智能 百度飞桨 文心大模型

软件测试案例 | 某教务管理平台系统的系统测试总结报告

TiAmo

测试 性能测试 功能测试

相约清华!AI药物研发大赛总决赛明日开幕

飞桨PaddlePaddle

人工智能 paddle 百度飞桨 飞桨国赛

Royal TSX for Mac:强大的远程连接管理工具,轻松高效

晴雯哥

CorelDRAW Graphics Suite 2022 for Mac(矢量图形设计工具) v24.4.0.636激活版

mac

苹果mac Windows软件 CorelDRAW2022 矢量图形设计软件

Jmeter 参数化功能实现注册登录数据驱动

霍格沃兹测试开发学社

租赁LED屏幕费用预算指南

Dylan

解决方案 LED LED显示屏

总有陪伴在身边,皮皮App全新slogan亮相,一起放肆嗨

联营汇聚

区块链发币系统搭建,数字货币挖矿系统软件开发

V\TG【ch3nguang】

数字货币交易所开发 区块链技术应用开发

KubeEdge Sedna v0.6 & Ianvs v0.2 重磅发布:边云协同终身学习全面升级

华为云开发者联盟

云原生 后端 华为云 华为云开发者联盟 企业号 8 月 PK 榜

【iOS逆向与安全】编写一个使应用保持前台运行的系统插件

小陈

安全 逆向 iOS逆向 ios安全 ios 开发

2023,到底是哪些ToB公司在正向增长?

ToB行业头条

NFT/DAPP链游系统智能合约搭建开发

V\TG【ch3nguang】

DAPP系统开发 NFT链游

基于 Java +Vue开发的企业级数字化采购系统 (SRM)

金陵老街

Lightroom Classic 2023 for Mac(Lrc2023图像处理软件) v12.4激活版

mac

图像处理软件 苹果mac Windows软件 lrc2023 Lightroom Classic

老铁们,还记得PowerShell吗?

为自己带盐

PowerShell

重磅首发!全球首款一体化智能化MOM平台!

用友BIP

智能制造

docker安装redis

java易二三

Java redis 编程 程序员 计算机

Appium WebView 技术原理

霍格沃兹测试开发学社

APP自动化如何使用参数化用例

霍格沃兹测试开发学社

Kafka为什么这么快?

java易二三

Java kafka 程序员 计算机

虚拟币交易平台搭建,数字货币交易所系统源码开发

V\TG【ch3nguang】

数字货币交易所开发 虚拟货币

混合App的开发占比越来越大,大厂们纷纷转向此类开发

没有用户名丶

MXNet API入门 —第6篇_语言 & 开发_Julien Simon_InfoQ精选文章