深度學習第20講:CNN經典論文研讀之GoogLeNet Inception網絡

2021-02-21 Python愛好者社區

作者:魯偉
一個數據科學踐行者的學習日記。數據挖掘與機器學習,R與Python,理論與實踐並行。
個人公眾號:機器學習實驗室 (微信ID:louwill12)

前文傳送門:

深度學習筆記1:利用numpy從零搭建一個神經網絡

深度學習筆記2:手寫一個單隱層的神經網絡

深度學習筆記3:手動搭建深度神經網絡(DNN)

深度學習筆記4:深度神經網絡的正則化

深度學習筆記5:正則化與dropout

深度學習筆記6:神經網絡優化算法之從SGD到Adam

深度學習筆記7:Tensorflow入門

深度學習筆記8:利用Tensorflow搭建神經網絡

深度學習筆記9:卷積神經網絡(CNN)入門

深度學習筆記10:三維卷積、池化與全連接

深度學習筆記11:利用numpy搭建一個卷積神經網絡

深度學習筆記12:卷積神經網絡的Tensorflow實現

深度學習筆記13:Tensorflow實戰之手寫mnist手寫數字識別

深度學習筆記14:CNN經典論文研讀之Le-Net5及其Tensorflow實現

深度學習筆記15:ubuntu16.04 下深度學習開發環境搭建與配置

深度學習筆記16:CNN經典論文研讀之AlexNet及其Tensorflow實現

深度學習第17講:keras入門和快速上手指南

深度學習第18講:CNN經典論文研讀之VGG網絡及其tensorflow實現

深度學習第19講:CNN經典論文研讀之殘差網絡ResNet及其keras實現

      在 2014 年 ILSVRC 比賽中,VGGNet 獲得了當時的第二名的成績,那麼第一名是誰呢?當時的 VGGNet 就已經很厲害了,難得同屆選手還有更厲害的?很不巧,還真有。當年度取得冠軍的方案網絡由谷歌團隊研發,並且為了致敬 Yann Lecun 的 LeNet-5,將其命名為 GoogLeNet。GoogLeNet 在借鑑 1x1 卷積思想的基礎上,通過濾波器組合構建 Inception 模塊,使得網絡可以走向更深且表達能力更強。從 2014 年獲得當屆 ILSVRC 冠軍的 Inception v1 到現在,光 Inception 網絡就已經更新到 v4 了,而後基於 Inception 模塊和其他網絡結構的組合而成的網絡就更多了,比如說 Inception Resnet。

1x1 卷積

      通過前面的學習大家都知道卷積操作是卷積神經網絡的核心操作了,在之前我們通常會用到各種尺寸的卷積核,比如說 3x3 卷積、5x5 卷積、7x7 卷積等等。但今天我們需要提一下 1x1 卷積。這似乎有些蠢,直觀上理解 1x1 卷積好像沒什麼用,就是簡單的數字相乘而已,對於通道數較小的圖片確實如此,但如果我們考慮一個 6x6x32 的圖片呢?

      考慮用一個 1x1x32 的卷積核對 6x6x32 的圖片進行卷積。如下圖所示,具體而言就是計算左圖中 32 個數字和卷積核中 32 個數字對應元素乘積之和,然後進行激活操作。

      濾波器中的通道數 32 可以這麼理解:一個神經元的輸入是 32 個數字,對輸入圖像做一個切片的話,即相同高度和寬度上某一切片上的 32 個數字具有不同的通道數,乘以濾波器的 32 個數字權重,然後應用激活函數得到 1x1 卷積結果。所以從這個角度看我們可以將 1x1 卷積理解為對這個不同通道上的 32 個數字應用一個全連接層,這個全連接層輸入 32 個數字,輸入為 6x6x濾波器個數。

      所以 1x1 卷積的一個重要作用就是縮減通道數,對於一個 28x28x192 的輸入,我們如何將其壓縮成 28x28x32 的大小呢?利用 1x1 卷積的話就是使用 32 個大小為 1x1x192 的卷積核進行卷積,卷積結果大小為 28x28x32。這樣就起到了壓縮通道的作用了,這種壓縮或保持通道數不變的方法在接下來我們要講的 GoogLeNet 中的 Inception 模塊中很有用,我們接著往下看。

