GoogleNet家族
一、GoogLeNet相關論文及下載地址
[v1] Going Deeper withConvolutions, 6.67% test error,2014.9
論文地址:http://arxiv.org/abs/1409.4842
[v2] Batch Normalization:Accelerating Deep Network Training by Reducing Internal Covariate Shift, 4.8% test error,2015.2
論文地址:http://arxiv.org/abs/1502.03167
[v3] Rethinking theInception Architecture for Computer Vision, 3.5%test error,2015.12
論文地址:http://arxiv.org/abs/1512.00567
[v4] Inception-v4,Inception-ResNet and the Impact of Residual Connections on Learning, 3.08% test error,2016.2
論文地址:http://arxiv.org/abs/1602.07261
二、GoogLeNet發展歷程
1. Inception v1的網路,打破了常規的卷積層串聯的模式,將1x1,3x3,5x5的卷積層和3x3的pooling池化層並聯組合後concatenate組裝在一起的設計思路;
2. Inception v2的網路在Inception v1的基礎上,進行了改進,一方面了加入了BN層,減少了Internal Covariate Shift(內部神經元分佈的改變),使每一層的輸出都規範化到一個N(0, 1)的高斯,還去除了Dropout、LRN等結構;另外一方面學習VGG用2個3x3的卷積替代inception模組中的5x5卷積,既降低了引數數量,又加速計算;
3. Inception v3一個最重要的改進是分解(Factorization),將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1)。這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網路),又可以將1個conv拆成2個conv,使得網路深度進一步增加,增加了網路的非線性,可以處理更多更豐富的空間特徵,增加特徵多樣性。還有值得注意的地方是網路輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模組;
4. Inception v4結合了微軟的ResNet,發現ResNet的結構可以極大地加速訓練,同時效能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的效能。
三、Inception V1
1. 概述
Google Inception Net首次出現在ILSVRC 2014的比賽中,以較大優勢取得了第一名。那屆比賽中的Inception Net通常被稱為Inception V1,它最大的特點是控制了計算量和引數量的同時,獲得了非常好的分類效能——top-5錯誤率6.67%,只有AlexNet的一半不到。Inception V1有22層深,比AlexNet的8層或者VGGNet的19層還要更深。但其計算量只有15億次浮點運算,同時只有500萬的引數量,僅為AlexNet引數量(6000萬)的1/12,卻可以達到遠勝於AlexNet的準確率,可以說是非常優秀並且非常實用的模型。Inception V1降低引數量的目的有兩點,第一,引數越多模型越龐大,需要供模型學習的資料量就越大,而目前高質量的資料非常昂貴;第二,引數越多,耗費的計算資源也會更大。Inception V1引數少但效果好的原因除了模型層數更深、表達能力更強外,還有兩點:一是去除了最後的全連線層,用全域性平均池化層(即將圖片尺寸變為1*1)來取代它。全連線層幾乎佔據了AlexNet或VGGNet中90%的引數量,而且會引起過擬合,去除全連線層後模型訓練更快並且減輕了過擬合。用全域性平均池化層取代全連線層的做法借鑑了NetworkIn Network(以下簡稱NIN)論文。二是Inception V1中精心設計的InceptionModule提高了引數的利用效率,其結構如圖1所示。這一部分也借鑑了NIN的思想,形象的解釋就是Inception Module本身如同大網路中的一個小網路,其結構可以反覆堆疊在一起形成大網路。不過Inception V1比NIN更進一步的是增加了分支網路,NIN則主要是級聯的卷積層和MLPConv層。一般來說卷積層要提升表達能力,主要依靠增加輸出通道數,但副作用是計算量增大和過擬合。每一個輸出通道對應一個濾波器,同一個濾波器共享引數,只能提取一類特徵,因此一個輸出通道只能做一種特徵處理。而NIN中的MLPConv則擁有更強大的能力,允許在輸出通道之間組合資訊,因此效果明顯。可以說,MLPConv基本等效於普通卷積層後再連線1*1的卷積和ReLU啟用函式。
圖1 Inception Module
2. InceptionModule
Inception Module的基本結構如圖1,有4個分支:第一個分支對輸入進行1*1的卷積,這其實也是NIN中提出的一個重要結構。1*1的卷積是一個非常優秀的結構,它可以跨通道組織資訊,提高網路的表達能力,同時可以對輸出通道升維和降維。可以看到Inception Module的4個分支都用到了1*1卷積,來進行低成本(計算量比3*3小很多)的跨通道的特徵變換。第二個分支先使用了1*1卷積,然後連線3*3卷積,相當於進行了兩次特徵變換。第三個分支類似,先是1*1的卷積,然後連線5*5卷積。最後一個分支則是3*3最大池化後直接使用1*1卷積。有的分支只使用1*1卷積,有的分支使用了其他尺寸的卷積時也會再使用1*1卷積,這是因為1*1卷積的價效比很高,用很小的計算量就能增加一層特徵變換和非線性化。Inception Module的4個分支在最後通過一個聚合操作合併(在輸出通道數這個維度上聚合)。Inception Module中包含了3種不同尺寸的卷積和1個最大池化,增加了網路對不同尺度的適應性,這一部分和Multi-Scale的思想類似。早期計算機視覺的研究中,受靈長類神經視覺系統的啟發,Serre使用不同尺寸的Gabor濾波器處理不同尺寸的圖片,Inception V1借鑑了這種思想。Inception V1的論文中指出,InceptionModule可以讓網路的深度和寬度高效率地擴充,提升準確率且不致於過擬合。
稀疏結構是非常適合神經網路的一種結構,尤其是對非常大型、非常深的神經網路,可以減輕過擬合併降低計算量,例如卷積神經網路就是稀疏的連線。Inception Net的主要目標就是找到最優的稀疏結構單元Inception Module,論文中提到其稀疏結構基於Hebbian原理,這裡簡單解釋一下Hebbian原理:神經反射活動的持續與重複會導致神經元連線穩定性的持久提升,當兩個神經元細胞A和B距離很近,並且A參與了對B重複、持續的興奮,那麼某些代謝變化會導致A將作為能使B興奮的細胞。總結一下即“一起發射的神經元會連在一起”(Cells that fire together, wire together),學習過程中的刺激會使神經元間的突觸強度增加。受Hebbian原理啟發,另一篇文章Provable Bounds for Learning Some Deep Representations提出,如果資料集的概率分佈可以被一個很大很稀疏的神經網路所表達,那麼構築這個網路的最佳方法是逐層構築網路:將上一層高度相關的節點聚類,並將聚類出來的每一個小簇(cluster)連線到一起,如圖2所示。這個相關性高的節點應該被連線在一起的結論,即是從神經網路的角度對Hebbian原理有效性的證明。
圖2將高度相關的節點連線在一起,形成稀疏網路
因此一個“好”的稀疏結構,應該是符合Hebbian原理的,我們應該把相關性高的一簇神經元節點連線在一起。在圖片資料中,天然的就是臨近區域的資料相關性高,因此相鄰的畫素點被卷積操作連線在一起。而我們可能有多個卷積核,在同一空間位置但在不同通道的卷積核的輸出結果相關性極高。因此,一個1*1的卷積就可以很自然地把這些相關性很高的、在同一個空間位置但是不同通道的特徵連線在一起,這就是為什麼1*1卷積這麼頻繁地被應用到Inception Net中的原因。1*1卷積所連線的節點的相關性是最高的,而稍微大一點尺寸的卷積,比如3*3、5*5的卷積所連線的節點相關性也很高,因此也可以適當地使用一些大尺寸的卷積,增加多樣性(diversity)。Inception Module通過4個分支中不同尺寸的1*1、3*3、5*5等小型卷積將相關性很高的節點連線在一起,就完成了其設計初衷,構建出了很高效的符合Hebbian原理的稀疏結構。
3. InceptionNet網路結構
在Inception Module中,通常1*1卷積的比例(輸出通道數佔比)最高,3*3卷積和5*5卷積稍低。而在整個網路中,會有多個堆疊的Inception Module,我們希望靠後的InceptionModule可以捕捉更高階的抽象特徵,因此靠後的Inception Module的卷積的空間集中度應該逐漸降低,這樣可以捕獲更大面積的特徵。因此,越靠後的InceptionModule中,3*3和5*5這兩個大面積的卷積核的佔比(輸出通道數)應該更多。
Inception Net有22層深,除了最後一層的輸出,其中間節點的分類效果也很好。因此在Inception Net中,還使用到了輔助分類節點(auxiliary classifiers),即將中間某一層的輸出用作分類,並按一個較小的權重(0.3)加到最終分類結果中。這樣相當於做了模型融合,同時給網路增加了反向傳播的梯度訊號,也提供了額外的正則化,對於整個Inception Net的訓練很有裨益。Inception V1也使用了Multi-Scale、Multi-Crop等資料增強方法,並在不同的取樣資料上訓練了7個模型進行融合,得到了最後的ILSVRC 2014的比賽成績——top-5錯誤率6.67%。
對上圖做如下說明:
1. 顯然GoogLeNet採用了模組化的結構,方便增添和修改;
2. 網路最後採用了average pooling來代替全連線層,想法來自NIN,事實證明可以將TOP1 accuracy提高0.6%。但是,實際在最後還是加了一個全連線層,主要是為了方便以後大家finetune;
3. 雖然移除了全連線,但是網路中依然使用了Dropout ;
4. 為了避免梯度消失,網路額外增加了2個輔助的softmax用於向前傳導梯度。文章中說這兩個輔助的分類器的loss應該加一個衰減係數,但看caffe中的model也沒有加任何衰減。此外,實際測試的時候,這兩個額外的softmax會被去掉。
下圖是清晰圖。
四、Inception V2
Inception V2學習了VGGNet,用兩個3*3的卷積代替5*5的大卷積(用以降低引數量並減輕過擬合),還提出了著名的BatchNormalization(以下簡稱BN)方法。BN是一個非常有效的正則化方法,可以讓大型卷積網路的訓練速度加快很多倍,同時收斂後的分類準確率也可以得到大幅提高。BN在用於神經網路某層時,會對每一個mini-batch資料的內部進行標準化(normalization)處理,使輸出規範化到N(0,1)的正態分佈,減少了InternalCovariate Shift(內部神經元分佈的改變)。BN的論文指出,傳統的深度神經網路在訓練時,每一層的輸入的分佈都在變化,導致訓練變得困難,我們只能使用一個很小的學習速率解決這個問題。而對每一層使用BN之後,我們就可以有效地解決這個問題,學習速率可以增大很多倍,達到之前的準確率所需要的迭代次數只有1/14,訓練時間大大縮短。而達到之前的準確率後,可以繼續訓練,並最終取得遠超於Inception V1模型的效能——top-5錯誤率4.8%,已經優於人眼水平。因為BN某種意義上還起到了正則化的作用,所以可以減少或者取消Dropout,簡化網路結構。
只是單純地使用BN獲得的增益還不明顯,還需要一些相應的調整:增大學習速率並加快學習衰減速度以適用BN規範化後的資料;去除Dropout並減輕L2正則(因BN已起到正則化的作用);去除LRN;更徹底地對訓練樣本進行shuffle;減少資料增強過程中對資料的光學畸變(因為BN訓練更快,每個樣本被訓練的次數更少,因此更真實的樣本對訓練更有幫助)。在使用了這些措施後,Inception V2在訓練達到Inception V1的準確率時快了14倍,並且模型在收斂時的準確率上限更高。
五、Inception V3
Inception V3網路則主要有兩方面的改造:一是引入了Factorization into smallconvolutions的思想,將一個較大的二維卷積拆成兩個較小的一維卷積,比如將7*7卷積拆成1*7卷積和7*1卷積,或者將3*3卷積拆成1*3卷積和3*1卷積,如圖3所示。一方面節約了大量引數,加速運算並減輕了過擬合(比將7*7卷積拆成1*7卷積和7*1卷積,比拆成3個3*3卷積更節約引數),同時增加了一層非線性擴充套件模型表達能力。論文中指出,這種非對稱的卷積結構拆分,其結果比對稱地拆為幾個相同的小卷積核效果更明顯,可以處理更多、更豐富的空間特徵,增加特徵多樣性。
圖 3將一個3*3卷積拆成1*3卷積和3*1卷積
Inception V3優化了Inception Module的結構,現在Inception Module有35*35、17*17和8*8三種不同結構,如圖4所示。這些Inception Module只在網路的後部出現,前部還是普通的卷積層。並且Inception V3除了在Inception Module中使用分支,還在分支中使用了分支(8*8的結構中),可以說是Network In Network In Network。
圖4Inception V3中三種結構的InceptionModule
(1) 圖4左是GoogLeNetV1中使用的Inception結構;
(2) 圖5中是用3x3卷積序列來代替大卷積核;
(3) 圖6右是用nx1卷積來代替大卷積核,這裡設定n=7來應對17x17大小的feature map。該結構被正式用在GoogLeNet V2中。
圖5Inception V3的網路結構
六、Inception V4
Inception V4相比V3主要是結合了微軟的ResNet。
Inception v4結合了微軟的ResNet,發現ResNet的結構可以極大地加速訓練,同時效能也有提升,得到一個Inception-ResNet v2網路,同時還設計了一個更深更優化的Inception v4模型,能達到與Inception-ResNet v2相媲美的效能。
相關部落格:深入淺出——網路模型中Inception的作用與結構全解析
轉載:http://blog.csdn.net/marsjhao/article/details/73088850
相關文章
- 影像分類丨Inception家族進化史「GoogleNet、Inception、Xception」Go
- GoogLeNet模型的微調Go模型
- GoogleNet閱讀筆記Go筆記
- 5.3 使用tensorflow搭建GoogLeNet網路 筆記Go筆記
- SVM家族(一)
- 平安-瀚景家族
- offset大家族(一)
- Eval家族的那些事兒
- spring applicationContext家族層級梳理SpringAPPContext
- SAP雲解決方案家族
- 字串家族 學習筆記字串筆記
- Potato家族本地提權分析
- stat 命令家族(1)- 詳解 vmstat
- stat 命令家族(3)- 詳解 mpstat
- TCP/IP家族的小祕密TCP
- 時之幻想曲家族攻略
- 谷歌公司提出的卷積神經網路GoogLeNet 系列作品簡述谷歌卷積神經網路Go
- 如何輕鬆記載家族資訊?MacFamilyTree百年家族譜,輕鬆繪製!Mac
- Mint家族迎來了“瑟瑞娜”
- Android 動畫 Animator 家族使用指南Android動畫
- Flutter 設計模式|工廠模式家族Flutter設計模式
- 這個殺手不太冷-kill家族
- 盒尺寸四大家族
- 雲原生週刊:Istio 加入 Phippy 家族 | 2024.3.18
- Linux流行病毒家族&清除方法集錦Linux
- UBS&FOTT:2021年中國家族財富與家族辦公室調研報告(附下載)
- 大話CNN經典模型:GoogLeNet(從Inception v1到v4的演進)CNN模型Go
- ShardingSphere如何完成與Spring家族無縫整合的?Spring
- Flutter中的資料視覺化charts家族Flutter視覺化
- Altrata:2024年家族財富轉移
- Map大家族的那點事兒(五)WeakHashMapHashMap
- Ruby 札記 - Ruby 集合家族之雜湊(Hash)
- Ruby 札記 - Ruby 集合家族之陣列(Array)陣列
- 招商銀行:2020中國家族信託報告
- KCP協議:從TCP到UDP家族QUIC/KCP/ENET協議TCPUDPUI
- 畢馬威:2021年全球家族企業報告
- NoSQL資料庫概念與NoSQL資料庫家族SQL資料庫
- m基於Googlenet深度學習的運動專案識別系統matlab模擬,包括GUI介面Go深度學習MatlabGUI