MxNet系列——how_to——smart_device

2023-05-16

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


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

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

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

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

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

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

  • Go: https://github.com/jdeng/gomxnet
  • Java: https://github.com/dmlc/mxnet/tree/master/amalgamation/jni
  • Python: https://github.com/dmlc/mxnet/tree/master/amalgamation/python

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

  • 最小化第三方依赖库;
  • 使用名字空间来 封装 类型和操作符;
  • 避免在全局作用域内使用 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例子

  • FastPoorNet

  • SubInception

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MxNet系列——how_to——smart_device 的相关文章

  • 在设备上记录数据并检索日志

    在 Xcode 中进行调试构建时 无论我使用的是模拟器还是实际设备 NSLog printf fprintf assert 和 NSAssert 语句都会出现在控制台上 如果我现在在设备上运行一个发布版本 假设我发送了一个测试飞行版本并在我
  • /dev/input/event* 的格式

    位于的字符设备的 格式 是什么 dev input event 换句话说 如何解码字符流 如果有一个 Python 示例将不胜感激 一个简单而原始的阅读器可以使用以下命令完成 usr bin python import struct imp
  • Android Studio Logcat 过滤器不显示

    我在 Ubuntu 13 10 上使用 AndroidStudio 0 4 0 在 0 3 2 上遇到同样的问题 一切都很好 直到我在 Android 和 ddms ddms 视图中丢失了 logcat 过滤实用程序和设备选择侧栏 然而 程
  • Cordova android 仿真 - 错误:无法读取 null 的属性“semver”

    尝试使用 cordova 模拟 Android 应用程序 但收到此错误消息 构建了以下 apk Users jnj cordova hello platforms android build outputs apk android debu
  • 无法在 ubuntu 13.04 中显示 Android 设备

    我有一台 Android 平板电脑设备 无法通过我的笔记本电脑 T61 上的 Android 设备显示 但它在具有相同操作系统 Ubuntu 13 04 的 DELL PC 上运行良好 我已将 adb 更新到最新的 platform too
  • 如何在 R 4.0.2 中安装“mxnet”包

    下午好 最近我在安装 mxnet 包时遇到了问题 我尝试了几种代码变体 但它们都没有真正安装这个包 1 cran lt getOption repos cran dmlc lt https apache mxnet s3 accelerat
  • android 在模拟器或设备中执行?

    有什么方法可以知道我的应用程序是在模拟器上还是在设备上运行 我使用的代码片段适用于 Intel 和 ARM 模拟器 if Build MODEL contains google sdk Build MODEL contains Emulat
  • 在音频设备连接/断开时自动收到通知?

    每当用户连接或断开音频设备时是否可以自动收到通知 在 Vista 中 您可以使用 Core AudioIMMNotificationClient 接口 http msdn microsoft com en us library window
  • -webkit-overflow-scrolling touch 不适用于固定元素

    我使用一个额外的样式表 其中包含以下内容来触摸设备 touch overflow x hidden overflow y scroll webkit overflow scrolling touch body overflow x hidd
  • 应用程序未在设备中自动启动并在 xcode 上出现错误

    我在 Xcode 4 5 上遇到一个奇怪的错误 当我尝试使用 iOS 6 从 xcode 在 Ipad 2 上运行我的应用程序时 出现此错误 我执行了以下方法来运行该应用程序 但没有成功 清理项目并运行 重新启动设备 重新启动Xcode 我
  • 如何通过安装 .app(二进制)文件在设备上测试应用程序? (不使用Xcode进行测试)

    我创建了一个应用程序 我想将其发送给另一个人进行测试 他有一部 iPhone 和一台 Mac 但他的 Mac 上没有 xcode 他不是 iPhone 程序员 所以 如果我发送 app 文件 他可以在他的 iPhone 上测试吗 如果没有
  • 将 Windows 设备路径解析为驱动器盘符

    如何解析 NT 样式的设备路径 例如 Device CdRom0 到其逻辑驱动器号 例如G 编辑 不幸的是 卷名称与设备路径不同GetVolumePathNamesForVolumeName 行不通的 希望下面的代码足以解决这个问题 在初始
  • adb 未检测到 micromax a111

    最近我购买了 micromax a111 Android 设备 我是安卓开发者 因此尝试使用该设备进行调试选项 但 adb 无法检测到该设备 我也更改了设置 但没有成功 如果有人有解决方案 请帮助我解决这个问题 micromax没有官方的P
  • Android:在 Android 设备选择器中,同一设备会出现多次

    我正在使用 Eclipse 为 Android 操作系统编程 我使用真实设备来测试我的应用程序 为了测试我的应用程序 我单击 运行 然后单击我想要运行的目标项目 然后弹出 Android 设备选择器 我可以在其中选择要运行该应用程序的设备或
  • 如何识别“hw.machine”标识符可靠?

    我正在寻找最官方的来源来完成 维护此方法 NSString platformString NSString platform self platform if platform isEqualToString iPhone1 1 retur
  • 使用 MXnet 时如何保存模型

    我正在使用 MXnet 训练 CNN 在 R 中 并且可以使用以下代码训练模型 不会出现任何错误 model lt mx model FeedForward create symbol network X train iter ctx mx
  • Android Studio 无法识别我的设备 - 一加一

    我激活了 开发人员选项 并选中 USB 调试 我在 sdk 上安装了 google usb 驱动程序 但 Android studio 仍然无法识别我的手机 一加一 我在朋友的笔记本电脑上测试了我的手机 它可以工作 当我安装驱动程序时 我的
  • cordova 使用命令行运行(实际)Android 设备?

    根据文档 http cordova apache org docs en 4 0 0 guide cli index md html 我们可以通过以下方式在模拟器上运行我们的 android 项目 cordova run android o
  • Android 设备 ID(不是 IMEI)

    我使用命令 adb devices 列出连接的设备 在我的电脑上我得到 附加设备列表 HT9CTP820988 器件 我的问题是 如何以编程方式获取此 id HT9CTP820988 你所看到的adb devices命令是序列号 序列号 创
  • 虚拟并行端口模拟器

    在我的计算机网络课程中 我们应该通过使用本机寄存器 例如使用 outportb 等命令 来学习并行端口编程 我没有并行端口 因为我住在 2011 年 但想练习这些程序 我使用 dosbox 安装了旧的 Turboc 3 IDE 有没有一个程