Inception 模塊

      通常在構建卷積結構時,我們需要考慮是使用 1x1 卷積、3x3 卷積還是 5x5 卷積及其是否需要添加池化操作。而 GoogLeNet 的 Inception 模塊就是幫你決定採用什麼樣的卷積結構。簡單而言,Inception 模塊就是分別採用了 1x1 卷積、3x3 卷積和 5x5 卷積構建了一個卷積組合然後輸出也是一個卷積組合後的輸出。如下圖所示:


       對於 28x28x192 的像素輸入,我們分別採用 1x1 卷積、3x3 卷積和 5x5 卷積以及最大池化四個濾波器對輸入進行操作,將對應的輸出進行堆積,即 32+32+128+64=256,最後的輸出大小為 28x28x256。所以總的而言,Inception 網絡的基本思想就是不需要人為的去決定使用哪個卷積結構或者池化,而是由網絡自己決定這些參數,決定有哪些濾波器組合。

      Inception 模塊有兩種形式,一種是原始模塊,另一種是帶有維度削減的模塊。其結構如下圖所示:

      第二個版本的 Inception 模塊採用了大量的 1x1 卷積,目的就是起到通道壓縮作用。

Inception 網絡

     構建好 Inception 模塊後,將多個類似結構的Inception模塊組合起來便是一個Inception 網絡,類似下圖:

      一個完整的 Inception 網絡結構如下所示:

      以上便是 Inception 網絡的基本構造。這是當年獲得冠軍的 Inception V1 版本,可以看到模型層數很深了,網絡更深提取各種層級的特徵更加充分。除此之外,Inception V1 在最後兩個全連接層中採取了一個全局平均池化層來代替全連接層。因為全連接層的參數數量龐大,通常是導致過擬合的直接原因,這裡用全局平均池化來代替,可以很大程度上緩解過擬合的情況。完整的 Inception V1 的結構信息如下表所示:

      至於 Inception V1 的效果,當然是收割各種冠軍和頭名啦。

      Inception V1 之後,又在其基礎上出現了 V2 V3 和 V4 版本以及 Xception,總之以 Inception 網絡為主體的 GoogLeNet 不斷優化和改進,稱為深度卷積網絡的一大重要分支。至於如何使用 Tensorflow 實現 Inception V1網絡,GitHub 上有眾多開源,筆者就不在此寫了。

  註:本深度學習筆記系作者學習 Andrew NG 的 deeplearningai 五門課程所記筆 記,其中代碼為每門課的課後assignments作業整理而成。

參考資料:

https://www.deeplearning.ai/

Szegedy C, Liu W, Jia Y, et al. Going deeper with convolutions[J]. 2014:1-9.

作者最新課程,限時優惠中

掃碼點擊閱讀原文了解詳情&報名

