1. 程式人生 > >卷積神經網路CNN-學習1

卷積神經網路CNN-學習1

卷積神經網路CNN-學習1

 

      十年磨一劍,霜刃未曾試。

 

簡介:卷積神經網路CNN學習。

CNN中文視訊學習連結:卷積神經網路工作原理視訊-中文版

CNN英語原文學習連結:卷積神經網路工作原理視訊-英文版

一、定義

     卷積神經網路(Convolutional Neural Networks)是一種深度學習模型或類似於人工神經網路的多層感知器,常用來分析視覺影象。其創始人Yann LeCun是第一個通過卷積神經網路在MNIST資料集上解決手寫數字問題的人。

二、CNN靈感來源?

     人類的視覺原理如下:從原始訊號攝入開始(瞳孔攝入畫素 Pixels),接著做初步處理(大腦皮層某些細胞發現邊緣和方向),然後抽象(大腦判定,眼前的物體的形狀,是圓形的),然後進一步抽象(大腦進一步判定該物體是隻氣球)。 人腦進行人臉識別示例

對於不同的物體,人類視覺也是通過這樣逐層分級,來進行如下認知的。

 人類視覺識別示例

      在最底層特徵基本上是類似的,就是各種邊緣,越往上,越能提取出此類物體的一些特徵(輪子、眼睛、軀幹等),到最上層,不同的高階特徵最終組合成相應的影象,從而能夠讓人類準確的區分不同的物體。於是便模仿人類大腦的這個特點,構造多層的神經網路,較低層的識別初級的影象特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類。

三、卷積神經網路解決了什麼?

概括來說就是保留影象特徵,引數降維,複雜引數簡單化。

影象畫素RGB

眾所周知,影象是由畫素構成的,每個畫素又是由顏色構成的。現在隨隨便便一張圖片都是 1000×1000 畫素以上的, 每個畫素都有RGB 3個引數來表示顏色資訊。

假如我們處理一張 1000×1000 畫素的圖片,我們就需要處理3百萬個引數!1000×1000×3=3,000,000

這麼大量的資料處理起來是非常消耗資源的,卷積神經網路 – CNN 解決的第一個問題就是「將複雜問題簡化」,把大量引數降維成少量引數,再做處理。

更重要的是:我們在大部分場景下,降維並不會影響結果。比如1000畫素的圖片縮小成200畫素,並不影響肉眼認出來圖片中是一隻貓還是一隻狗,機器也是如此。

圖片數字化的傳統方式

      影象簡單數字化無法保留影象特徵,如上圖假如有圓形是1,沒有圓形是0,那麼圓形的位置不同就會產生完全不同的資料表達。但是從視覺的角度來看,影象的內容(本質)並沒有發生變化,只是位置發生了變化。所以當我們移動影象中的物體,用傳統的方式的得出來的引數會差異很大!這是不符合影象處理的要求的。而 CNN 解決了這個問題,他用類似視覺的方式【模仿人類大腦視覺原理,構造多層的神經網路,較低層的識別初級的影象特徵,若干底層特徵組成更上一層特徵,最終通過多個層級的組合,最終在頂層做出分類】保留了影象的特徵,當影象做翻轉,旋轉或者變換位置時,它也能有效的識別出來是類似的影象。

四、卷積神經網路的架構

 典型的 CNN 由卷積層、池化層、全連線層3個部分構成:

典型CNN組成部分

更為完善的也有分為如下五個層級結構: 1、資料輸入層:Input layer 2、卷積計算層:CONV layer 3、ReLU激勵層:ReLU layer 4、池化層:Pooling layer 5、全連線層:FC layer

五、資料輸入層

資料輸入層主要是對原始圖形資料進行資料預處理,包括去均值、歸一化、PCA/白化。 去均值: 把輸入資料各個維度都中心化為0,如下圖所示,其目的就是把樣本的中心拉回到座標系原點上。 歸一化: 幅度歸一化到同樣的範圍,如下所示,即減少各維度資料取值範圍的差異而帶來的干擾,比如,我們有兩個維度的特徵A和B,A範圍是0到10,而B範圍是0到10000,如果直接使用這兩個特徵是有問題的,好的做法就是歸一化,即A和B的資料都變為0到1的範圍。 PCA/白化: 用PCA降維度,白化是對資料各個特徵軸上的幅度歸一化。 去均值&歸一化效果圖

 去相關與白化效果圖

六、卷積計算層

卷積層有兩個重要的操作,一個是區域性關聯,每個神經元看做一個濾波器filter;另一個是視窗滑動,filter對區域性資料計算。

卷積層的運算過程如下圖,用一個卷積核掃完整張圖片:

卷積層動態運算圖

卷積層的運算過程,可以當做使用一個過濾器(卷積核)來過濾影象的各個小區域,從而得到這些小區域的特徵值,即卷積層通過卷積核的過濾提取出圖片中區域性的特徵。

卷積層運算圖

 

卷積層計算過程動圖

 七、激勵層

激勵層是把卷積層輸出結果做非線性對映。CNN採用的激勵函式一般為ReLU(The Rectified Linear Unit/修正線性單元)。


八、池化層

池化層在連續的卷積層中間,其用於壓縮資料和引數的量,減少過擬合。最重要的作用就是保持特性不變,壓縮影象,降低資料維度。


      池化層用的方法有Max pooling 和 average pooling,而實際用的較多的是Max pooling。Max pooling思想:對於每個2 * 2的視窗選出最大的數作為輸出矩陣的相應元素的值,比如輸入矩陣第一個2 * 2視窗中最大的數是6,那麼輸出矩陣的第一個元素就是6,如此類推,保持特徵不變地降低維度。

Max pooling圖


動態池化圖

我們可以看到動態池化圖中,原始圖片是20×20的,我們對其進行下采樣,取樣視窗為10×10,最終將其下采樣成為一個2×2大小的特徵圖。

九、全連線層

全連線層在卷積神經網路尾部,該層負責輸出結果,是最後一步。其跟傳統的神經網路神經元的連線方式一樣。 全連線層連線方式

 

十、CNN實際應用場景

影象分類/檢索、目標定位檢測、目標分割、人臉識別、骨骼識別等。

CNN人臉識別

Finally

CNN中文視訊學習連結:卷積神經網路工作原理視訊-中文版

CNN英語原文學習連結:卷積神經網路工作原理視訊-英文版

 

 

十年磨一劍

    霜刃未曾試

 

 

 

&n