主要内容

推理比较ONNX和进口网络图像分类

这个例子展示了如何比较的推理(预测)成果ONNX™模型和进口MATLAB®网络图像分类任务。首先,使用网络的预测ONNX并保存预测结果。然后,在MATLAB使用导入网络importONNXNetwork功能和预测分类输出相同的图像在ONNX用来预测。

您还可以使用工作流在这个例子比较MATLAB ONNX深学习网络和导出的模型。使用exportONNXNetwork出口一个MATLAB网络ONNX模型格式。

创建ONNX模型和图像数据集

生成一个ONNX模型squeezenet卷积神经网络。

squeezeNet = squeezeNet;exportONNXNetwork (squeezeNet“squeezeNet.onnx”);

创建图像数据集。

Im1 = imresize (imread (“peacock.jpg”),227年[227]);Im2 = imresize (imread (“sherlock.jpg”),227年[227]);Im3 = imresize (imread (“peppers.png”),227年[227]);Im4 = imresize (imread (“lighthouse.png”),227年[227]);X =猫(4 Im1 Im2、Im3 Im4);

创建数据集,ONNX预测模型使用。排列的二维图像数据深度学习工具箱™排序(HWCN)到ONNX排序(NCHW),H,W,C高度,宽度,和数字通道的图像,分别和N是图片的数量。

X_onnx =单(X);X_onnx =排列(X_onnx [4、3、1、2]);

将数据集保存到一个垫子文件。

文件名=“TestIms.mat”;保存(文件名,“X”)

推理与ONNX网络

加载一个pretrained ONNX网络图像分类在Python中®和分类的新图像。

导入库。

进口onnxruntime rt scipy进口。io是sio

加载图像数据TestIms.mat

data = sio.loadmat (“TestIms.mat”) X =数据(“X_onnx”)

加载pretrained ONNX网络。

税= rt.InferenceSession (“squeezeNet.onnx”) input_name = sess.get_inputs () [0] . name

新图像进行分类。

成绩= sess.run(没有,{input_name: X})

保存分类垫文件中的分数ONNXData.mat

sio.savemat (“ONNXData。垫”,{“scores_onnx”:分数})

推理与进口网络

导入pretrained ONNX网络MATLAB使用importONNXNetwork和分类与ONNX网络相同的图像。

指定类名。

一会= squeezeNet.Layers . class(结束);

导入pretrainedsqueezeNet.onnx模型和指定的类。默认情况下,importONNXNetwork网络作为一个进口DAGNetwork对象。

网= importONNXNetwork (“squeezeNet.onnx”、类=一会)
网= DAGNetwork属性:层:x1 nnet.cnn.layer.Layer[70]连接:[77 x2表]InputNames:{“数据”}OutputNames: {“ClassificationLayer_prob”}

预测类标签和分类分数使用导入的网络。

[labels_dlt, scores_dlt] =(净,X)进行分类;

对于这个示例,该数据X在正确的顺序。注意,如果图像数据X是在ONNX维度排序,你必须把X深度学习工具箱命令输入X =排列(X, [3、4、2、1)

显示的图像和序列分类结果。

t = tiledlayout (2, 2);i = 1:尺寸(X, 4) nexttile imshow (X(::,:,我))标题((类名(labels_dlt(我))),字形大小= 12)结束t。TileSpacing =“紧凑”;t。填充=“紧凑”;

图包含4轴对象。坐标轴对象1标题孔雀包含一个类型的对象的形象。坐标轴对象2标题金毛猎犬包含一个类型的对象的形象。坐标轴对象3标题甜椒包含一个类型的对象的形象。坐标轴对象4标题信标包含一个类型的对象的形象。

比较准确

加载ONNX网络分数ONNXData.mat附加到这个例子作为支持文件。金宝app访问ONNXData.zip,打开生活中的例子编辑器。

负载(“ONNXData.mat”)

比较推理结果(分数分类)ONNX网络(scores_onnx进口)和网络(scores_dlt)。

diff = max (abs (scores_dlt-squeeze (scores_onnx)), [],“所有”)
diff =4.6790 e-06

推理的结果之间的差异可以忽略不计,强烈表明ONNX网络和导入的网络都是一样的。

作为一个二次检查,你可以比较的分类标签。首先,计算类标签ONNX预测的网络。然后,比较ONNX网络预测的标签和导入的网络。

[~,印第安纳州]= max(挤压(scores_onnx), [], 2);labels_onnx =分类(类名(印第安纳州))
labels_onnx =4 x1分类孔雀金毛猎犬甜椒灯塔
isequal (labels_dlt labels_onnx)
ans =逻辑1

标签是相同的,这表明这两个网络都是一样的。

另请参阅

|