--- tags: Deep learning --- # 論文閱讀: GoogLeNet/Inception(Going deeper with convolutions) [論文](https://arxiv.org/pdf/1409.4842.pdf) ## Introduction 縱使VGG在ImageNet的比賽(ILSVRC14)上表現優異,然而它也只能屈於亞軍,在當時擊敗它的即是此次要討論的GoogLeNet。 在GoogLeNet出來之前,主流的網路結構突破大致是網路更深(即層數增加),網路更寬(即神經元數目增多),但這樣做存在一些缺點: * 當訓練集有限時,引數過多,模型會出現過擬合 * 網路越大,計算複雜度越大,設計起來越困難 * 當層數增多時,梯度越往後越容易消失 於是,當是GoogLeNet提出了一種核心架構: Inception。Inception從提出至今,歷經不斷的修改已經從V1來到V4。相對於VGG,GoogLeNet考量到有限的資源,優化模型使其需要的記憶體或計算量更少,然而,與此同時卻還能超越VGG的performance。 ## Related Work 主要提及對GoogLeNet的設計帶來啟發的相關論文,包含了LeNet、1×1 的convolutional layers、R-CNN等等(有興趣可以直接參考論文內容) ## Motivation and High Level Considerations 增加CNN的深度顯然是增加其performance的"簡單"方法,尤其是針對龐大的train資料時更是如此。然而這會帶來兩個主要的問題。 * 使用大量的參數過多,容易出現overfitting * 計算資源的有限性: 每兩個convolutional layers串在一起,隨著filer數量的增加,導致計算量的增加。然而增加的capacity使用效率不高(舉例來說,大多數weight最終接近於零)便產生了浪費。 如果將fully-connected換成sparsely connected architectures,理想上就能夠節省使用的參數。然而即使減少arithmetic operations,受限於硬體的限制,由於大部分硬體是針對dense matrix而非sparse計算優化的,並不能顯著的提升速度。 於是論文提出了另一個的想法: 是否有方法可以保持network的sparsity,同時又能利用dense matrix的高計算效能呢?答案是肯定的。這便造就了Inception的誕生,往下將深入研究其中的架構細節。 ## Architectural Details  最原始的Inception module中,1×1 conv, 3×3 conv, 5×5 conv, 與3×3 max pooling 會對輸入一起作用,並且將所有結果串接在一起作為output。換句話說,輸入的影像會經過不同尺寸的conv/max pooling,因此能擷取出的多元的特徵。 然而,所有的conv的輸入都是基於前一層的所有輸出,明顯對於計算量有很大的負擔(何況還有5x5的conv)。並且,通過max-pooling的影像channel是會維持不變的,這將導致隨著CNN的深度更深,特徵的channel變得更大。  因此,論文對原本的Inception module做了調整,如上圖。使用了1x1 conv,這不僅能對特徵影像降維,同時也增加網路的non-linearity。(可以參考此連結:[卷積神經網路(Convolutional neural network, CNN): 1×1卷積計算在做什麼](https://medium.com/@chih.sheng.huang821/%E5%8D%B7%E7%A9%8D%E7%A5%9E%E7%B6%93%E7%B6%B2%E8%B7%AF-convolutional-neural-network-cnn-1-1%E5%8D%B7%E7%A9%8D%E8%A8%88%E7%AE%97%E5%9C%A8%E5%81%9A%E4%BB%80%E9%BA%BC-7d7ebfe34b8)) 整體而言,Inception Network便是堆疊上面的module,中間某些層結合stride=2的max-pooling降低解析度。 考量到memory的使用,論文表示在網路最初使用Inception module,在深層則使用傳統的convolution layer,是比較好的做法(但並非必要)。 ## GoogLeNet 如下表/圖。為GoogLeNet的基本架構。   架構的細節如下: * 所有的conv(包含Inception內的)都接續一層ReLu * 原始輸入影像為224x224x3,並且影像的每個pixel value減平均值處理 * 表中的"#3x3 reduce","#5x5 reduce"表示在3x3,5x5 conv操作之前使用了1x1 conv的數量。"pool proj"則表示在max pooling後的1x1 conv數量。 * 參考了論文"Network in network"([細節可以看這篇筆記](https://allen108108.github.io/blog/2019/10/07/%5B%E8%AB%96%E6%96%87%5D%20Network%20In%20Network/)),在網路的最後使用了average pooling來代替原本比較常見的fully-connected layer(不過考量到網路的彈性,方便應用在不同的label set,最後仍加了一層fully-connected)。 average pooling大致有幾個好處: 1. 增強了 feature map 與類別之間的關係 2. Global Average Pooling 中沒有參數需要優化,因此可減少參數的使用,並且避免 overfitting 3. Global Average Pooling 將空間資訊結合,對輸入特徵的空間轉換具有更好的強健性。 * 隨著網路的加深,gradient vanishing的問題也需要被解決。GoogLeNet的作法是在中間branch出兩個輔助分類器,這兩個分類器僅在training階段被使用。目的是在網路中間就做分類,並將計算出的loss(weighted x0.3)加到total loss(我認為就是中間式監督的概念)。藉此,loss就不會隨著傳遞越深而完全消失。 ## Result ILSVRC 2014 Classification Challenge 的結果如下:  GoogLeNet訓練了7種模型(差別在於sampling的方法、以及資料input的order有所差異)來做ensemble learning testing階段使用了multi-scale與multi-crop: * Multi-scale testing: 將短邊scale到256, 288, 320, 352. (4種scale) * Multi-crop testing: 對於每種scale,切分成左、中、右或者上、中、下(3塊矩形),對於每塊矩形,從四個角或者中間計算起的224x224範圍作crop,加上直接把該矩形resize到224x224的結果(6種),加上水平翻轉的版本(2種)。 因此可以產生出4x3x6x2個crop image。 實驗的結果如下圖。我們可以看到,除了深度學習模型架構之外,**ensemble方法、scale/crop的方法對於預測結果也將有影響**(換句話說,如何輸入testing image也是一門學問,根據適當的調整也許能得到更好的預測結果)  此外,GoogLeNet也可以用在產生bounding box的detection任務。ILSVRC 2014 Detection Challenge 的結果如下(產生bounding box的作法細節有興趣可以參考論文):  ## Conclusion GoogLeNet通過其設計減少了運算單元的使用量,同時兼顧其模型的預測能力。此外,也可以看到GoogLeNet被應用在detection的任務上的潛力。 ## Reference [CNN經典模型:GoogLeNet(從Inception v1到v4的演進) ](https://www.itread01.com/content/1544969366.html) [Review: GoogLeNet (Inception v1)— Winner of ILSVRC 2014 (Image Classification)](https://medium.com/coinmonks/paper-review-of-googlenet-inception-v1-winner-of-ilsvlc-2014-image-classification-c2b3565a64e7)
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.