如何从 AlexNet 获取多个图像标签

How to get from AlexNet multiple image labels

所以,我正在做我的硕士论文,主题是超分辨率算法对 AlexNet 图像标记准确率的影响。我将 Matlab 与预训练版本的 AlexNet 一起使用。

问题是,通过使用

[label, scores] = classify(net, 'image')

我只得到一个标签,而我想得到多个标签,例如五个,以及它们对应的 AlexNet 分数。

我不知道该怎么做,如果有人能至少给我一个提示,我将非常感激。

scores 矩阵告诉您每个 class 在 class 化数据时如何得分。具体来说,每一列 i 都会告诉您在尝试 class 使用 class i 验证输入时,第 i 个 class 的得分如何下降.每行是 AlexNet 的一个输入。

如果您想获得每个输入的最高 k 分数,您可以 sort - 具体查看第二个输出变量并分别对每一行进行排序。之后,您可以提取结果的前 k 列,它告诉您与输入相关联的前 5 class 个元素或标签。如果您担心实际的 classes,请查看第一个输出。

% First classify the image(s) you would like
[label, scores] = classify(net, ...);

k = 5; % We want 5 classes
[scores_sorted, classes] = sort(scores, 2); % Sort each row individually
scores_sorted = scores_sorted(:, 1 : k);
classes = classes(:, 1 : k);

scores_sortedclasses 现在将为您提供 k 列矩阵,其中每一行告诉您为每个输入分配的顶部 k classes (存储在 classes) 以及 AlexNet (scores_sorted) 提供的分数。

为了最终确定实际的 classes 是什么,当您创建 AlexNet 时,最后一层具有 classification 的类别。假设您创建了默认网络:

net = alexnet;

...您可以通过以下方式确定每个标签 ID 的 classes 是什么:

c = net.Layers(end).ClassNames;

这是一个 class 元胞数组,总共应该有 1000 个元素。因此,鉴于我上面编写的代码中的 classes 变量,您可以这样做:

out = net.Layers(end).ClassNames(classes);

classes 因此将用于索引单元格数组,因此它将为您提供一个 N x k 单元格数组,其中该单元格数组中的每一行都会告诉您 AlexNet 为每个输入图像的顶部 k classes。