ONNX 现场演示教程

译者:冯宝宝

本教程将向您展示如何使用ONNX将已从PyTorch导出的神经模型传输模型转换为Apple CoreML格式。这将允许您在Apple设备上轻松运行深度学习模型,在这种情况下,可以从摄像机直播演示。

什么是ONNX

ONNX(开放式神经网络交换)是一种表示深度学习模型的开放格式。借助ONNX,AI开发人员可以更轻松地在最先进的工具之间移动模型,并选择最适合它们的组合。ONNX由合作伙伴社区开发和支持。 您可以访问 onnx.ai,了解有关ONNX的更多信息以及支持的工具。

教程预览

本教程将带你走过如下主要4步:

环境准备

我们将在虚拟环境工作,以避免与您的本地环境冲突。在本教程中使用Python 3.6,但其他版本也应该可以正常工作。

python3.6 -m venv venv

source ./venv/bin/activate

我们需要安装Pytorch和 onnx->coreml 转换器:

pip install torchvision onnx-coreml

如果要在iPhone上运行iOS样式传输应用程序,还需要安装XCode。您也可以在Linux中转换模型,但要运行iOS应用程序本身,您将需要一台Mac。

下载(或训练)Pytorch风格装换模型

在本教程中,我们将使用与pytorch一起发布的样式传输模型,地址为https://github.com/pytorch/examples/tree/master/fast_neural_style。如果您想使用其他PyTorch或ONNX模型,请随意跳过此步骤。

这些模型用于在静态图像上应用样式传输,并且实际上没有针对视频进行优化以获得足够快的速度。但是,如果我们将分辨率降低到足够低,它们也可以很好地处理视频。

我们先下载模型:

git clone https://github.com/pytorch/examples

cd examples/fast_neural_style

如果您想自己训练模型,您刚刚克隆下载的的pytorch/examples存储库有更多关于如何执行此操作的信息。目前,我们只需使用存储库提供的脚本下载预先训练的模型:

./download_saved_models.sh

此脚本下载预先训练的PyTorch模型并将它们放入saved_models文件夹中。 你的目录中现在应该有4个文件,candy.pth,mosaic.pth,rain_princess.pth和udnie.pth。

将PyTorch模型转换至ONNX模型

现在我们已将预先训练好的PyTorch模型作为saved_models文件夹中的.pth文件,我们需要将它们转换为ONNX格式。模型定义在我们之前克隆的pytorch/examples存储库中,通过几行python我们可以将它导出到ONNX。在这种情况下,我们将调用torch.onnx._export而不是实际运行神经网络,它将PyTorch作为api提供,以直接从PyTorch导出ONNX格式的模型。但是,在这种情况下,我们甚至不需要这样做,因为脚本已经存在Neural_style / neural_style.py,它将为我们执行此操作。如果要将其应用于其他模型,也可以查看该脚本。

从PyTorch导出ONNX格式本质上是追踪您的神经网络,因此这个api调用将在内部运行网络“虚拟数据”以生成图形。为此,它需要输入图像来应用样式转移,其可以简单地是空白图像。但是,此图像的像素大小很重要,因为这将是导出的样式传输模型的大小。为了获得良好的性能,我们将使用250x540的分辨率。如果您不太关心FPS,可以随意采取更大的分辨率,更多关于风格转移质量。

让我们使用ImageMagick创建我们想要的分辨率的空白图像:

convert -size 250x540 xc:white png24:dummy.jpg

然后用它来导出PyTorch模型用它来导出PyTorch模型:

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/candy.pth --cuda 0 --export_onnx ./saved_models/candy.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/udnie.pth --cuda 0 --export_onnx ./saved_models/udnie.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/rain_princess.pth --cuda 0 --export_onnx ./saved_models/rain_princess.onnx

python ./neural_style/neural_style.py eval --content-image dummy.jpg --output-image dummy-out.jpg --model ./saved_models/mosaic.pth --cuda 0 --export_onnx ./saved_models/mosaic.onnx

你应该得到4个文件,candy.onnx,mosaic.onnx,rain_princess.onnx和udnie.onnx,由相应的.pth文件创建。

将ONNX模型转换至CoreML模型

现在我们有了ONNX模型,我们可以将它们转换为CoreML模型,以便在Apple设备上运行它们。为此,我们使用之前安装的onnx-coreml转换器。转换器附带一个convert-onnx-to-coreml脚本,上面的安装步骤添加到我们的路径中。遗憾的是,这对我们不起作用,因为我们需要将网络的输入和输出标记为图像,并且虽然这是转换器支持的,但只有在从python调用转换器时才支持它。

通过查看样式传输模型(例如在像Netron这样的应用程序中打开.onnx文件),我们看到输入名为'0',输出名为'186'。这些只是PyTorch分配的数字ID。我们需要将它们标记为图像。

所以让我们创建一个python小文件并将其命名为onnx_to_coreml.py。这可以通过使用touch命令创建,并使用您喜欢的编辑器进行编辑,以添加以下代码行。

import sys

from onnx import onnx_pb

from onnx_coreml import convert

model_in = sys.argv[1]

model_out = sys.argv[2]

model_file = open(model_in, 'rb')

model_proto = onnx_pb.ModelProto()

model_proto.ParseFromString(model_file.read())

coreml_model = convert(model_proto, image_input_names=['0'], image_output_names=['186'])

coreml_model.save(model_out)

现在来运行:

python onnx_to_coreml.py ./saved_models/candy.onnx ./saved_models/candy.mlmodel

python onnx_to_coreml.py ./saved_models/udnie.onnx ./saved_models/udnie.mlmodel

python onnx_to_coreml.py ./saved_models/rain_princess.onnx ./saved_models/rain_princess.mlmodel

