写点什么

宣布为 Apache MXNet 推出 ONNX 支持

  • 2019-11-06
  • 本文字数:2483 字

    阅读完需:约 8 分钟

宣布为 Apache MXNet 推出 ONNX 支持

今天,AWS 宣布推出 ONNX-MXNet,它是一种用于将 Open Neural Network Exchange (ONNX) 深度学习模型导入到 Apache MXNet 的开源 Python 程序包。MXNet 是功能齐全且可扩展的深度学习框架,可以跨 Python、Scala 和 R 等多种热门语言提供 API。通过 MXNet 的 ONNX 格式支持,开发人员可以使用 PyTorch、Microsoft Cognitive Toolkit 或 Caffe2 等其他框架构建和训练模型,然后将这些模型导入 MXNet 中运行,从而使用 MXNet 高度优化且可扩展的引擎进行推理。


我们还很激动地告诉大家,AWS 将在 ONNX 格式方面参与合作。我们将与 FacebookMicrosoft 和深度学习社区合作,进一步开发 ONNX,让深度学习从业人员都可以访问和使用它。

什么是 ONNX?

ONNX 是一种用于对深度学习模型进行编码的开源格式。ONNX 定义神经网络计算图的格式以及图中使用的大量运算符的格式。随着越来越多的框架和硬件供应商支持 ONNX,从事深度学习的开发人员可以轻松地在框架间移动,选择最适合当前任务的框架。

快速入门

我们将介绍如何使用 ONNX-MXNet 将 ONNX 模型导入 MXNet,以及如何使用导入的模型进行推理,从 MXNet 优化的执行引擎中获益。


步骤 1:安装


首先,根据 ONNX 存储库相关说明安装 ONNX。


然后,安装 ONNX-MXNet 程序包:


Bash


$ pip install onnx-mxnet
复制代码


步骤 2:准备要导入的 ONNX 模型


在此示例中,我们将演示导入 Super Resolution 模型,以增加图像的空间分辨率。此模型使用 PyTorch 构建和训练,并且使用 PyTorch 的 ONNX 导出 API 导出到 ONNX。有关模型设计的更多详情,请参阅 PyTorch 示例


将 Super Resolution ONNX 模型下载到您的工作目录:


Bash


$ wget https://s3.amazonaws.com/onnx-mxnet/examples/super_resolution.onnx
复制代码


步骤 3:将 ONNX 模型导入 MXNet


现在我们已经准备好 ONNX 模型文件,接下来让我们使用 ONNX-MXNet 导入 API 将其导入 MXNet。在 Python 外壳中运行以下代码:


Bash


import onnx_mxnetsym, params = onnx_mxnet.import_model('super_resolution.onnx')
复制代码


此代码在 Python 运行时中创建了两个实例:


sym– 模型的符号图和


params– 模型的权重。现在已完成导入 ONNX 模型,我们生成了一个标准的 MXNet 模型。


步骤 4:准备输入进行推理 ****


下一步,我们将准备输入图像用于推理。以下步骤下载示例图像,然后将其调整为模型期望的输入形状,最后将其转换为 numpy 数组。


从外壳控制台中,将示例输入图像下载到工作目录:


Bash


$ wget https://s3.amazonaws.com/onnx-mxnet/examples/super_res_input.jpg
复制代码


然后安装 Pillow (Python Imaging Library),我们便可加载和预处理输入图像:


Bash


$ pip install Pillow
复制代码


下一步,从 Python 外壳运行代码,准备 MXNet NDArray 格式的图像:


Bash


import numpy as npimport mxnet as mxfrom PIL import Imageimg = Image.open("super_res_input.jpg").resize((224, 224))img_ycbcr = img.convert("YCbCr")img_y, img_cb, img_cr = img_ycbcr.split()test_image = mx.nd.array(np.array(img_y)[np.newaxis, np.newaxis, :, :])
复制代码


步骤 5:创建 MXNet 模块


我们将使用 MXNet 模块 API 创建和绑定模块并分配加载权重。


请注意,ONNX-MXNet 导入 API 向输入层分配了名称“input_0”,我们在初始化和绑定模块时将使用该名称。


Bash


mod = mx.mod.Module(symbol=sym, data_names=['input_0'], label_names=None)mod.bind(for_training=False, data_shapes=[('input_0',test_image.shape)])mod.set_params(arg_params=params, aux_params=None)
复制代码


步骤 6:运行推理


现在我们已经加载和绑定了 MXNet 模块并分配了训练权重,我们已准备好运行推理。我们将准备单个输入批处理,并通过网络前馈:


Bash


from collections import namedtupleBatch = namedtuple('Batch', ['data'])mod.forward(Batch([test_image]))output = mod.get_outputs()[0][0][0]
复制代码


步骤 7:检查结果


现在,我们来看看对 Super Resolution 图像运行推理后收到的结果:


Bash


