Inception系列經典卷積神經網絡設計思想回顧

2021-02-13 人工智慧技術乾貨
還沒關注?快來點這裡!?相對來說,Inception系列模型沒有ResNet系列和MobileNet系列那般經常出現在各大科研論文的開原始碼上,在我接觸的開原始碼裡,是比較少的。但是,它們都是非常優秀的經典卷積神經網絡,在當年的ILSVRC比賽中都取得了較好的成績,其思想至今還影響著模型算法發展的方向,特別是Inception V2裡提出來的batch normalization批歸一化經久不衰。因此,溫故而知新,了解和借鑑Inception系列經典神經網絡模型的設計思想對我們非常有意義,本文,將帶大家一起回顧從Inception V1到Inception V4的設計思想。

論文:

《Going deeper with convolutions》

https://arxiv.org/pdf/1409.4842.pdf

https://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v1.pyInception V1卷積神經網絡提出於2014年,原名GoogLeNet,作者說是為了向開創性提出LeNet的Yann LeCuns致敬,在當年的ILSVRC比賽裡其以Top-5錯誤率為6.67%的優異成績在分類項目中遙遙領先於同年提出的VGGNet,它的特點是控制了參數量和計算量的同時,獲得了非常好的分類性能。

Inception V1有22層深,比VGGNet的19層更深但參數更少,表達能力更強;

借鑑Network In Network的思想,去除了網絡最後一層全連接層,改為全局平均池化層,大大減少了參數量,加快訓練速度的同時也達到了減輕過擬合的作用;同樣借鑑了Network In Network的思想,精心設計了Inception module,多分支多尺度進行通道堆疊,提高了網絡對不同尺度的適應性;在訓練時,增加了輔助分類器(auxiliary classifier),將中間某一層的輸出用於分類,並按一個較少的權重(0.3)加到最終分類結果中,這樣在增加網絡反向傳播梯度信號的同時,也起到了正則化和輔助監督的作用。

其中,左邊是基本的Inception module,包含四個分支:第一個分支對輸入進行1x1的卷積,可以起到跨通道融合信息、提高網絡表達能力及升維和降維的作用;第二個分支則是一個普通的3x3卷積操作;第三個分支用了5x5的卷積操作;第四個分支用了一個3x3的最大池化操作。而右邊的模塊則是改進了的Inception module,其是在標準Inception module的基礎上,於3x3和5x5卷積分支前面和3x3的最大池化層分支後面添加1x1的卷積,目的均是用於降維和減少參數量,以較少的計算量代價達到了增加一層特徵變換和非線性化的目的。從以上Inception module的結構圖,我們可以看到,其每個分支採用的操作都是不一樣的,包含了較多的尺度變換,但最終都會將各分支的結果匯總到concat操作內進行通道堆疊,因此,必須保證各分支的輸出feature map寬和高一致,通常是各分支採用相同的stride並且以same padding的方式進行操作。《Batch Normalization: Accelerating Deep Network Training byReducing Internal Covariate Shift》
https://arxiv.org/pdf/1502.03167.pdf《Rethinking the Inception Architecture for Computer Vision》https://arxiv.org/pdf/1512.00567.pdfhttps://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v2.pyInception V2與Inception V3一同提出,有的人認為單獨提出Batch Normalization思想的應該叫BN-Inception,但很多書籍都把他們一起合稱為Inception V2,其主要是借鑑了VGGNet,用兩個3x3的卷積代替5x5的大卷積,Inception module改進為如下圖所示:

該結構比前代可以降低參數量並減輕過擬合。Inception V2更為著名的是提出了Batch Normalization(簡稱BN,其運行公式如下圖)。

BN主要是在訓練時對每一批次的每一通道都進行歸一化操作,學習mean和variance兩個參數,確保數據分布為N(0,1)正態分布,使得模型不需要頻繁的學習適應每一層的數據變化,從而可以在大學習率的情況下,加快訓練速度和收斂速度。
除此之外,Inception V2去除了局部響應歸一化LPR(Local Response Normalization),去除了淺層的輔助監督分類器,只保留了中層的輔助監督分類器,並且各Inception module之間取消了pooling層的銜接,更多的用stride為2來進行下採樣,部分Inception module則改為使用average pooling。Inception V2在訓練中則去除了Dropout和減輕L2正則(主要是BN已起到正則化的作用),減少數據增強儘量保有數據原貌,但對數據更徹底的進行洗牌打亂,儘可能發揮BN的功能作用。
通過以上方式的改進,在同等Acc情況下Inception V2比Inception V1訓練快了約14倍,並且取得了不凡的成效,Inception V2在ILSVRC分類項目中取得了4.8%的top-5錯誤率。