python onnx_to_coreml.py ./saved_models/mosaic.onnx ./saved_models/mosaic.mlmodel

现在,您的saved_models目录中应该有4个CoreML模型:candy.mlmodel,mosaic.mlmodel,rain_princess.mlmodel和udnie.mlmodel。

在支持风格转换iOS App中运行CoreML模型

此存储库(即您当前正在阅读README.md的存储库)包含一个iOS应用程序,可以在手机摄像头的实时摄像头流上运行CoreML样式传输模型。

git clone https://github.com/onnx/tutorials

并在XCode中打开tutorials/examples/CoreML/NNXLive/ONNXLive.xcodeproj项目。我们建议使用XCode 9.3和iPhone X。在旧设备或XCode版本上可能会出现问题。

在Models/文件夹中,项目包含一些.mlmodel文件。我们将用我们刚刚创建的模型替换它们。

然后你在iPhone上运行应用程序就可以了。点击屏幕可切换模型。

结论

我们希望本教程能够概述ONNX的内容以及如何使用它来在框架之间转换神经网络,在这种情况下,神经风格的传输模型从PyTorch转移到CoreML。

您可以随意尝试这些步骤并在自己的模型上进行测试。如果您遇到任何问题或想要提供反馈,请告诉我们。我们倾听你的想法。

onnx 测试_ONNX 现场演示教程相关推荐

  1. PyTorch 1.0 中文官方教程:ONNX 现场演示教程

    译者:冯宝宝 本教程将向您展示如何使用ONNX将已从PyTorch导出的神经模型传输模型转换为Apple CoreML格式.这将允许您在Apple设备上轻松运行深度学习模型,在这种情况下,可以从摄像机 ...

  2. 录制怎么没有耳机设备_录制现场演示,第1部分:选择设备

    录制怎么没有耳机设备 会议组织者现在几乎必须直播和/或在互联网上发布演讲者的录制演讲. 好消息是,正如我们在6月于EclipseCon France 2017上了解到的那样,开源软件和价格合理的技术使 ...

  3. ppt web 演示_如何通过糟糕的互联网现场演示Web应用

    ppt web 演示 现场演示是世界各地专业演讲者的祸根. 出于无法预料的原因,即使是准备最充分的现场演示也会出错. 当您在300个人面前上台时,这是一件不好的事情. 远程Web应用程序的实时演示充满 ...

  4. 阿里安全专家BlackHat和DEFCON现场演示:一分钟越狱iOS 11.4

    美国当地时间8月8日,2018年BlackHat将在拉斯维加斯正式揭幕 美国当地时间8月8日,两大世界顶级信息安全会议BlackHat和DEFCON将在美国拉斯维加斯正式揭幕.来自全球的数万名白帽黑客 ...

  5. unity 实验演示 教程_铁匠常见问题解答和Unity演示团队

    unity 实验演示 教程 Since showing our short film The Blacksmith at GDC 2015 in March, we've received many ...

  6. 百度工程师首次现场演示:“文心千帆”如何可视化微调大模型

    5月9日,百度智能云在北京举行文心大模型技术交流会,向在场的百家企业展示文心大模型在产品技术.场景研发.生态建设等领域的最新进展. 大模型引发的AI再造产业趋势已经势不可挡.但当下企业最大的难题是,如 ...

  7. FMS2015:Memblaze现场演示单机310万IOPS高性能解决方案

    2015年8月11日-8月13日,Flash Memory Summit2015(FMS2015)在美国加州的圣克拉拉市召开,作为闪存技术及市场的重要推动者,Memblaze将携PBlaze4 PCI ...

  8. Laravel 测试: PHPUnit 入门教程

    介绍 PHPUnit 测试的基础知识,使用基本的 PHPUnit 断言和 Laravel 测试助手. 介绍 PHPUnit 是最古老和最著名的 PHP 单元测试包之一.它主要用于单元测试,这意味着可以 ...

  9. 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)

    TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...

最新文章

  1. 坑爹的Python陷阱(避坑指南)
  2. matlab定子磁链观测器,一种基于二阶广义积分器的永磁同步电机定子磁链观测方法...
  3. SqlServer英文单词全字匹配
  4. html px转换,pc端px转换为rem针对屏幕分辨率进行页面适配
  5. viewer vue 文档_vue中使用viewerjs
  6. Oracle 创建主键自增表
  7. jQUery中closest和parents的主要区别是
  8. SpringBoot2 整合 CXF 服务端和客户端
  9. android开发隐藏软键盘,Android开发之完全隐藏软键盘的方法
  10. zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习
  11. 通过options探测服务器信息,WEB服务器启用了OPTIONS方法
  12. java 正则表达式案例
  13. linux 查看hive版本号,如何从命令提示符知道Hive和Hadoop版本?
  14. ASIC 与FPGA比较谈
  15. 收集:Programer Jokes
  16. 基于Android 平台简易即时通讯的研究与设计
  17. 如何快速将MKV格式转换成MP4高清电影格式?
  18. iOS辅助功能Accessibility浅析
  19. 中介者模式的实际应用
  20. linux 添加pv失败,linux上创建PV/VG/LV

热门文章

  1. Angular 项目 ng serve 背后发生的事情
  2. 如何找到ngrx action匹配的取数据代码 - 谈谈Spartacus Product Carousel控件数据的读取
  3. 如何查询当前SAP用户所属的组织单元(organization unit)
  4. 利用JSP内置的Application对象实现的网站引用计数
  5. ABAP内表在ABAP 740后支持的filter操作
  6. SAP Fiori Elements edit按钮的实现细节
  7. 在SAP HANA Express Edition里进行文本分析
  8. after markup mount - how is converted source code got executed
  9. 如何修改Fiori launchpad里tile count调用的触发时间间隔
  10. Customer Material Info in CRM and C4C