随机推荐

  • PCL系列——如何逐渐地配准一对点云

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之泊松重构

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之贪婪三角投影算法

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • PCL系列——三维重构之移动立方体算法

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com PCL系列 PCL系列 读入PCD格式文件操作PCL系列 将点云数据写入PCD格式文件PCL系列 拼接两个点云PCL系列 从深
  • 解决Ubuntu中文显示为乱码

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 1 安装所需软件 sudo apt get install zh autoconvert sudo apt get insta
  • hexo教程系列——hexo安装教程

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 本文详细描述了如何在Github上 xff0c 使用hexo部署博客 安装Hexo 安装node js node js官方下载
  • Python中类成员函数均为虚函数的理解

    python中类成员函数均为虚函数 我们可以通过下面的函数见识其威力 class A def foo self print 39 a 39 class B A def foo self print 39 b 39 for x in A B
  • MxNet系列——Windows上安装MxNet

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 开发环境 操作系统 xff1a Win7 64bit C 43 43 编译器 xff1a Visual Studio 2010
  • Eigen教程1 - 基础

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 固定大小的矩阵和向量 参考链接 xff1a http eigen tuxfamily org dox 2 0 Tutorial
  • Eigen教程2 - 入门

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 安装Eigen 无需安装 只需将Eigen位置添加到include路径中 Demo 1 MatrixXd xff0c X表示动
  • Eigen教程3 - 稀疏矩阵操作

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 稀疏矩阵操作 操作和求解稀疏问题需要的模块 xff1a SparseCore SparseMatrix 和 SparseVec
  • Eigen教程4 - 稀疏矩阵快速参考指南

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 本文对稀疏矩阵SparseMatrix的主要操作进行了总结 首先 xff0c 建议先阅读 Eigen教程2 稀疏矩阵操作 关于
  • Eigen教程5 - 求解稀疏线性方程组

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen中有一些求解稀疏系数矩阵的线性方程组 由于稀疏矩阵的特殊的表示方式 xff0c 因此获得较好的性能需要格外注意 查看
  • Eigen教程6 - Matrix-free solvers

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Matrix free solvers 像ConjugateGradient 和 BiCGSTAB这样的迭代求解器可以用在 m
  • Eigen教程7 - Eigen和Matlab的比较

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com Eigen和Matlab比较 参考 http eigen tuxfamily org dox AsciiQuickRefere
  • MxNet系列——how_to——perf

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 性能 下面是一些技巧 xff0c 以尽可能的获取MXNet的最佳性能 数据 对于输入数据 xff0c 需要注意以下内容 xff
  • MxNet系列——how_to——visualize_graph

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将神经网络可视化为计算图 该章节描述了如何在MXNet中使用在mx viz plot network来可视化 xff08
  • 修改antlr错误信息输出格式的方法

    找到 antlr DefaultFileLineFormatter java 修改类DefaultFileLineFormatter的函数getFormatString 我将其修改如下 以适应vc的错误信息输出格式 package antl
  • MxNet系列——how_to——torch

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 如何将MXNet用作Torch的前后端 本章节描述了如何将MXNet用作Torch的两个主要功能 xff08 前端和后端 xf
  • MxNet系列——how_to——smart_device

    博客新址 http blog xuezhisd top 邮箱 xff1a xuezhisd 64 126 com 将深度学习库压缩成一个文件 xff0c 以便移植到智能设备中 深度学习系统是复杂的 xff0c 并且常常有些依赖环境 将深度学