爲什麼物體識別很困難?
- 圖像分割(Segmentation):實際場景中總是摻雜着其他物體。
- 物體光照(Lighting):像素的值被物體光照所顯著影響。
- 圖像變形(Deformation):物體有時會變形成非仿射(non-affine)的形式。
- 情景支持(Affordances):物體所屬類別常常由他們的使用方式而定義。如各種能坐的物體都可以是算是椅子。
- 維度跳變(dimension-hopping):
具體表現是:改變視角(viewpoint)可能導致機器學習方法失效,如圖1。
圖1
形象的比喻是:網絡用來學習病人的各種體徵,之前用來學習身高的神經元,現在忽然用來學習病人的年齡。
獲得視角不變性的方法
- 使用充足冗餘的不變性特徵(redundant invariant features)。
- 在物體外側畫一個邊框,然後對其進行歸一化(Normalization)。
- 使用複製特徵(replicated features)以及池化(pooling)技巧。
不變特徵方法(The invariant feature approach)
提取一個巨大、冗餘的特徵集合,這個集合對於變換具有不變性。
例如:在紅點周圍的兩根粗平行線。如圖2。
圖2
當時對於識別任務而言,應當儘量避免不屬於物體的部分的特徵。
合理歸一化方法(The judicious normalization approach)
- 在物體周圍放置一個邊框,並定位方向,從而進行歸一化。如圖3。
- 邊框對相當多的變形具有不變性:如平移、旋轉、放大、剪切以及拉伸。
圖3
然而選取邊框非常困難,因爲:
- 分割錯誤、遮擋、反常定位。
- 因此我們需要識別出物體才能更好對邊框進行定位——這變成了雞與蛋的問題。
強制歸一化方法(The brute force normalization approach)
- 訓練識別器的時候用良好裁切,方向豎直向上、貼合邊框的圖片。
- 測試識別器的時候用各種位置和朝向的邊框。
- 這種方法對檢測未經裁切的豎直物體如臉部、門牌號碼這些任務很有效。
用以手寫體識別的卷積神經網絡
複製特徵方法(The replicated feature approach)
- 在不同的位置使用相同的特徵提取器,如圖4。
- 複製特徵的方法顯著降低了自由參數的數量。
圖4
複製特徵方法學習到了什麼?
激活值等變化量
複製特徵的方法並不能使神經元激活值不變,但是能夠使激活值改變量相同,如圖5。
圖5
知識不變量
如果在訓練中某個特徵在一些位置有效,那麼在測試中,特徵提取器應該在各個位置生效。
複製特徵提取器的池化(Pooling)
池化就是把相鄰的像素值均值化,作爲下一層網絡的單一輸入。
這會降低輸入到下一層的輸入特徵數,從而使得下一層實際能學到特徵變多了。
存在的問題:經過若干層的池化,我們損失了 物體的精確位置信息。
這使得利用物體之間的精確空間位置關係來進行識別變得不可行。
LeNet5 模型
Yann LeCun 開發了一個多層卷積神經網絡用於手寫體識別,如圖6:
圖6
如何評價兩個模型的優劣?
McNemar 測試比單純地比較兩個模型的錯誤率要更加可觀。
type model 1 wrong model 1 right model 2 wrong 29 1 model 2 right 11 9959
說明模型2要顯著好於模型1。
type model 1 wrong model 1 right model 2 wrong 15 15 model 2 right 25 9949
並不能說明模型2要好於模型1。
Alex’s Net 的諸多設計
Krizhevsky, Alex, Ilya Sutskever, and Geoffrey E. Hinton. “Imagenet classification with deep convolutional neural networks.” Advances in neural information processing systems. 2012.
- 7層隱含層(不包括池化層)。
- 前面5層是卷積層,後面2層是全連接層。
- 激活函數使用的是ReLU函數。
- 歸一化層用以抑制近鄰神經元的強激活值。
- 隨機裁切和水平鏡像以擴大訓練數據集。
- 丟棄層(Dropout)隨機丟棄一半權重以防止過擬合。
- 雙GPU(GTX 580)矩陣運算。
圖7