推理比较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。填充=“紧凑”;
比较准确
加载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
标签是相同的,这表明这两个网络都是一样的。