人類的視覺原理
深度學習的許多研究成果,離不開對大腦認知原理的研究,尤其是視覺原理的研究。
1981年的諾貝爾醫學獎,頒發給了David Hubel(出生于加拿大的美國神經生物學家)和TorstenWiesel,以及Roger Sperry。前兩位的主要貢獻,是“發現了視覺系統的信息處理”,可視皮層是分級的。
人類的視覺原理如下:從原始信號攝入開始(瞳孔攝入像素Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然后抽象(大腦判定,眼前的物體的形狀,是圓形的),然后進一步抽象(大腦進一步判定該物體是只氣球)。下面是人腦進行人臉識別的一個示例:
對于不同的物體,人類視覺也是通過這樣逐層分級,來進行認知的:
我們可以看到,在最底層特征基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特征(輪子、眼睛、軀干等),到最上層,不同的高級特征最終組合成相應的圖像,從而能夠讓人類準確的區分不同的物體。
所以我們可以很自然的想到:可以不可以模仿人類大腦的這個特點,構造多層的神經網絡,較低層的識別初級的圖像特征,若干底層特征組成更上一層特征,最終通過多個層級的組合,最終在頂層做出分類呢?答案是肯定的,這也是許多深度學習算法的靈感來源,也包括卷積神經網絡(CNN)算法。
圖像的表示
實質上,每張圖片都可以表示為由像素值組成的矩陣。
通道(channel)是一個傳統術語,指圖像的一個特定成分。標準數碼相機拍攝的照片具有三個通道:紅、綠和藍。你可以將它們想象為三個堆疊在一起的二維矩陣(每種顏色一個),每個矩陣的像素值都在0到255之間。
而灰度圖像只有一個通道,即一個代表圖像的二維矩陣。矩陣中每個像素值的范圍在0到255之間:0表示黑色,255表示白色。
卷積處理灰度圖片
如果想讓計算機搞清楚圖像上有什么物體,我們可以做的事情是檢測圖像的垂直邊緣和水平邊緣,如下圖所示:
我們可以用一個66的灰度圖像來打比方,構造一個33的矩陣,在卷積神經網絡中通常稱之為過濾器(filter
),對這個6*6的圖像進行卷積運算,以左上角的-5計算為例:
31 + 00 + 1-1 + 11 + 50 + 8-1 + 21 + 70 + 2*-1 = -5
其它的以此類推,讓過濾器在圖像上逐步滑動,對整個圖像進行卷積計算得到一幅4*4的圖像。(灰色圖片是單通道顏色值)
為什么這種卷積計算可以得到圖像的邊緣,下圖0表示圖像暗色區域,10為圖像比較亮的區域,同樣用一個3*3過濾器,對圖像進行卷積,得到的圖像中間亮,兩邊暗,亮色區域就對應圖像邊緣。
通過以下的水平過濾器和垂直過濾器,可以實現圖像水平和垂直邊緣檢測。
以下列出了一些常用的過濾器,對于不同的過濾器也有著不同的爭論,在卷積神經網絡中把這些過濾器當成我們要學習的參數,卷積神經網絡訓練的目標就是去理解過濾器的參數。
卷積前填充圖片
在上部分中,通過一個33的過濾器來對66的圖像進行卷積,得到了一幅44的圖像,假設輸出圖像大小為nn與過濾器大小為f*f,輸出圖像大小則為:
這樣做卷積運算的缺點是,卷積圖像的大小會不斷縮小,另外圖像的左上角的元素只被一個輸出所使用,所以在圖像邊緣的像素在輸出中采用較少,也就意味著我們丟掉了很多圖像邊緣的信息,為了解決這兩個問題,就引入了填充(padding)操作,也就是在圖像卷積操作之前,沿著圖像邊緣用0進行圖像填充。對于3*3的過濾器,我們填充寬度為1時,就可以保證輸出圖像和輸入圖像一樣大。
填充(padding)的兩種模式:
Valid:沒有填充,輸入圖像nn,過濾器ff,輸出圖像大小為:
Same:有填充,輸出圖像和輸入圖像一樣大
卷積圖像的步長
卷積步長是指過濾器在圖像上滑動的距離,前兩部分步長都默認為1,如果卷積步長為2,卷積運算過程如下。
加入步長(stride)后卷積圖像大小的通用計算公式為:
輸入圖像:nn,過濾器:ff步長:s,填充:p
輸出圖像大小為:
??表示向下取整以輸入圖像77,過濾器33,步長為2,填充(padding)模式為沒有填充(valid)時為例,輸出圖像大小為:
卷積處理彩色圖片
以上講述的卷積都是灰度圖像的,如果想要在RGB圖像上進行卷積,過濾器的大小不再是33而是333,最后的3對應為通道數(channels),卷積生成圖像中每個像素值為333過濾器對應位置和圖像對應位置相乘累加,過濾器依次在RGB圖像上滑動,最終生成圖像大小為44。
另外一個問題是,如果我們不僅僅在圖像中檢測一種類型的特征,而是要同時檢測垂直邊緣、水平邊緣、45度邊緣等等,也就是多個過濾器的問題。如果有兩個過濾器,最終生成圖像為442的立方體,這里的2來源于我們采用了兩個過濾器。如果有10個過濾器那么輸出圖像就是4410的立方體。
單層卷積網絡
通過上一部分的講述,圖像通過兩個過濾器得到了兩個44的矩陣,在兩個矩陣上分別加入偏差b1和b2,然后對加入偏差的矩陣做非線性的修正線性激活函數(Relu)變換,得到一個新的44矩陣,這就是單層卷積網絡的完整計算過程。用公式表示:
其中輸入圖像為a[0],過濾器用w[1]表示,對圖像進行線性變化并加入偏差得到矩陣z[1],a[1]是應用修正線性激活函數(Relu)激活后的結果。
如果有10個過濾器參數個數有多少個呢? 每個過濾器都有333+1=28個參數,333為過濾器大小,1是偏差系數,10個過濾器參數個數就是28*10=280個。不論輸入圖像大小參數個數是不會發生改變的。
描述卷積神經網絡的一些符號標識:
簡單卷積網絡
輸入圖像:39393,符號表示:
第1層超參數:
第1層輸出圖像:373710,符號表示:
第2層超參數:
第2層輸出圖像:171720,符號表示:
第3層超參數:
第3層輸出圖像:7740,符號表示:
將第三層的輸出展開成1960個元素,然后將其輸出到二分類模型(logistic)或多分類模型(softmax)來決定是判斷圖片中有沒有貓,還是想識別圖像中不同的對象。
卷積神經網絡層有三種類型:
卷積層(convolution,conv)
池化層(pooling,pool)
全連接層(Fully connected,FC)
池化層網絡
最大池化(Max pooling)的思想很簡單,以下圖為例,把44的圖像分割成4個不同的區域,然后輸出每個區域的最大值,這就是最大池化所做的事情。其實這里我們選擇了22的過濾器,步長為2。在一幅真正的圖像中提取最大值可能意味著提取了某些特定特征,比如垂直邊緣、一只眼睛等等。
以下是一個過濾器大小為3*3,步長為1的池化過程,具體計算和上面相同,最大池化中輸出圖像的大小計算方式和卷積網絡中計算方法一致,如果有多個通道需要做池化操作,那么就分通道計算池化操作。
平均池化和最大池化唯一的不同是,它計算的是區域內的平均值而最大池化計算的是最大值。在日常應用使用最多的還是最大池化。
池化的超參數:步長、過濾器大小、池化類型(最大池化或平均池化)。
全連接層
在常見的卷積神經網絡的最后往往會出現一兩層全連接層,全連接一般會把卷積輸出的二維特征圖(feature map)轉化成一維(N*1)的一個向量。或者說就是一排神經元,因為這一層是每一個單元都和前一層的每一個單元相連接,所以稱之為“全連接”。
在經過數次卷積和池化之后,我們最后會先將多維的數據進行“扁平化”,也就是把7740的卷積層壓縮成長度為7740=1960的一維數組,然后再與全連接(FC)層連接,這之后就跟普通的神經網絡無異了。
假設這里每次移動的步長設置為1(步長可以自己設置),每次相乘后將像素點索引移動一位,權重矩陣與另外一組像素相乘。以此類推,直到整個像素矩陣都與權重矩陣進行了相乘運算。整個過程與卷積運算相同,組的權重與圖像矩陣之間進行卷積運算,這也是卷積神經網絡(CNN)有“卷積”一詞的原因。
全連接層之前的卷積層、池化層作用是提取特征,全連接層的作用是分類,具體是怎么分類的呢?就是用到了數學中的概率統計等算法,這里就不深入說明了。假設,我們現在的任務是去區別一張圖片是不是貓。
再假設,這個神經網絡模型已經訓練完了,全連接層已經知道貓的特征。
當我們得到以上特征,我們就可以判斷這張圖片是貓了,因為全連接層的作用主要就是實現分類(Classification),從下圖,我們可以看出紅色的神經元表示這個特征被找到了(激活了),同一層的其他神經元,要么貓的特征不明顯,要么沒找到。
當我們把這些找到的特征組合在一起,發現最符合要求的是貓,那么我們可以認為這是貓了,貓頭有下面這些特征。
于是我們下一步的任務就是把貓頭的這些特征找到,比如眼睛、耳朵。
當我們找到這些特征,神經元就被激活了(紅色圓圈),這細節特征又是怎么來的呢?就是從前面的卷積層、池化層來的。
卷積神經網絡
以下是一個完整的卷積神經網絡,用于手寫字識別,這并不是一個LeNet-5網絡,但是設計需求來自于LeNet-5。
LeNet-5卷積神經網絡模型,是Yann LeCun在1998年設計的用于手寫數字識別的卷積神經網絡,當年美國大多數銀行就是用它來識別支票上面的手寫數字的,它是早期卷積神經網絡中最有代表性的實驗系統之一。
網絡各層參數個數表:
上面的數表中,CONV表示卷積層,POOL表示池化層,FC表示全連接層。
參考內容
https://www.cnblogs.com/kex1n/p/9083024.html
https://blog.csdn.net/ice_actor/article/details/78648780
https://blog.csdn.net/m0_37407756/article/details/80904580
http://www.dataguru.cn/article-13436-1.html
http://www.lxweimin.com/p/c0215d26d20a
https://blog.csdn.net/weixin_38208741/article/details/80615580
https://www.cnblogs.com/alexcai/p/5506806.html