img_out_y = Image.fromarray(np.uint8((output.asnumpy().clip(0, 255)), mode='L'))result_img = Image.merge("YCbCr", [          img_out_y,          img_cb.resize(img_out_y.size, Image.BICUBIC),          img_cr.resize(img_out_y.size, Image.BICUBIC)]).convert("RGB")result_img.save("super_res_output.jpg")
复制代码


以下是输入图像和生成的输出图像。如您所见,该模型能够将图像空间分辨率从 256 × 256 增加到 672 × 672。


                                                  col 1                                                        |  col 2  
复制代码


:------------------------------------------------------------------------------------------------------------------:|:--------:


输入图像 | 输出图像


下一步工作?

我们正在与 ONNX 合作伙伴和社区合作,以进一步开发 ONNX,增加更实用的运算符,并扩展 ONNX-MXNet 以包括导出和更大的运算符覆盖范围。我们还将与 Apache MXNet 社区合作,将 ONNX 引入 MXNet 核心 API。

想要了解更多信息?

可在此处获得示例,它源自 ONNX-MXNet GitHub 存储库


查看 ONNX,深入探讨如何对网络图片和运算符进行编码。


欢迎贡献代码!


特别感谢 dmlc/nnvm 社区,本次实施引用了其 ONNX 代码。


Facebook 博客:


https://research.fb.com/amazon-to-join-onnx-ai-format-drive-mxnet-support/


Microsoft 博客:


https://www.microsoft.com/en-us/cognitive-toolkit/blog/2017/11/framework-support-open-ai-ecosystem-grows/


作者介绍:


**



Hagay Lupesko 是 AWS 深度学习的工程经理。**他专注于构建让开发人员和科学家能够构建智能应用程序的深度学习工具。在业余时间,他喜欢阅读、徒步旅行以及与家人共享天伦之乐。



Roshani Nagmote 是 AWS 深度学习的软件开发人员。她正在开发使所有人都可以利用深度学习的创新工具。在业余时间,她喜欢逗弄可爱的侄子,并且喜欢大型犬。


本文转载自 AWS 技术博客。


原文链接:


https://amazonaws-china.com/cn/blogs/china/announcing-onnx-support-for-apache-mxnet/


2019-11-06 08:00849

评论

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

高博软件学院参加第二届火焰杯软件测试高校就业选拔赛喜获佳绩

测试人

软件测试

云图说|初识API中心APIHub

华为云开发者联盟

云计算 API 华为云 华为云开发者联盟 华为云云图说

云行| 云创极速先锋,翼展电竞之都!2023天翼云中国行·深圳站圆满落幕

天翼云开发者社区

云计算 云服务 电竞

领导者!天翼云持续领跑中国政务云服务市场

天翼云开发者社区

云计算 云服务

DeFi开发:探索资产支持稳定币开发中的 DeFi 聚合器

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 链游开发 NFT开发

接口响应慢该如何排查

互联网工科生

接口 Postman

第3期 | GPTSecurity周报

云起无垠

互联网众包平台:软件开发项目的明智之选

知者如C

软件研发流程、架构规范、技术标准、需求过程等全文档

金陵老街

项目经理 软件开发资料 开发模板 文档干货

从C++98到C++26,经历了什么?

树上有只程序猿

c++

碰到it运维故障怎么办丫?突发IT事故怎么快速解决?

行云管家

运维 IT运维 运维故障 协同

2023 中国 VR 50 强企业名单发布;OpenAI 新模型性能远低于预期丨 RTE 开发者日报 Vol.71

声网

第5期 | 谋远 产业互联、商业创新

用友BIP

项目管理

浪潮信息 KeyarchOS 助力百视通 IPTV 业务底层系统完美迁移 | 龙蜥案例

OpenAnolis小助手

centos 操作系统 龙蜥社区 浪潮信息 KOS

摆脱障碍,通过技术实现企业财务数字化新高度

智达方通

数字化转型 智能化 企业财务数字化 全面预算管理解决方案

深入探讨I/O模型:Java中的阻塞和非阻塞和其他高级IO应用

程序那些事

Java io 程序那些事

模糊测试重新定义应用程序的安全性

云起无垠

软件测试|计算机科学与工程学院举行火焰杯颁奖仪式

霍格沃兹测试开发学社

对话在行人|京城机电:构建数智底座实现业财深度融合

用友BIP

2023全球商业创新大会 对话在行人

软件测试/测试开发丨南科大计算机系本科生获“火焰杯”软件测试高校就业选拔赛一等奖

测试人

软件测试

从0到1实现 OpenTiny 组件库跨框架技术

华为云开发者联盟

开源 前端 开发 华为云 华为云开发者联盟

四川南充市等保测评机构有哪些?等保测评价格是多少?

行云管家

等保 等级保护 等保测评 南充

数字先锋| 柳州政务云上行,服务办事更省心!

天翼云开发者社区

云计算 云服务

软件测试|网安学院举办第二届“火焰杯”软件测试高校就业选拔赛颁奖典礼

霍格沃兹测试开发学社

宣布为 Apache MXNet 推出 ONNX 支持_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章