《Rethinking the Inception Architecture for Computer Vision》https://arxiv.org/pdf/1512.00567.pdfhttps://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v3.py
Inception V3比Inception V2更加激進,它不是將一個大的卷積拆分為幾個小的二維卷積(5x5拆分為兩個3x3),而是直接引入了Factorization into small convolution的思想,即將一個較大的二維卷積拆分為兩個較小的一維卷積,比如將3x3拆分為1x3卷積和3x1卷積,如下圖所示:

從兩維卷積到一維卷積,一方面減少了參數量,起到加速訓練測試速度和減輕過擬合的作用,另一方面可增加多一個非線性激活層,起到擴展非線性變換的作用。作者在論文裡有指出,這種非對稱拆分卷積結構,可以讓模型學習到更多更豐富的空間特徵,增加模型特徵多樣性,其效果更加突出!
除此之外,Inception V3優化了Inception module結構,提出了如下兩種新的Inception module:

這些Inception module只在網絡的後半部出現,淺層還是使用了普通的卷基層,確保網絡可以有效提取更多的特徵。Inception V3與Inception V2在同一篇論文裡提出,它們的網絡結構和訓練方法還是有不少相同之處的,感興趣的朋友可以詳細研究官方的實現代碼來比較差異。

《Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning》
https://arxiv.org/pdf/1602.07261.pdfhttps://github.com/tensorflow/models/blob/master/research/slim/nets/inception_v4.pyhttps://github.com/tensorflow/models/blob/master/research/slim/nets/inception_resnet_v2.py

Inception V4、Inception_ResNet_V1及Inception_ResNet_V2在同一篇論文裡提出,Inception V4沿用了其前幾代的網絡設計思想但其網絡更加複雜,而後兩者則是結合了ResNet Residual Networks ,據說是為了與ResNet撕逼,為了證明Residual Networks只是加快了收斂速度,其中Inception_ResNet_V1就是用於與Inception V3進行比較的,但是Inception_ResNet_V1並沒有官方代碼。

Inception V4使用了更加複雜的Inception module,如下是其使用到的:

從中可以看到,Inception V4設計理念還是與其前幾代一脈相承的,網絡結構還是與V3一樣為三段式ABC,只是其在Inception module多分支裡的設計更加複雜了。

Inception_ResNet_V1主要用於與Inception V3進行比較,證明Residual Networks主要是加快了收斂速度,為了達到這一目的,作者們煞是苦心,在沿用前幾代設計思路的情況下精心設計了網絡結構,確保兩者的計算量、參數量和耗用內存儘可能相近,從而可以得出比較公正靠譜的結論,以下為Inception_ResNet_V1所使用到的網絡結構。

最終,Inception_ResNet_V1與Inception V3的比較結果如下表:

從上面表格可以看出,Inception_ResNet_V1與Inception V3的效果相差不大,符合了作者們的先前假設。

Inception_ResNet_V2的提出,主要是用來探索ResNet Residual Networks用於Inception module時所能帶來的性能提升,其Inception module複雜度與Inception V4是相當的,其所用的網絡結構如下:

作者們實驗發現,在Inception_ResNet的Resdual模塊輸出時如果採用scaling操作(0.1~0.3),可以讓訓練過程更加平穩,如下是scaling結構示意圖:

此外,在Inception_ResNet的Inception resnet module內在short cut連接前有採用了1x1的卷積,以確保卷積輸出後特徵圖的通道數與輸入特徵圖一致,方便進行short cut connect操作。


從2014年到2016年,google先後提出了Inception V1/V2/V3/V4等經典卷積神經網絡,在當年的ILSVRC比賽裡也取得了驚人成績,其中所提出的Inception module、BN及Factorization into small convolution等等思想依然綻放異彩,值得我們學習和借鑑,希望通過本文,我們都能夠掌握其中的設計思想!

