onnx 测试_ONNX 现场演示教程
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 现场演示教程相关推荐
- PyTorch 1.0 中文官方教程:ONNX 现场演示教程
译者:冯宝宝 本教程将向您展示如何使用ONNX将已从PyTorch导出的神经模型传输模型转换为Apple CoreML格式.这将允许您在Apple设备上轻松运行深度学习模型,在这种情况下,可以从摄像机 ...
- 录制怎么没有耳机设备_录制现场演示,第1部分:选择设备
录制怎么没有耳机设备 会议组织者现在几乎必须直播和/或在互联网上发布演讲者的录制演讲. 好消息是,正如我们在6月于EclipseCon France 2017上了解到的那样,开源软件和价格合理的技术使 ...
- ppt web 演示_如何通过糟糕的互联网现场演示Web应用
ppt web 演示 现场演示是世界各地专业演讲者的祸根. 出于无法预料的原因,即使是准备最充分的现场演示也会出错. 当您在300个人面前上台时,这是一件不好的事情. 远程Web应用程序的实时演示充满 ...
- 阿里安全专家BlackHat和DEFCON现场演示:一分钟越狱iOS 11.4
美国当地时间8月8日,2018年BlackHat将在拉斯维加斯正式揭幕 美国当地时间8月8日,两大世界顶级信息安全会议BlackHat和DEFCON将在美国拉斯维加斯正式揭幕.来自全球的数万名白帽黑客 ...
- unity 实验演示 教程_铁匠常见问题解答和Unity演示团队
unity 实验演示 教程 Since showing our short film The Blacksmith at GDC 2015 in March, we've received many ...
- 百度工程师首次现场演示:“文心千帆”如何可视化微调大模型
5月9日,百度智能云在北京举行文心大模型技术交流会,向在场的百家企业展示文心大模型在产品技术.场景研发.生态建设等领域的最新进展. 大模型引发的AI再造产业趋势已经势不可挡.但当下企业最大的难题是,如 ...
- FMS2015:Memblaze现场演示单机310万IOPS高性能解决方案
2015年8月11日-8月13日,Flash Memory Summit2015(FMS2015)在美国加州的圣克拉拉市召开,作为闪存技术及市场的重要推动者,Memblaze将携PBlaze4 PCI ...
- Laravel 测试: PHPUnit 入门教程
介绍 PHPUnit 测试的基础知识,使用基本的 PHPUnit 断言和 Laravel 测试助手. 介绍 PHPUnit 是最古老和最著名的 PHP 单元测试包之一.它主要用于单元测试,这意味着可以 ...
- 程序显示文本框_【教程】TestComplete测试桌面应用程序教程(二)
TestComplete是一款具有人工智能的自动UI测试工具,利用自动化测试工具和人工智能支持的混合对象识别引擎,轻松检测和测试每个桌面,Web和移动应用程序.其中,TestComplete支持测试使 ...
最新文章
- 坑爹的Python陷阱(避坑指南)
- matlab定子磁链观测器,一种基于二阶广义积分器的永磁同步电机定子磁链观测方法...
- SqlServer英文单词全字匹配
- html px转换,pc端px转换为rem针对屏幕分辨率进行页面适配
- viewer vue 文档_vue中使用viewerjs
- Oracle 创建主键自增表
- jQUery中closest和parents的主要区别是
- SpringBoot2 整合 CXF 服务端和客户端
- android开发隐藏软键盘,Android开发之完全隐藏软键盘的方法
- zynq的emio和axi_【ZYNQ7000学习之旅 - 01】EMIO练习
- 通过options探测服务器信息,WEB服务器启用了OPTIONS方法
- java 正则表达式案例
- linux 查看hive版本号,如何从命令提示符知道Hive和Hadoop版本?
- ASIC 与FPGA比较谈
- 收集:Programer Jokes
- 基于Android 平台简易即时通讯的研究与设计
- 如何快速将MKV格式转换成MP4高清电影格式?
- iOS辅助功能Accessibility浅析
- 中介者模式的实际应用
- linux 添加pv失败,linux上创建PV/VG/LV
热门文章
- Angular 项目 ng serve 背后发生的事情
- 如何找到ngrx action匹配的取数据代码 - 谈谈Spartacus Product Carousel控件数据的读取
- 如何查询当前SAP用户所属的组织单元(organization unit)
- 利用JSP内置的Application对象实现的网站引用计数
- ABAP内表在ABAP 740后支持的filter操作
- SAP Fiori Elements edit按钮的实现细节
- 在SAP HANA Express Edition里进行文本分析
- after markup mount - how is converted source code got executed
- 如何修改Fiori launchpad里tile count调用的触发时间间隔
- Customer Material Info in CRM and C4C