目標檢測(一):LeNet-5

紅色石頭發表於2021-12-07

大家好,我是紅色石頭!

說起深度學習目標檢測演算法,就不得不提 LeNet- 5 網路。LeNet-5由LeCun等人提出於1998年提出,是一種用於手寫體字元識別的非常高效的卷積神經網路。出自論文《Gradient-Based Learning Applied to Document Recognition》

論文傳送門:

http://yann.lecun.com/exdb/publis/pdf/lecun-98.pdf

一、網路結構

LetNet-5是一個較簡單的卷積神經網路。上圖顯示了其結構:輸入的二維影像(單通道),先經過兩次卷積層到池化層,再經過全連線層,最後為輸出層。整體上是:input layer->convulational layer->pooling layer->activation function->convulational layer->pooling layer->activation function->convulational layer->fully connect layer->fully connect layer->output layer.

整個 LeNet-5 網路總共包括7層(不含輸入層),分別是:C1、S2、C3、S4、C5、F6、OUTPUT。

幾個引數:

層編號特點:

  • 英文字母+數字
  • 英文字母代表以下一種:C→卷積層、S→下采樣層(池化)、F→全連線層

  • 數字代表當前是第幾層,而非第幾卷積層(池化層.ec)

術語解釋:

  • 引數→權重w與偏置b
  • 連線數→連線數

  • 引數計算:每個卷積核對應於一個偏置b,卷積核的大小對應於權重w的個數(特別注意通道數)

二、輸入層(Input Layer)

輸入層(INPUT)是 32×32 畫素的影像,注意通道數為1。

三、C1 層

C1 層是卷積層,使用 6 個 5×5 大小的卷積核,padding=0,stride=1進行卷積,得到 6 個 28×28 大小的特徵圖:32-5+1=28。

引數個數:(55+1)6=156,其中5*5為卷積核的25個引數w,1為偏置項b。

連線數:1562828=122304,其中156為單次卷積過程連線數,2828為輸出特徵層,每一個畫素都由前面卷積得到,即總共經歷2828次卷積。

四、S2 層

S2 層是降取樣層,使用 6 個 2×2 大小的卷積核進行池化,padding=0,stride=2,得到 6 個 14×14 大小的特徵圖:28/2=14。

S2 層其實相當於降取樣層+啟用層。先是降取樣,然後啟用函式 sigmoid 非線性輸出。先對 C1 層 2×2 的視野求和,然後進入啟用函式,即:

引數個數:(1+1)6=12,其中第一個 1 為池化對應的 22 感受野中最大的那個數的權重 w,第二個 1 為偏置 b。

連線數:(22+1)61414= 5880,雖然只選取 22 感受野之和,但也存在 22 的連線數,1 為偏置項的連線,1414 為輸出特徵層,每一個畫素都由前面卷積得到,即總共經歷 1414 次卷積。

五、C3 層

C3 層是卷積層,使用 16 個 5×5xn 大小的卷積核,padding=0,stride=1 進行卷積,得到 16 個 10×10 大小的特徵圖:14-5+1=10。

16 個卷積核並不是都與 S2 的 6 個通道層進行卷積操作,如下圖所示,C3 的前六個特徵圖(0,1,2,3,4,5)由 S2 的相鄰三個特徵圖作為輸入,對應的卷積核尺寸為:5x5x3;接下來的 6 個特徵圖(6,7,8,9,10,11)由 S2 的相鄰四個特徵圖作為輸入對應的卷積核尺寸為:5x5x4;接下來的 3 個特徵圖(12,13,14)號特徵圖由 S2 間斷的四個特徵圖作為輸入對應的卷積核尺寸為:5x5x4;最後的 15 號特徵圖由 S2 全部(6 個)特徵圖作為輸入,對應的卷積核尺寸為:5x5x6。

值得注意的是,卷積核是 5×5 且具有 3 個通道,每個通道各不相同,這也是下面計算時 5*5 後面還要乘以3,4,6的原因。這是多通道卷積的計算方法。

