一、圖像分類定義
可以用一個簡單的公式來描述圖像分類的過程:
訓練:通過訓練集{(x1,y1),...,{xn,yn}}來獲得一個預測函數f,滿足在訓練集上的最小誤差。
測試:向預測函數f輸入一個從來沒有見過的x,得到預測值y。
二、泛化能力
我們在訓練的過程中,要注意所訓練出來的模型的泛化能力。所謂泛化能力,就是要讓模型認識不同形態、不同顏色等不同特征的同類事物,例如蘋果,蘋果有黃色的、綠色的、紅色的等,當訓練出來的模型不能只認識紅色的,而要認識各種不同種類的蘋果。
所以,我們在訓練模型的時候,提供的訓練集就要盡可能的包含多種同類事物(局部特征可能不同),讓模型來自己學習他們的共性,從而獲得泛化能力。
三、傳統機器學習的訓練和測試過程
在機器學習領域中,如果我們要對一個圖片進行分類,想要讓其具有良好的泛化能力,我們不能將原始的RGB圖片直接作為輸入,而是需要經過以下過程:
1.在訓練的時候,首先要對圖像進行特征提取,摒除一些干擾因素,例如雜亂的背景等等
2.使用分類算法進行訓練,訓練的時候用標簽來計算損失,最后得到訓練好的分類器(模型)。
3.測試時,同樣要首先對圖像做特征提取(要和訓練時的特征提取操作一致),然后使用訓練好的模型進行預測,得到預測值。
四、圖像特征提取介紹
1.顏色特征
顏色特征是將圖片的顏色做直方圖,直方圖就是其顏色分布的特征。
2.全局形狀
通過PCA降維來提取全局形狀特征,但是當形狀旋轉和扭曲的時候,效果不好。
3.局部形狀
4.紋理
常用的圖像特征有以下幾種:
1.SIFT特征
SIFT是一種比較有用的特征,將一個區域划分為16格,每一個提取一個8維的梯度向量,然后將16個8維向量串起來得到一個128維的特征向量。主要用在圖像分類和圖像匹配等任務。
2.HOG特征
HOG主要用在目標檢測領域,能夠比較精確的將目標的形狀給檢測出來,所以在目標檢測和跟蹤方面用得比較多。
3.LBP特征
主要對人臉特征的提取比較好。
4.Harr特征
即角點特征,使用各種過濾器對圖像進行處理,可以提取橫向、縱向等方向的邊界。
五、使用SVM來分類iris蘭花
六、CNN結構初窺
相比於前面的機器學習對圖像的分類來說,CNN可以將一個圖片直接作為輸入,然后通過卷積層和全連接層,就可以得到分類的輸出,是一個端到端的過程。
七、深度學習中的激勵函數
激勵函數是一些非線性的函數,這些函數的特性有所不同:
1.Sigmoid函數可以將數值壓縮到0-1的區間。
2.tanh可以將數值壓縮到-1-1的區間。
3.Relu函數實現一個取正的效果,所有負數的信息都拋棄。
4.leaky Relu是一種相對折中的Relu,認為當數值為負的時候可能也存在一定有用的信息,那么就乘以一個系數0.1(可以調整或自動學習),從而獲取負數中的一部分信息。
5.Maxout使用兩套參數,取其中值大的一套作為輸出。
6.ELU類似於Leaky Relu,只是使用的公式不同。
每一層的非線性激勵函數組合起來,就可以形成一個非常復雜的非線性函數,也就可以有足夠的能力來處理大量的信息(即可以保存大量的知識來指導分類)。
八、卷積運算過程
輸入圖像:32*32是圖像的高和寬,其中的每一格是一個像素點,由於RGB圖像有3個顏色通道,所以該圖像的channel為3,一共就是32*32*3。
卷積核:卷積核的size一般是奇數*奇數,channel要與被卷積的圖像相同,這里也為3。
特征圖:就是卷積后的圖像,寬和高一般情況下會變小(valid padding),但是我們可以通過padding的方式使之不發生變化,也就是“same”的padding方式。特征圖的channel值應該是等於卷積核的個數,因為每一個卷積核對圖像進行卷積,都會產生一個channel為1的矩陣,6個卷積核產生的結果就是6個圖層的疊加,所以結果維度為28*28*6。
卷積的計算過程:
解釋:
1.W0表示一個卷積核,大小是3*3*3,一共27個參數,這些參數都是通過BP算法來更新的。
2.卷積核的3和channel對應輸入圖像的3個channel,從第一格開始滑動,每次都計算自己覆蓋的所有像素點,求他們的積,再求和。得到3個channel為1的矩陣。
3.注意上圖中輸入圖像外圍的灰色填充0,這就是padding,這樣填充后,經過卷積計算,得到的結果矩陣與輸入圖像的高和寬一致,這叫“same” padding。
4.卷積核的3和channel分別得到的3個矩陣,在求和,可以得到一個高和寬與輸入圖像一致,channel為1的結果矩陣。
5.然后第二個卷積核W1再來做同樣的操作,最終同樣得到一個結果矩陣。
6.假設一共有6個卷積核,那么最終就會得到一個高寬與輸入圖像一致,channel為6的三維矩陣。
九、卷積層可視化
從上圖可以看出,在接近輸入層的卷積部分。提取到的圖像特征很像前面機器學習用到的幾種特征,所以在低級特征中,CNN就完成了各種常用特征的提取,並且將他們融合起來。
而更重要的是后面的中級特征和高級特征,這些特征是前面提到的機器學習特征很難獲取的特征,這些特征才能真正表征一個圖像的本質,從而提供給后面做精確的分類。
十、池化層
池化層實際上就是一個降采樣的過程。
一般有兩種常用的池化方式:
1.平均池化:Average pooling
2.最大池化:Max pooling
以最大池化為例:
池化的核通常采用2x2的大小,平均池化就是計算2x2范圍內的平均值,最大池化就是取該范圍內的最大值。目前比較常用的是最大池化。
在經過池化后,原圖像的channel是不發生改變的。
十一、全連接層
在經過卷積層、池化層后得到的結果矩陣,我們通過將其壓平(flatting)后,就可以輸入全連接層。
如圖所示,結果矩陣壓平后得到一個1x3072的向量,然后輸入到擁有10個節點的全連接層,得到一個1x10的輸出(使用softmax激勵函數),就將圖像分為10類了。
十二、損失函數
1.交叉熵損失函數
交叉熵損失函數主要用於二分類問題,一般配合Sigmoid函數作為輸出層。
2.Softmax損失函數
Softmax作為輸出層,他的損失函數和交叉熵損失函數很像。交叉熵損失函數實際上的softmax在二分類時的特例。當只有分個分類時,y1 = 1-y0,a1 = 1-a0帶入損失函數可以得到L = -∑[ y0loga0+(1-y0)log(1-a0)]。
3.歐式距離損失函數
主要用於回歸任務。
4.對比損失函數
用於訓練Siamese網絡(暹羅網絡)。用於人臉對比等方面。
5.Triplet損失
三元損失有3個輸入,A,P,N。我們要使A和P之間的距離盡可能小,而A和N之間的距離盡可能大。
十三、訓練網絡的過程
1.首先我們的輸入圖片經過N層的卷積層、池化層進行特征提取。
2.得到的結果矩陣經過flatting,變為向量,然后輸入全連接層進行分類。
3.通過訓練集標簽和每一輪的分類結果進行比對,使用損失函數計算損失值。
4.將損失值通過梯度下降的方式反向傳播,更新全連接層的參數以及卷積層的卷積核參數。
5.不斷迭代,知道損失值變得收斂(變得很小,達到我們的預期),即逼近最優解。