主要内容

使用 SqueezeNet 对 Simulink 中的图像进行分类

R2026b

此示例说明如何使用 Classify 模块对 Simulink® 中的图像进行分类。

此示例使用预训练的 SqueezeNet 神经网络来执行分类。

预训练的 SqueezeNet 网络

SqueezeNet 已基于超过一百万个图像进行训练,可以将图像分为 1000 个对象类别(例如键盘、咖啡杯、铅笔和多种动物)。该网络已基于大量图像学习了丰富的特征表示。网络以图像作为输入,然后输出图像中对象的标签以及每个对象类别的概率。

[net,classNames] = imagePretrainedNetwork;
inputSize = net.Layers(1).InputSize;
numClasses = numel(classNames);
disp(classNames(randperm(numClasses,10)))
    "speedboat"
    "window screen"
    "isopod"
    "wooden spoon"
    "lipstick"
    "drake"
    "hyena"
    "dumbbell"
    "strawberry"
    "custard apple"

读取图像并调整图像大小

读取并显示要分类的图像。

I = imread("peppers.png");
figure
imshow(I)

Figure contains an axes object. The hidden axes object contains an object of type image.

要将此数据导入 Simulink 模型,请指定一个包含输入图像数据和空时间向量的结构体变量。

simin.time = [];
simin.signals.values = I;
simin.signals.dimensions = size(I);

用于预测的 Simulink 模型

图中显示了用于对图像进行分类的 Simulink 模型。该模型使用 From Workspace 模块加载输入图像,使用 Deep Neural Networks 库中的 Classify 模块对输入进行分类,并使用 Display 模块显示预测的输出。

model = "SqueezeNetClassifier";
open_system(model);

Screenshot of Simulink model. The simin block is connected to a single block and then the classify block. The classify block has the outputs ypred, scores, and labels.

运行仿真

要验证 Simulink 模型,请运行仿真。

set_param(model,"SimulationMode","Normal");
sim(model);

网络将图像分类为甜椒。

Screenshot of Simulink model. The ypred output is connected to display block that shows bellPepper_label.

显示排名靠前的预测值

显示排名前五的预测标签,并以直方图形式显示它们的相关概率。由于网络将图像分类为如此多的对象类别,并且许多类别是相似的,因此在评估网络时通常会考虑准确度排名前五的几个类别。网络以高概率将图像分类为甜椒。

scores = yout.signals(1).values(:,:,1);
labels = yout.signals(2).values(:,:,1);
[~,idx] = sort(scores,"descend");
idx = idx(5:-1:1); 
scoresTop = scores(idx);
labelsTop = split(string(labels(idx)),"_"); 
labelsTop = labelsTop(:,:,1);

figure
imshow(I)
title(labelsTop(5) + ", " + num2str(100*scoresTop(5) + "%"));

Figure contains an axes object. The hidden axes object with title bellPepper, 89.3935% contains an object of type image.

figure
barh(scoresTop)
xlim([0 1])
title("Top 5 Predictions")
xlabel("Probability")
yticklabels(labelsTop)

Figure contains an axes object. The axes object with title Top 5 Predictions, xlabel Probability contains an object of type bar.