引數個數:(553+1)6+(554+1)6+(554+1)3+(556+1)1=1516。

連線數:15161010 = 151600。1010為輸出特徵層,每一個畫素都由前面卷積得到,即總共經歷1010次卷積。

六、S4 層

S4 層與 S2 一樣也是降取樣層,使用 16 個 2×2 大小的卷積核進行池化,padding=0,stride=2,得到 16 個 5×5 大小的特徵圖:10/2=5。

引數個數:(1+1)*16=32。

連線數:(22+1)1655= 2000。

七、C5 層

C5 層是卷積層,使用 120 個 5×5×16 大小的卷積核,padding=0,stride=1進行卷積,得到 120 個 1×1 大小的特徵圖:5-5+1=1。即相當於 120 個神經元的全連線層。

值得注意的是,與C3層不同,這裡120個卷積核都與S4的16個通道層進行卷積操作。

引數個數:(5516+1)*120=48120。

連線數:4812011=48120。

八、F6層

F6 是全連線層,共有 84 個神經元,與 C5 層進行全連線,即每個神經元都與 C5 層的 120 個特徵圖相連。計算輸入向量和權重向量之間的點積,再加上一個偏置,結果通過 sigmoid 函式輸出。

F6 層有 84 個節點,對應於一個 7×12 的位元圖,-1 表示白色,1 表示黑色,這樣每個符號的位元圖的黑白色就對應於一個編碼。該層的訓練引數和連線數是(120 + 1)x84=10164。ASCII 編碼圖如下:

引數個數:(120+1)*84=10164。

連線數:(120+1)*84=10164。

九、OUTPUT層

最後的 Output 層也是全連線層,是 Gaussian Connections,採用了 RBF 函式(即徑向歐式距離函式),計算輸入向量和引數向量之間的歐式距離(目前已經被Softmax 取代)。

Output 層共有 10 個節點,分別代表數字 0 到 9。假設x是上一層的輸入,y 是 RBF的輸出,則 RBF 輸出的計算方式是:

上式中 i 取值從 0 到 9,j 取值從 0 到 7*12-1,w 為引數。RBF 輸出的值越接近於 0,則越接近於 i,即越接近於 i 的 ASCII 編碼圖,表示當前網路輸入的識別結果是字元 i。

下圖是數字 3 的識別過程:

引數個數:84*10=840。

連線數:84*10=840。

十、視覺化網址

http://yann.lecun.com/exdb/lenet/a35.html

http://scs.ryerson.ca/~aharley/vis/conv/flat.html

http://scs.ryerson.ca/~aharley/vis/conv/

總結

LeNet-5 與現在通用的卷積神經網路在某些細節結構上還是有差異的,例如 LeNet-5 採用的啟用函式是 sigmoid,而目前影像一般用 tanh,relu,leakly relu 較多;LeNet-5 池化層處理與現在也不同;多分類最後的輸出層一般用 softmax,與 LeNet-5 不太相同。

LeNet-5 是一種用於手寫體字元識別的非常高效的卷積神經網路。CNN 能夠得出原始影像的有效表徵,這使得 CNN 能夠直接從原始畫素中,經過極少的預處理,識別視覺上面的規律。然而,由於當時缺乏大規模訓練資料,計算機的計算能力也跟不上,LeNet-5 對於複雜問題的處理結果並不理想。

2006 年起,人們設計了很多方法,想要克服難以訓練深度 CNN 的困難。其中,最著名的是 Krizhevsky et al.提出了一個經典的 CNN 結構,並在影像識別任務上取得了重大突破。其方法的整體框架叫做 AlexNet,與 LeNet-5 類似,但要更加深一些。

最後,紅色石頭給大家準備好了 LeCun 的這篇 LeNet-5 的 46 頁論文《Gradient-Based Learning Applied to Document Recognition》,需要的可以在本公眾號後臺回覆【lenet5】,獲取!

下一篇我將使用 PyTorch 復現LeNet-5 網路,並介紹完整的 demo 例項,下期見!


相關文章