1. 程式人生 > >CNN-常用的幾種卷積神經網路

CNN-常用的幾種卷積神經網路

歷史背景 


VGGNet        2014 ILSVRC比賽中的模型,影象識別略差於GoogLeNet,但是在很多影象轉化學習問題(比如object detection) 上效                       果奇好

LeNet

網路背景

LeNet誕生於1994年,由深度學習三巨頭之一的Yan LeCun提出,他也被稱為卷積神經網路之父。LeNet主要用來進行手寫字元的識別與分類,準確率達到了98%,並在美國的銀行中投入了使用,被用於讀取北美約10%的支票。LeNet奠定了現代卷積神經網路的基礎。

網路結構 

Lenet-5 它的輸入影象為32x32的灰度值影象,後面有三個卷積層,一個全連線層和一個高斯連線層。

  • 第一個卷積層C1包含6個卷積核,卷積核尺寸為5x5,即總共(5x5+1) x6=156個引數,括號中的1代表1個bias
  • 後面是一個2x2的平均池化層S2用來進行降取樣,再之後是一個Sigmoid啟用函式用來進行非線性處理。
  • 第二個卷積層C3 ,同樣卷積核尺寸是5x5,這裡使用了16個卷積核,對應16個Feature Map。需要注意的是,這裡的16個Feature Map不是全部連線到前面的6個Feature Map的輸出的,有些只連線了其中的幾個Feature Map,這樣增加了模型的多樣性。
  • 第二個池化層S4和第一個池化層S2一致,都是2x2的降取樣。
  • 第三個卷積層C5有120個卷積核,卷積大小同樣為5x5,因為輸入影象的大小剛好也是5x5,因此構成了全連線,也可以算作全連線層。
  • F6層是一個全連線層,擁有84個隱含節點,啟用函式為Sigmoid。
  • LeNet-5最後一層由歐式徑向基函式( Euclidean Radial Basis Function )單元組成,它輸出最後的分類結果。

LeNet5當時的特性:

  • 每個卷積層包含三個部分:卷積、池化和非線性啟用函式
  • 使用卷積提取空間特徵
  • 降取樣( Subsample )的平均池化層( Average Pooling )
  • 雙曲正切( Tanh)或S型( Sigmoid )的啟用函式
  • MLP作為最後的分類器
  • 層與層之間的稀疏連線減少計算複雜度

網路特點

  • 每個卷積層包括三部分:卷積、池化和非線性啟用函式(sigmoid啟用函式)
  • 使用卷積提取空間特徵
  • 降取樣層採用平均池化

AlexNet

網路背景

AlexNet由Hinton的學生Alex Krizhevsky於2012年提出,並在當年取得了Imagenet比賽冠軍。AlexNet可以算是LeNet的一種更深更寬的版本,證明了卷積神經網路在複雜模型下的有效性,算是神經網路在低谷期的第一次發聲,確立了深度學習,或者說卷積神經網路在計算機視覺中的統治地位。

網路結構

1689929-063fb60285b6ed42.png-136kB

