MxNet系列——how_to——smart_device

博客新址: http://blog.xuezhisd.top
邮箱:xuezhisd@126.com


将深度学习库压缩成一个文件,以便移植到智能设备中

深度学习系统是复杂的,并且常常有些依赖环境。将深度学习库移植到不同的平台上,尤其是智能设备上,是一件十分痛苦的事情。 一个简单的方法是:提供一个轻量级的接口,并以最小依赖将所有需要的代码放到一个文件中。 本章节,我们描述了如何将MXNet源码合并到一个文件中,并在移动设备上演示图像分类。

合并:将整个深度学习系统压缩成一个文件

合并的想法源自SQLite和其它项目(它们将所有源代码打包成一个源文件)。这样一来,你只需编译这一个文件,就能构建深度学习工具。这里简化了向不同平台移植的操作。感谢 Jack Deng,MXNet 提供了一个amalgamation 脚本,它可以基于训练好的模型将所有用于预测的代码压缩成一个 .cc 文件(大约3万行代码)。BLAS库是唯一的依赖环境。

我们已经在去除BLAS依赖的情况下,创建了一个最小版本的单独文件。你可以使用 emscripten 将这个单独文件编译成 JavaScript。

编译后的库可以被其它编程语言使用。.h 文件包含一个轻量级的预测接口。可以非常轻松地将 C语言 的外来函数接口移植到另一种编程语言。例如,在GitHub上浏览下面的例子:

如果你打算合并自己的深度学习系统,构建项目时仅需要遵守几条指南:

  • 最小化第三方依赖库;
  • 使用名字空间来 封装 类型和操作符;
  • 避免在全局作用域内使用 using namespace xyz
  • 避免重复include依赖。

在移动设备上进行图像识别的例子

有了合并成一个文件的方法,在移动设备(比如安卓和IOS)上部署深度学习系统很简单了。但需要考虑到以下2点:

  • 模型应该小到能够适合设备内存。
  • 考虑到移动设备相对较低的计算性能,模型的计算量不能太大。

下面一个图像分类的例子。首先说明一下如何获得一个网络模型,从inception网络说起。在ImageNet数据集上,使用多个配备了GTX 980的服务器来训练该网络。生成的网络模型适合设备内存,但是计算量太大了。去除一些网络层之后,结果又变差了。

最后,暂时一个安卓例子,感谢 Leliana,https://github.com/Leliana/WhatsThis 描述了如何在安卓上运行。

通过使用合并的方法,我们能够轻松地,几乎不需要依赖的情况下,将预测库移植到移动设备上。在智能设备上编译深度学习工具不再是一件痛苦的事情,最后只需在目标语言(Java/Swift)中调用C-API函数即可。

除了Inception-BatchNorm网络之外,我们还提供了2个预训练的模型。

我们在 Nexus 5 上测试了我们的网络:

NetTop-1 Validation on ILSVRC2012TimeApp SizeRuntime Temp Memory Req
FastPoorNetaround 52%, similar to 2011 winner1s<10MB<5MB
Sub InceptionBNaround 64%, similar to 2013 winner2.7s<40MB<10MB
InceptionBNaround 70%4s-5s<60MB10MB

这些模型仅仅用于演示。他们没有专门为移动设备进行微调,还有很大的提升空间。我们相信创造一个轻量级,便携和快速的深度学习库是一件有趣的事情,希望你喜欢使用MXNet。

源代码

https://github.com/Leliana/WhatsThis

下载APK例子

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值