相關焦點

  • 卷積神經網絡學習路線(九)| 經典網絡回顧之GoogLeNet系列
    開篇的這張圖代表ILSVRC歷年的Top-5錯誤率,我會按照以上經典網絡出現的時間順序對他們進行介紹,同時穿插一些其他的經典CNN網絡。GoogLeNet和AlexNet/VGGNet這類依靠加深網絡結構的深度的思想不完全一樣。GoogLeNet在加深度的同時做了結構上的創新,引入了一個叫做Inception的結構來代替之前的卷積加激活的經典組件。GoogLeNet在ImageNet分類比賽上的Top-5錯誤率降低到了6.7%。
  • 【深度學習系列】用PaddlePaddle和Tensorflow實現GoogLeNet InceptionV2/V3/V4
    博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理
  • 卷積神經網絡學習路線(八)| 經典網絡回顧之ZFNet和VGGNet
    開篇的這張圖代表ILSVRC歷年的Top-5錯誤率,我會按照以上經典網絡出現的時間順序對他們進行介紹,同時穿插一些其他的經典CNN網絡。前言這是卷積神經網絡學習路線的第八篇文章,我們來回顧一下經典網絡中的ZF-Net和VGGNet。
  • 經典神經網絡 | 從Inception v1到Inception v4全解析
    Inception 網絡是CNN分類器發展史上一個重要的裡程碑。在 Inception 出現之前,大部分流行 CNN 僅僅是把卷積層堆疊得越來越多,使網絡越來越深,以此希望能夠得到更好的性能。GoogLeNet 最大的特點就是使用了 Inception 模塊,它的目的是設計一種具有優良局部拓撲結構的網絡,即對輸入圖像並行地執行多個卷積運算或池化操作,並將所有輸出結果拼接為一個非常深的特徵圖。因為 1*1、3*3 或 5*5 等不同的卷積運算與池化操作可以獲得輸入圖像的不同信息,並行處理這些運算並結合所有結果將獲得更好的圖像表徵。
  • 縱覽輕量化卷積神經網絡:SqueezeNet、MobileNet、ShuffleNet、Xception
    對於效率問題,通常的方法是進行模型壓縮(Model Compression),即在已經訓練好的模型上進行壓縮,使得網絡攜帶更少的網絡參數,從而解決內存問題,同時可以解決速度問題。相比於在已經訓練好的模型上進行處理,輕量化模型模型設計則是另闢蹊徑。輕量化模型設計主要思想在於設計更高效的「網絡計算方式」(主要針對卷積方式),從而使網絡參數減少的同時,不損失網絡性能。
  • 淺談卷積神經網絡的模型結構
    從LeNet5,到AlexNet,經過了20年的探索,而從AlexNet開始之後的短短幾年,VGG,GoogLeNet,ResNet,DensNet等結構紛紛湧現,不斷刷新卷積神經網絡在各種標準數據集上的精度,同時也拓寬了卷積神經網絡的應用範圍:從分類任務,物體識別,圖像分割這些基本任務,拓展到人臉識別,人體關鍵點檢測,三維重建等實際的應用場景。今天筆者就來淺談一下最近幾年卷積神經網絡的經典結構。
  • 【TensorFlow實戰筆記】 遷移學習實戰--卷積神經網絡CNN-Inception-v3模型
    2.說白了就是別人已經訓練好的強大的模型,你不需要去浪費時間訓練,直接拿過來用,雖然這樣最後的acc(準確率)可能會稍微低一些,但是可以節省大量的時間,還是非常划算的幾個須知的基本概念1.Inception-v3模型 是一個 卷積神經網絡(CNN)模型  (因為最近一直在忙著學,過一段時間會把經典的神經網絡和
  • 卷積神經網絡可視化的直觀解析
    重磅乾貨,第一時間送達最早的卷積神經網絡是Alexander Waibel在1987[5]年提出的延時神經網絡(TDNN)。它使用FFT預處理的語音信號作為輸入,它的隱藏層由兩個一維卷積核組成,用於提取頻域中不變的平移特徵[6]。在TDNN出現之前,人工智慧領域在BP神經網絡(back-propagation)的研究方面取得了突破性進展[7],因此TDNN能夠使用BP框架進行學習。在最初作者的對比實驗中,在相同條件下,TDNN的性能優於隱馬爾可夫模型(HMM),後者是80年代語音識別的主流算法[6]。
  • 卷積神經網絡的工作原理
    下面從起源,工作原理及構成模塊三個方面介紹一下卷積神經網絡。1.   起源:       神經元相互連接組成神經網絡。神經網絡的核心思想可追溯到1957年,Frank Rosenblatt提出的感知機(Perceptron)。感知機是第一個具有學習能力的神經網絡,它是二分類的線性模型,在模式識別算法的歷史上佔有重要的地位。
  • TensorFlowNews五大經典卷積神經網絡介紹:LeNet / AlexNet / GoogLeNet / VGGNet/
    前言:這個系列文章將會從經典的卷積神經網絡歷史開始,然後逐個講解卷積神經網絡結構,代碼實現和優化方向。(以下內容來翻譯自史丹福大學課程:http://cs231n.github.io/convolutional-networks/)在卷積網絡領域有幾個有名字的體系結構。
  • 深度學習三人行(第11期)----CNN經典網絡之GoogLeNet
    上一期,我們一起學習了深度學習卷積神經網絡中的經典網絡之LeNet-5和AlexNet,深度學習三人行(第10期)----CNN經典網絡之
  • 深度學習-卷積神經網絡原理
    卷積神經網絡原理概述卷積神經網絡又稱作(ConvNet, CNN),它的出現解決了人工智慧圖像識別的難題,圖像識別數據量大,並且在識別的過程中很難保留原有的信息
  • 如何設計卷積神經網絡架構和卷積、池化後圖片大小的計算
    如何設計卷積神經網絡架構和卷積、池化後圖片大小的計算(一)卷積神經網絡及卷積層或池化層大小的設置 (1)如何設計卷積神經網絡架構
  • Inception SQL 審核的設計思路
    在最近的GiTC2016的大會上,我和竹峰聯袂講了一次Inception,其中有提到Inception的設計思路,今天聽了演講錄音,感覺自己說得語無倫次的,實在應該重新考慮一下怎麼表達。在設計Inception的時候,主要考慮了以下幾個方向:符合程式設計師的習慣屏蔽人工易犯問題兼顧MySQL的語法最完美的編程實現審核執行備份回滾符合程式設計師的習慣    Inception的設計是為了幫助開發人員編寫符合資料庫開發規範的SQL語句,程式設計師是這個工具的主要使用者
  • 卷積神經網絡的卷積核大小、個數,卷積層數如何確定呢?
    向AI轉型的程式設計師都關注了這個號👇👇👇大數據挖掘DT機器學習  公眾號: datayx卷積神經網絡的卷積核大小看到有些答案是剛開始隨機初始化卷積核大小,卷積層數和map個數是根據經驗來設定的,但這個裡面應該是有深層次原因吧,比如下面的手寫字卷積神經網絡結構圖1,最後輸出為什麼是12個map,即輸出12個特徵?然後圖2又是輸出10個特徵了?
  • 回顧 | 中科院自動化所在讀博士生常建龍: 新生卷積神經網絡—從歐幾裡得空間到非歐幾裡得空間
    本文為將門技術社群直播第132期的內容回顧
  • 【深度學習系列】CNN模型的可視化
    博客專欄:https://www.cnblogs.com/charlotte77/前文傳送門:【好書推薦&學習階段】三個月教你從零入門深度學習【深度學習系列】PaddlePaddle之手寫數字識別【深度學習系列】卷積神經網絡CNN原理詳解(一)——基本原理【深度學習系列】PaddlePaddle之數據預處理
  • 乾貨 | 卷積神經網絡結構分析
    1 概述卷積神經網絡從1998年的LeNet,到現在已發展了22年,從LetNet到現在的MobileNet。從模型的深度、寬度和參數數量不斷演進,進而提高神經網絡的泛化能力。2 卷積神經網絡的發展下面我們通過卷積神經網絡的發展史來總結一下。
  • 專欄 卷積神經網絡簡介
    這時我們不禁要想,如果不是由人來設計一個濾波器,而是從一個隨機濾波器開始,根據某種目標、用某種方法去逐漸調整它,直到它接近我們想要的樣子,可行麼?這就是卷積神經網絡(Convolutional Neural Network, CNN)的思想了。可調整的濾波器是 CNN 的「卷積」那部分;如何調整濾波器則是 CNN 的「神經網絡」那部分。
  • 卷積神經網絡-CNN
    現在大型深層的卷積神經網絡(CNNs, 請注意這裡是複數)通常由多個上述結構前後連接、層內調整組成,根據功能不同,我們稱這些前後連接的結構處於不同階段