AlexNet的結構及引數如上圖所示,是8層網路結構(忽略啟用,池化,LRN,和dropout層),有5個卷積層和3個全連線層,第一卷積層使用大的卷積核,大小為11*11,步長為4,第二卷積層使用5*5的卷積核大小,步長為1,剩餘卷積層都是3*3的大小,步長為1。啟用函式使用ReLu(雖然不是他發明,但是他將其發揚光大),池化層使用重疊的最大池化,大小為3*3,步長為2。在全連線層增加了dropout,第一次將其實用化。(參考:AlexNet詳細解釋

Alex Net特性:

  • 成功使用ReLU作為CNN的啟用函式,並驗證其效果在較深的網路超過了Sigmoid,成功解決了Sigmoid 在網路較深時的梯度彌散問題。雖然ReLU啟用函式在很久之前就被提出了,但是直到AlexNet的出現才將其發揚光大。
  • 訓練時使用Dropout隨機忽略一部分 神經元,以避免模型過擬合。Dropout 雖有單獨的論文論述,但是AlexNet將其實用化,通過實踐證實了它的效果。在AlexNet中主要是最後幾個全連線層使用了Dropout。
  • 在CNN中使用重疊的最大池化。此前CNN中普遍使用平均池化,AlexNet全部使用最大池化,避免平均池化的模糊化效果。並且AlexNet中提出讓步長比池化核的尺寸小,這樣池化層的輸出之間會有重疊和覆蓋,提升了特徵的豐富性。
  • 提出了LRN層,對區域性神經元的活動建立競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力。
  • 使用CUDA加速深度卷積網路的訓練,利用GPU強大的平行計算能力,處理神經網路訓練時大量的矩陣運算。AlexNet使用了兩塊GTX 580 GPU進行訓練,單個GTX 580只有3GB視訊記憶體,這限制了可訓練的網路的最大規模。因此作者將AlexNet 分佈在兩個GPU, 上,在每個GPU的視訊記憶體中儲存一 半的神經元的引數。因為GPU之間通訊方便,可以互相訪問視訊記憶體,而不需要通過主機記憶體,所以同時使用多塊GPU也是非常高效的。同時,AlexNet的設計讓GPU之間的通訊只在網路的某些層進行,控制了通訊的效能損耗。
  • 資料增強,隨機地從256x256的原始影象中擷取224x224大小的區域(以及水平翻轉的映象),相當於增加了(256- -224)-x2=2048倍的資料量。如果沒有資料增強,僅靠原始的資料量,引數眾多的CNN會陷入過擬閤中,使用了資料增強後可以大大減輕過擬
    合,提升泛化能力。進行預測時,則是取圖片的四個角加中間共5個位置,並進行左右翻轉,一共獲得10張圖片,對他們進行預測並對10次結果求均值。同時,AlexNet 論文中提到了會對影象的RGB資料進行PCA處理,並對主成分做一個標準差為0.1的高斯擾動,增加一些噪聲,這個Trick可以讓錯誤率再下降1%。

網路特點

  • 使用兩塊GPU並行加速訓練,大大降低了訓練時間
  • 成功使用ReLu作為啟用函式,解決了網路較深時的梯度彌散問題
  • 使用資料增強、dropout和LRN層來防止網路過擬合,增強模型的泛化能力

ZFNet

網路背景

由於AlexNet的提出,大型卷積網路開始變得流行起來,但是人們對於網路究竟為什麼能表現的這麼好,以及怎麼樣能變得更好尚不清楚,因此為了針對上述兩個問題,提出了一個新穎的視覺化技術來一窺中間特徵層的功能以及分類的操作。

網路結構

VggNet

網路背景

VGGNet是牛津大學計算機視覺組和Google DeepMind公司一起研發的深度卷積神經網路,並取得了2014年Imagenet比賽定位專案第一名和分類專案第二名。該網路主要是泛化效能很好,容易遷移到其他的影象識別專案上,可以下載VGGNet訓練好的引數進行很好的初始化權重操作,很多卷積神經網路都是以該網路為基礎,比如FCN,UNet,SegNet等。vgg版本很多,常用的是VGG16,VGG19網路。

網路結構 

747e2d04-e8c2-49ee-8767-a76f3934f13e.png-340.6kB

上圖為VGG16的網路結構,共16層(不包括池化和softmax層),所有的卷積核都使用3*3的大小,池化都使用大小為2*2,步長為2的最大池化,卷積層深度依次為64 -> 128 -> 256 -> 512 ->512。

網路特點 
網路結構和AlexNet有點兒像,不同的地方在於:

  • 主要的區別,一個字:深,兩個字:更深。把網路層數加到了16-19層(不包括池化和softmax層),而AlexNet是8層結構。
  • 將卷積層提升到卷積塊的概念。卷積塊有2~3個卷積層構成,使網路有更大感受野的同時能降低網路引數,同時多次使用ReLu啟用函式有更多的線性變換,學習能力更強(詳細介紹參考:TensorFlow實戰P110頁)。
  • 在訓練時和預測時使用Multi-Scale做資料增強。訓練時將同一張圖片縮放到不同的尺寸,在隨機剪裁到224*224的大小,能夠增加資料量。預測時將同一張圖片縮放到不同尺寸做預測,最後取平均值。

GoogleLeNet

ResNet

網路背景

ResNet(殘差神經網路)由微軟研究院的何凱明等4名華人於2015年提出,成功訓練了152層超級深的卷積神經網路,效果非常突出,而且容易結合到其他網路結構中。在五個主要任務軌跡中都獲得了第一名的成績:

  • ImageNet分類任務:錯誤率3.57%
  • ImageNet檢測任務:超過第二名16%
  • ImageNet定位任務:超過第二名27%
  • COCO檢測任務:超過第二名11%
  • COCO分割任務:超過第二名12%

作為大神級人物,何凱明憑藉Mask R-CNN論文獲得ICCV2017最佳論文,也是他第三次斬獲頂會最佳論文,另外,他參與的另一篇論文:Focal Loss for Dense Object Detection,也被大會評為最佳學生論文。

網路結構 
600x299xResNet.png.pagespeed.ic.M1J-VkbWPB.png-35.6kB 
上圖為殘差神經網路的基本模組(專業術語叫殘差學習單元),輸入為x,輸出為F(x)+x,F(x)代表網路中資料的一系列乘、加操作,假設神經網路最優的擬合結果輸出為H(x)=F(x)+x,那麼神經網路最優的F(x)即為H(x)與x的殘差,通過擬合殘差來提升網路效果。為什麼轉變為擬合殘差就比傳統卷積網路要好呢?因為訓練的時候至少可以保證殘差為0,保證增加殘差學習單元不會降低網路效能,假設一個淺層網路達到了飽和的準確率,後面再加上這個殘差學習單元,起碼誤差不會增加。(參考:ResNet詳細解釋) 
通過不斷堆疊這個基本模組,就可以得到最終的ResNet模型,理論上可以無限堆疊而不改變網路的效能。下圖為一個34層的ResNet網路。
ElFiI.png-97.1kB

網路特點

  • 使得訓練超級深的神經網路成為可能,避免了不斷加深神經網路,準確率達到飽和的現象(後來將層數增加到1000層)
  • 輸入可以直接連線到輸出,使得整個網路只需要學習殘差,簡化學習目標和難度。
  • ResNet是一個推廣性非常好的網路結構,容易和其他網路結合