如何从 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_sorted
和 classes
现在将为您提供 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。
所以,我正在做我的硕士论文,主题是超分辨率算法对 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_sorted
和 classes
现在将为您提供 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。