1

因此,我正在研究Master解決超分辨率算法對AlexNet圖像標籤準確率的影響。我正在使用預先訓練版本的AlexNet的Matlab。如何從AlexNet獲得多個圖像標籤

的問題是,通過使用

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

我只得到一個標籤,而我想獲得多個標籤,例如,五,他們通過AlexNet相應的分數。

我不知道該怎麼做,如果有人能給我,至少是一個暗示,我真的非常感謝。

回答

2

scores矩陣會告訴您每個類在分類數據時如何得分。具體而言,每列i都會告訴您如何在嘗試使用i類別對輸入進行分類時得到i th級別的分數。每行都是AlexNet的一個輸入。

如果您想獲得每個輸入的排名前k分數,您可以sort - 專門查看第二個輸出變量並分別對每行進行排序。之後,您可以提取出結果的第一個k列,告訴您與輸入關聯的前5個類或標籤。如果您關心實際的課程,請查看第一個輸出。

% 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列矩陣,其中的每一行告訴您分配給每個輸入(存儲在classes)頂部k類以及由AlexNet(scores_sorted)中提供的分數。

爲了最終確定實際的類是什麼,當您創建AlexNet時,最後一層包含分類類別。假設你創建的默認網:

net = alexnet; 

...你能確定哪些類是通過每一個標籤ID:

c = net.Layers(end).ClassNames; 

這是類的單元陣列,並且應該有總共1000個元素。因此,給定從我上面寫的代碼變量的類,則可以由此做到:

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

classes將因此可用於索引到單元陣列,它會因而會給你N x k單元陣列的每一行,其中在這個單元格陣列中告訴您由AlexNet爲每個輸入圖像的頂部k類指定的標籤。

+0

哇,這很快,非常感謝你:))我明白,分數矩陣與不同的類相關聯,但我不知道如何。它們是否以某種方式與預先訓練的AlexNet的1000個類別(或同義詞)的列表相關?有沒有將課程映射到分數的方法? –

+0

'classes'會給你一個整數索引,你可以用它來索引由AlexNet提供的實際分類數據。例如,如果AlexNet將輸出分配爲類400,則這意味着它屬於類別400,假定您使用了ILSVRC2010數據。將課程映射到分數已經爲您完成。 '分數'給你分配給AlexNet的分數,而'分類'給你如何爲每個分配輸入的相應分數。 – rayryeng

+0

問題是,當使用matlab的'classify'函數時,我只能得到1個標籤(即一個類或synset),但我不知道如何獲得更多的標籤。你似乎不情願地說我可以得到一個名爲'class'的變量,其中所有的類都將根據ILSVRC2010進行定義,但我不知道如何去做。如果你能告訴我如何在matlab中做到這一點,我會非常感激。謝謝,真的,非常想幫我:) –