图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述
2.1.1 圖像分類
- 任務(wù)目的:對輸入的圖像賦予一個標簽,這個標簽在指定類別集合中。
下面這個例子中,圖像分類模型拍攝一張圖像并將概率分配給4個標簽{cat,dog,hat,mug}。如圖所示,請記住,對于計算機而言,圖像表示為一個大型3維數(shù)字數(shù)組。在此示例中,貓圖像的寬度為248像素,高度為400像素,并具有紅色,綠色,藍色(簡稱RGB)三個顏色通道。因此,圖像由248 x 400 x 3個數(shù)字或總共297,600個數(shù)字組成。每個數(shù)字都是一個整數(shù),范圍是0(黑色)到255(白色)。我們的任務(wù)是將這一百萬分之一的數(shù)字變成一個單獨的標簽,例如“ cat”。
圖像分類的任務(wù)是預(yù)測給定圖像的單個標簽(或標簽上的分布,如圖所示,以表示我們的可信度)。圖像是0到255之間的三維整數(shù)數(shù)組,大小為寬x高x 3。3表示紅色、綠色、藍色三個顏色通道。
2.1.1.1 挑戰(zhàn):
由于識別視覺概念的任務(wù)對人類來說相對來說是微不足道的,因此從計算機視覺算法的角度考慮所涉及的挑戰(zhàn)存在并且具有價值的。圖像的原始表示為亮度值的三維數(shù)組:
-
Viewpoint variation:單個物體從不同的角度照出來的圖像
-
Scale variation:展現(xiàn)出的圖像大小會變化
-
Deformation:許多物體的邊緣可以形成不同的形狀形式
-
Occlusion:關(guān)注的某個物體會被遮擋,只有一小部分會被顯示出來
-
Illumination conditions: 光照對像素級的影響很大
-
Background clutter: 感興趣的物體與環(huán)境融合,很難進行區(qū)分
-
Intra-class variation: 物體的類別非常廣泛相近,例如椅子,這些對象有許多不同的類型,每個都有自己的外觀
所以一個好的圖像分類模型必須解決上述問題,對各種變化的交叉存在具有敏感性。
2.1.2 近鄰分類器
首先我們將介紹一個最近鄰分類的方法,雖然這個方法沒有用到深度學(xué)習(xí)的方法,并且也很少在實踐中使用。但是能夠給我們提供一個去解決圖像分類問題的基礎(chǔ)思路。
- 數(shù)據(jù)驅(qū)動方式
如何編寫一個算法進行將一個張圖片分類到具體一個類別,會給計算機提供每個類別的很多樣本,然后使用算法去學(xué)習(xí)這些樣本學(xué)習(xí)每個類別的視覺特點。這樣的方式依賴于大量的指定類別的訓(xùn)練數(shù)據(jù)。如下所示
2.1.2.1 CIFAR-10例子介紹
圖像分類數(shù)據(jù)集示例:CIFAR-10,一個流行的圖像分類數(shù)據(jù)集。這個數(shù)據(jù)集由60000個32像素高和寬組成的小圖像組成。每個圖像都被標記為10個類之一(例如“飛機、汽車、鳥等”)。這60000個圖像被分割成50000個圖像的訓(xùn)練集和10000個圖像的測試集。在下圖中,您可以看到10個類中每個類的10個隨機示例圖像:
上面圖中就是數(shù)據(jù)集的類別和圖像的示例,右邊展示了一部分測試圖像以及最相近的在訓(xùn)練集中前10張圖片集合。
2.1.2.2 算法思路
假設(shè)現(xiàn)在我們得到了cifar-10訓(xùn)練集,它包含50000個圖像(每個標簽有5000個圖像),我們希望標記預(yù)測剩下的10000個圖像。
- 最近鄰分類器將得到一個測試圖像,將其與每個訓(xùn)練圖像進行比較,并預(yù)測其標簽,為最近的訓(xùn)練圖像的標簽。
在上面和右邊的圖像中,您可以看到10個示例測試圖像的這種過程的示例結(jié)果。注意,在大約10個示例中,只有3個檢索到同一類的圖像,而在其他7個示例中則不是這樣。例如,在第8排,離馬頭最近的訓(xùn)練圖像是一輛紅色的汽車,大概是由于強烈的黑色背景。因此,在這種情況下,馬的圖像會被錯誤地標記為汽車。
如何比較圖像兩張圖片
每個圖像都是32 x 32 x 3的像素。最簡單的方法之一是逐像素比較圖像,并將所有差異相加。
如果兩個圖像一樣,結(jié)果為0,如果兩個圖像相差很大,結(jié)果會很大
- 訓(xùn)練數(shù)據(jù)集與測試數(shù)據(jù)L1距離代碼實現(xiàn)
- Xtr為所有訓(xùn)練數(shù)據(jù),
設(shè)定輸入的圖片和標簽形狀為
Xtrain_rows = Xtrain.reshape(Xtrain.shape[0], 32 * 32 * 3) # Xtr_rows becomes 50000 x 3072 Xtest_rows = Xtest.reshape(Xtest.shape[0], 32 * 32 * 3) # Xte_rows becomes 10000 x 3072完整代碼實現(xiàn)(Numpy)
import numpy as npclass NearestNeighbor(object):def __init__(self):passdef train(self, X, y):"""X:N x D形狀,N為樣本數(shù),D為像素數(shù)量Y:1維,大小為N"""# 所有最近鄰需要的訓(xùn)練數(shù)據(jù)集self.Xtrain = Xself.ytrain = ydef predict(self, Xtest):"""對輸入的X若干個測試圖片,每個進行預(yù)測"""num_test = Xtest.shape[0]# 確保輸出類型一樣Ypred = np.zeros(num_test, dtype = self.ytrain.dtype)# 循環(huán)所有測試數(shù)據(jù)for i in xrange(num_test):# 使用L1距離找到i最近的訓(xùn)練圖片distances = np.sum(np.abs(self.Xtrain - Xtest[i,:]), axis = 1)min_index = np.argmin(distances)# 獲取最近的距離的圖像下標Ypred[i] = self.ytrain[min_index]# 預(yù)測標簽(獲取對應(yīng)訓(xùn)練那張圖片的目標標簽)return Ypred結(jié)果
使用上述方法,我們在CIFAR-10的測試機上面只能達到38.6%?的準確率,距離目前人類的測試結(jié)果(大概)94%的準確率,還有后面著重介紹的state of the art(SOTA,前沿的)的卷積神經(jīng)網(wǎng)絡(luò)取得的效果95%
距離選擇
距離有很多種方式,在計算兩個向量的距離時候,也可以選擇L2,歐式距離。?d_2 (I_1, I_2) = \sqrt{\sum_{p} \left( I^p_1 - I^p_2 \right)^2}d?2??(I?1??,I?2??)=√??p?∑??(I?1?p???I?2?p??)?2?????只要去修改其中的距離計算即可
distances = np.sqrt(np.sum(np.square(Xtrain - Xtest[i,:]), axis = 1))但是在實際的最近鄰應(yīng)用程序中,我們可以省略平方根操作,因為平方根是單調(diào)函數(shù)。縮放距離的絕對大小,因此有或沒有順序的最近鄰是相同的。如果您使用L2距離在cifar-10上運行最近鄰分類器,將獲得35.4%的精度(略低于L1距離結(jié)果)。
2.1.3 近鄰分類器的優(yōu)缺點
-
優(yōu)點是實現(xiàn)和理解起來非常簡單。此外,分類器不需要時間進行訓(xùn)練,因為所需的只是存儲并可能索引訓(xùn)練數(shù)據(jù)。
-
缺點是我們在測試時候的計算成本,因為對測試示例進行分類需要與每個單獨的訓(xùn)練示例進行比較。這是向后的,因為在實踐中,我們通常更關(guān)心測試時間的效率,而不是訓(xùn)練時間的效率。
- 利用L1和L2進行距離測量不適合描述圖片的相似度,不適合描述圖片在視覺感知上的差異
- 測試太慢
- 維數(shù)災(zāi)難
注:最近鄰分類器的計算復(fù)雜度是非常值得研究的領(lǐng)域,現(xiàn)有的幾種近似最近鄰(ann)算法和庫可以加速數(shù)據(jù)集中的最近鄰查找。這些算法允許在檢索過程中權(quán)衡最近鄰檢索的正確性和其空間/時間復(fù)雜性,并且通常依賴于涉及構(gòu)建kdtree或運行k-means算法的預(yù)處理/索引階段。在某些情況下(尤其是在數(shù)據(jù)低維的情況下),最近鄰分類器有時可能是一個不錯的選擇,但它很少適用于實際的圖像分類設(shè)置。一個問題是,圖像是高維對象,高維空間上的距離可能非常反直觀。
- 存在問題:
基于高維數(shù)據(jù)(尤其是圖像)的像素距離可能非常不直觀。上述原始圖像(左)和它旁邊的其他三個圖像,根據(jù)L2像素距離,三個變化后的圖像都離原始圖像同樣遠。顯然,像素級的距離根本不符合圖像的語義相似性。
2.1.4 總結(jié)
- 圖像分類任務(wù)引入以及挑戰(zhàn)
- 最近鄰分類器
- L1與L2距離在圖像距離的計算和存在的問題
總結(jié)
以上是生活随笔為你收集整理的图像分类_01图像分类简介:挑战+近邻分类器+CIFAR-10数据集概述的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Pytorch神经网络基础理论篇】 0
- 下一篇: android转流媒体,android