1. 程式人生 > >cs231n學習筆記(二)圖像分類

cs231n學習筆記(二)圖像分類

根據 stanford nbsp 學習筆記 cif 線性分類 這一 差異 測距

圖像分類可說是計算機視覺中的基礎任務同時也是核心任務,做好分類可為檢測,分割等高階任務打好基礎。

本節課主要講了兩個內容,K近鄰和線性分類器,都是以貓的分類為例。

一.  K近鄰


以貓的分類為例,一張含有貓的圖片,也不過就是一堆像素點

技術分享圖片 技術分享圖片

問題就在於給你一堆點,如何判斷出是一只貓,在很久很久以前,這還真是個超級難題,何況不同的貓,像素點完全不一致

技術分享圖片

具體來說可有以下幾種

光照,目標的形變,遮擋,背景雜亂,類內差異等等。

技術分享圖片 技術分享圖片

技術分享圖片技術分享圖片技術分享圖片

如何利用K近鄰算法解決這一問題呢,K近鄰,就是將你要判別的目標與已有的大量目標進行比較,與誰最近,就是哪一類,有點物以類聚的意思,不過,只選

取最近的一張作為參照有致命缺陷,保不準就有哪只狗與該目標相近,於是你就把這只貓判斷為狗了,所以保險起見,會取最近的K張圖片作為參照,其中哪一類

最多,就歸屬於哪一類,這種做法難說完美,不過比一張靠譜多了。

下面以cifar-10數據集為例展示下k近鄰算法。

技術分享圖片技術分享圖片

cifar-10數據集包含10類目標,圖像尺寸均為32x32,在充滿著高清無碼大圖的現代社會,著實有些復古。

左圖就是數據集的一個圖示,右圖是根據測試圖片選取的10張最近圖像,由於圖像太小,有些看不清。

那麽什麽樣的圖像是比較接近的,或者說如何測量兩張圖象的距離呢

一種測距方式是L1距離,也叫曼哈頓距離,舉例來說,坐標系中兩個點(1,1)和(2,2),L1=(2-1)+(2-1)=2,通俗點說你只能直來直去,不能斜著來。

不過對於圖像而言,L1並不是一種合適的測距方式,圖像不過是一堆像素,你完全可以構造兩個L1距離相同的圖像,其像素排列卻是有很多變化。

像下面這樣,右側三張圖與最左側的距離是一樣的,然而三張圖卻各有不同。

技術分享圖片

具體計算方式可以像下面這樣。

技術分享圖片

L2距離也許是一種更合適的方式,L2距離,也稱歐式距離,L2=√((2-1)**2+(2-1)**2)=√2

在課程的k近鄰算法展示主頁上,可以自行感受下L1與L2的區別,http://vision.stanford.edu/teaching/cs231n-demos/knn/

除了距離的度量方式,K值的選擇也是一個關鍵因素,很大程度上決定著k近鄰算法的好壞,通常不會取為1,只參照一張最相近的的圖像來判斷測試圖像有很大的偶然性。

下圖是最好的說明。

技術分享圖片

在上圖中,不同顏色代表不同類別,標出的點是訓練數據集,那些沒有點的顏色區代表你的測試圖像,根據最近鄰原則分類,並上色。

可以看到,k=1時類別邊界崎嶇不平,有些突起已經深入其它類內,顯然不合理,再註意綠色中間的黃色區域,代表著該點周圍的點被歸為黃色類,只因為與該黃色點最近,

顯然也是錯誤的,k=1時分類效果易受噪聲影響,具有偶然性。隨著k的加大,類別邊界趨於平滑,給人的感覺也更加合理,出現的白色區域根據上面的演示網址所說,是投票

數均等的區域,就是無法決策的區域。

那麽如何選擇測距方式和K值呢,在機器學習裏,這些無法訓練得來,需要手動設定的參數成為超參數,超參數的設置需要通過實驗試探得到,具體需要根據數據集劃分來決定。

技術分享圖片

如上圖所示,數據集最佳劃分為訓練集,驗證集,測試集,僅有訓練集和驗證集都無法保證良好的泛化能力(也就是應用在其它未出現過的數據上),當然,有測試集也無法一定確保良好的泛化能力,但還是比前兩個要好很多。

還有一種劃分方式為交叉驗證,一般用於小型數據集,數據集既能用來訓練,又能用來驗證。

技術分享圖片

下圖是針對k近鄰的5折交叉驗證方式,k=7時取得最好結果。

技術分享圖片

最後總結下,k近鄰作為一種簡單的分類算法,有著其天然缺陷,一是k值的設置需要實驗來確定,二是需要事先存儲訓練數據集以用來分類,三是致命的一點,每次測試都需要與所有數據進行距離計算,太耗計算資源。

那麽,有沒有其它辦法呢,有,就是接下來要講的線性分類器。

二.線性分類器


線性分類器基於簡單的代數運算,就是相乘相加,以一張貓的圖片為例,每一個像素點都有像素值,對每一個點乘以一個權重再相加,就可以輸出一個標量值,當你為這個值賦予一定含義的時候,比如正代表動物,負代表其它,那它就構成了一個簡單的線性分類器。

技術分享圖片

同樣道理,你也可以輸出一個向量,如果進行10分類,則可以輸出10維向量。

再具體點,像下面這樣。

技術分享圖片

下面這樣

技術分享圖片

可以將整幅圖像看成高維空間中的一點,線性分類器就是點與點之間的分類平面,如果是貓狗二分類,貓的點在一邊,狗的點在另一邊,中間是分類平面。

畫出來就像下面這樣。

技術分享圖片

有了這樣的想法,下一步就是設置合適的權重w與偏置b,如何設置涉及到損失函數與最優化的學問,那是下堂課要講的故事。

cs231n學習筆記(二)圖像分類