相關焦點

  • 深度學習第25講:目標檢測算法經典論文研讀之R-CNN
    本文就將 R-CNN 的論文拿出來作為目標檢測的經典論文進行研讀和分析。       論文的摘要給出了 R-CNN 的兩點關鍵的貢獻:一是提出生成和使用候選框來對目標物體進行定位和分割的方法,二是在缺乏足夠的打標數據的情形下使用有監督的預訓練(即遷移學習)方法來進行特徵提取。
  • 【深度學習系列】用PaddlePaddle和Tensorflow實現經典CNN網絡GoogLeNet
    點擊上圖,立即開啟AI急速修煉作者:Charlotte    高級算法工程師 ,博客專家;擅長用通俗易懂的方式講解深度學習和機器學習算法,熟悉Tensorflow,PaddlePaddle等深度學習框架,負責過多個機器學習落地項目,如垃圾評論自動過濾,用戶分級精準營銷,分布式深度學習平臺搭建等,都取了的不錯的效果。
  • 深度學習第19講:CNN經典論文研讀之殘差網絡ResNet及其keras實現
    作者:魯偉一個數據科學踐行者的學習日記。
  • 深度學習第31講:目標檢測算法經典論文研讀之 yolo v2/yolo 9000
    在論文中,作者在 yolo v1 的基礎之上提出了多條改進方案並通過了實驗驗證使得 yolo 網絡的檢測效果更好、更快和更強。這便是 yolo v2 檢測網絡。      那為什麼論文的題目叫 yolo 9000 呢?
  • 用PaddlePaddle 和 Tensorflow 實現經典 CNN 網絡 GoogLeNet
    前面講了 LeNet、AlexNet 和 Vgg,這周來講講 GoogLeNet。(本系列所有代碼均在 github:https://github.com/huxiaoman7/PaddlePaddle_code)關於深度網絡的一些思考  在本系列最開始的幾篇文章我們講到了卷積神經網絡,設計的網絡結構也非常簡單,屬於淺層神經網絡,如三層的卷積神經網絡等,但是在層數比較少的時候,有時候效果往往並沒有那麼好,在實驗過程中發現,當我們嘗試增加網絡的層數
  • 從零開始深度學習第14講:CNN經典論文研讀之Le-Net5及其TensorFlow實現
    從本次筆記開始,筆者在深度學習筆記中會不定期的對 CNN 發展過程中的經典論文進行研讀並推送研讀筆記。今天筆者就和大家一起學習卷積神經網絡和深度學習發展歷史上具有奠基性的經典論文之一的關於 LeNet-5 網絡一文。
  • 【深度學習系列】用PaddlePaddle和Tensorflow實現GoogLeNet InceptionV2/V3/V4
    博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理
  • 深度學習筆記14:CNN經典論文研讀之Le-Net5及其Tensorflow實現
    作者:魯偉一個數據科學踐行者的學習日記。
  • 深度學習筆記 | 第7講:CNN目標檢測發家史之從R-CNN到yolo
    又到了每周一狗熊會的深度學習時間了。在上一期的筆記分享中,小編和大家回歸了卷積神經網絡在圖像分類和識別方面的發展歷程,和大家梳理了經典的卷積網絡結構,了解了卷積網絡的發展脈絡,我們從上個世紀經典的 LeNet-5 網絡一直介紹到近年來的 ResNet。
  • 深度學習的學習歷程
    alexnet、vgg、googlenet、resnet等網絡就像樂高一樣,把這些模塊當積木一樣組合起來,好像也沒啥特別的。又好像什麼都不懂,學會這些模塊的公式就算會深度學習了嗎?整個深度學習的學習周期是怎樣的,我下一步應該幹啥?這些模塊看起來平平無奇,為什麼組合在一起就能發揮這麼大威力?為什麼drop out能起到正則作用?L1正則和L2正則有什麼區別?
  • 我的深度學習筆記——GoogLeNet[1]的前世今生
    趁國慶把之前學習的一些東西寫寫,算是一個總結。本文的內容主要是《Going deeper with convolutions》[2]和《Network In Network》論文的讀後感,以及閱讀其他一些資料的感悟,一口氣寫了差不多4000字的文章,感覺累了也清晰了。
  • 深度學習第24講:計算機視覺之目標檢測算法綜述
    在 2012 年深度學習正式介入計算機視覺目標檢測任務之前,傳統的目標檢測算法一直是以滑動窗口卷積等較為傳統的方式進行區域選擇、特徵提取和分類回歸等步驟,例如在深度學習興起之前目標檢測領域較為優秀的可變形的組件模型(DPM)方法等。
  • 深度學習筆記16:CNN經典論文研讀之AlexNet及其Tensorflow實現
    2012年,深度學習三巨頭之一、具有神經網絡之父之稱的 Geoffrey Hinton 的學生 Alex Krizhevsky 率先提出了 AlexNet,並在當年度的 ILSVRC(ImageNet大規模視覺挑戰賽)以顯著的優勢獲得當屆冠軍,top-5 的錯誤率降至了 16.4%,相比於第二名 26.2% 的錯誤率有了極大的提升。
  • 經典CNN網絡(Lenet、Alexnet、GooleNet、VGG、ResNet、DenseNet)
    每一個group對應N/M個channel,與之獨立連接。然後各個group卷積完成後將輸出疊在一起(concatenate),作為這一層的輸出channel。局部響應歸一化LRN:利用前後幾層(對應位置的點)對中間這一層做一下平滑約束,增加泛化能力,公式為:
  • DL經典論文系列(二) AlexNet、VGG、GoogLeNet/Inception、ResNet
    對於給定的感受野(與輸出有關的輸入圖片的局部大小),採用堆積的小卷積核是優於採用大的卷積核,因為多層非線性層可以增加網絡深度來保證學習更複雜的模式,而且代價還比較小(參數更少)。簡單來說,在VGG中,使用了3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果。
  • 從零開始深度學習第17講:keras入門及快速上手指南
    深度學習到這個進度,筆者覺得有必要開始對一些優秀的深度學習框架進行介紹了。      keras 是一款使用純 python 編寫的神經網絡 API,使用 keras 能夠快速實現你的深度學習方案,所以 keras 有著為快速試驗而生的美稱。keras 以 Tensorflow、Theano、CNTK 為後端,意思就是 keras 的底層計算都是以以上這些框架為基礎的,這使得 keras能夠專注於快速搭建起神經網絡模型。
  • 深度學習三人行(第12期)----CNN經典網絡之ResNet
    上一期,我們一起學習了深度學習卷積神經網絡中的經典網絡之GoogLeNet,深度學習三人行(第11期)----CNN經典網絡之GoogLeNet
  • 深度學習第17講:keras入門和快速上手指南
    作者:魯偉一個數據科學踐行者的學習日記。
  • 深度學習三人行(第10期)----CNN經典網絡之LeNet-5和AlexNet
    上一期,我們一起學習了深度學習卷積神經網絡中的代碼實現,內存計算以及池化層的原理等,深度學習三人行(第9期)----卷積神經網絡實戰進階