一、ONNX介绍
简单来说,可以把ONNX
当做一个中间格式。绝大多数的机器学习/深度学习框架都可以将自身的模型转换成ONNX
,同样也能把ONNX
转换成自身框架的格式,如下图所示。
二、转ONNX模型代码
import torch
import torchvision.models as modelsdevice = "cpu"# 加载预训练的ResNet18模型
model =models.resnet18(pretrained=True)
model.eval().to(device)# 定义输入
input = torch.zeros(1,3,224,224).to(device)torch.onnx.export(model,# 这里的args,是指输入给model的参数,需要传递tuple,因此用括号(input,),# 输出的onnx文件路径"resnet18.onnx",# 是否打印详细信息verbose=True,# 为输入和输出节点指定名称,方便后面查看或者操作input_names = ["image"],output_names = ["infer_output"],# 这里的opset,指各类算子以何种方式导出,对应于symbolic_opset11opset_version=11,# 表示它有batch,height,width3个维度是动态的,在onnx中给其赋值为-1# 通常,我们只设置batch为动态,其他避免动态dynamic_axes ={"image":{0:"batch"}, # 只有batch维是动态的"infer_output":{0:"batch"} # 只有batch维是动态的# "train_output":{0:"batch"} # 只有batch维是动态的}
)print("Done!")
三、使用netron工具查看ONNX模型结构
四、如何使用netron工具在本地直接查看服务器端的ONNX模型结构?
我们开发一般都在服务器中开发,假如我们在服务器端
导出了一个onnx文件,不将onnx文件传到本地,如何进行本地查看呢?
netron --port 8082 --host 10.75.29.201 model_data/deeplab_0320.onnx
–host
:指定服务器
的ip
,注意不是本地的。使用ifconfig
进行查看具体的ip
–port
:指定 端口号,默认即可
在服务器的终端运行以上命令:
在本地访问
,提示的地址:http://10.0.8.21:8082
就可以查看服务器端打开的onnx模型。