一圖抵千言:帶你快速學會 GoogLeNet 神經網路 | CSDN 博文精選
作者 | .NY&XX
責編 | 屠敏
出品 | CSDN 博客
本文介紹的是著名的網路結構GoogLeNet,目的是試圖領會其中結構設計思想。
Inception,來源於論文Network in Network和電影Inception中的台詞:we need to go deeper。GoogLeNet在2014年的ImageNet比賽中獲得第一名。
GoogLeNet特點
此網路架構的主要特點就是提升了對網路內部計算資源的利用。
增加了網路的深度和寬度,網路深度達到22層(不包括池化層和輸入層),但沒有增加計算代價。
參數比2012年冠軍隊的網路少了12倍,但是更加準確。
對象檢測得益於深度架構和傳統的計算機視覺演算法(R-CNN)。
優化網路質量的生物學原理
基於赫布原理和多尺度處理。
赫布原理:突觸前神經元向突觸後神經元的持續重複的刺激可以導致突觸傳遞效能的增加。赫布理論有下列的特性:
知覺獲知是在神經系統中的表徵是一群而不是一個細胞,因此這是一個較為分散的表徵系統。表徵不同的心智活動,並不完全繫於細胞的獨特身分,因為一個細胞可同時參與幾個細胞集團。
在細胞集合中,無論是組成分子或是聯絡通路,均有相當程度的餘裕性,所以容許神經系統有部分的破壞,依然能執行所負擔的功能。同時這些平行通路可容許由不同的部位到達興奮全體的目的。
細胞集合的成立雖然依賴連結,但連結的成果並非使刺激直通於反應,而是在中樞建立一個有緩衝作用(使刺激的影響能盤桓較久)的迴路。
人的大腦神經元運作的方式的確和原子內粒子的運作方式類似,人類的大腦的確是所有神經網路的總和。每個神經元本身並不重要,重要的是這些神經元怎麼聯合起來,聯合起來可以做些什麼事,這才是的細胞集合的核心。
GoogLeNet網路結構的動機
提高網路性能最直接的方法就是增加網路的尺寸(深度和寬度)這樣會帶來兩個問題:
擴大後的網路含有大量的參數,容易產生過擬合,大量的帶標籤的訓練樣本不容易得到。
擴大後的網路要消耗大量的計算資源。
解決這兩個問題的基本方法:將全連接變成稀疏連接,包括卷積層。即Dropout理論,符合赫布原理,在非嚴格條件下,實際上是可行的。同時GoogLeNet還參考了以下方法:
CNN典型的結構:一堆卷積層+若干全連接層。
針對大規模數據集問題,現在的趨勢是增加層數和層的尺寸,並且使用dropout解決過擬合問題。
使用Max Pool和Average Pool。
使用Network in Network方法,增加網路的表現能力,這種方法可以看做是一個額外的1*1卷積層再加上一個ReLU層。NIN最重要的是降維,解決了計算瓶頸,從而解決網路尺寸受限的問題。這樣就可以增加網路的深度和寬度了,而且不會有很大的性能損失。
當前最好的對象檢測方法是R-CNN。R-CNN將檢測問題分解為兩個子問題:首先利用低級特徵(顏色和超像素一致性)在分類不可知時尋找潛在目標,然後使用CNN分類器識別潛在目標所屬類別。GoogLeNet在這兩個階段都進行了增強效果。
GoogLeNet架構細節
Inception模塊和普通卷積結構的差異
圖(a)是傳統的多通道卷積操作,圖(b)是GoogLeNet中使用的Inception模塊,兩者的區別在於:
Inception使用了多個不同尺寸的卷積核,還添加了池化,然後將卷積和池化結果串聯在一起。
卷積之前有1×1的卷積操作,池化之後也有1×1的卷積操作。
Inception模塊中的多尺寸卷積核的卷積卷積過程和普通卷積過程不同。
第一點不同的原因是:Inception的主要思想就是如何找出最優的局部稀疏結構並將其覆蓋為近似的稠密組件,這裡就是將不同的局部結構組合到了一起。
第二點不同的原因是:原始的卷積是廣義線性模型GLM(generalized linear model),GLM的抽象等級較低,無法很好的表達非線性特徵,這種1×1的卷積操作將高相關性的節點聚集在一起。什麼是高相關性節點呢?兩張特徵圖中相同位置的節點就是相關性高的節點。假設當前層的輸入大小是28×28×256,卷積核大小為1×1×256,卷積得到的輸出大小為28×28×1。可以看出這種操作一方面將原來的線性模型變成了非線性模型,將高相關性節點組合到了一起,具有更強的表達能力,另一方面減少了參數個數。舉個例子:
假設將Inception(4a)換成傳統的3×3卷積,那麼轉換前後的參數個數對比如下:
3×3卷積的參數個數是512×3×3×480=2211840,Inception的參數個數是192×1×1×480 + 96×1×1×480 + 208×3×3×96 + 16×1×1×480 + 48×5×5×16 + 64×1×1×480 = 536064。Inception結構的參數個數明顯比普通卷積結構的少了很多。
第三點不同體現在:卷積核與接受域對齊方式不同。圖3左是普通卷積過程,其對齊方式是讓卷積核的左上角和接受域的左上角對齊,這種對齊方式卷積核始終在接受域的內部,不會跑到接受域的外部。圖3右是GoogLeNet使用的卷積過程,其對齊方式是讓卷積核的中心和接受域的左上角對齊,這種對齊方式卷積核可能會跑到接受域的外部,此時接受域外部和卷積核重合的部分採取補0的措施。GoogLeNet卷積方式使得步長是1的卷積得到的輸出大小和輸入大小一致。
輔助分類器
根據實驗數據,發現神經網路的中間層也具有很強的識別能力,為了利用中間層抽象的特徵,在某些中間層中添加含有多層的分類器。如下圖所示,紅色邊框內部代表添加的輔助分類器。
GoogLeNet網路架構
第一幅圖是GoogLeNet基本結構,第二幅圖是添加了輔助分類器的結構。
GoogLeNet神經網路中,使用了前兩節提到的Inception模塊和輔助分類器,而且由於全連接網路參數多,計算量大,容易過擬合,所以GoogLeNet沒有採用AlexNet(2012年ImageNet冠軍隊使用的網路結構,前五層是卷積層,後三層是全連接層)中的全連接結構,直接在Inception模塊之後使用Average Pool和Dropout方法,不僅起到降維作用,還在一定程度上防止過擬合。
在Dropout層之前添加了一個7×7的Average Pool,一方面是降維,另一方面也是對低層特徵的組合。我們希望網路在高層可以抽象出圖像全局的特徵,那麼應該在網路的高層增加卷積核的大小或者增加池化區域的大小,GoogLeNet將這種操作放到了最後的池化過程,前面的Inception模塊中卷積核大小都是固定的,而且比較小,主要是為了卷積時的計算方便。
第二幅圖中藍色部分是卷積塊,每個卷積塊後都會跟一個ReLU(受限線性單元)層作為激活函數(包括Inception內部的卷積塊)
GoogLeNet訓練以及樣本預處理
訓練7個GoogLeNet模型,其中包含一個加寬版本,其餘6個模型初始化和超參數都一樣,只是採樣方法和樣本順序不同
採用模型和數據並行技術,用幾個高端GPU訓練一周可得到收斂(估算)
多個模型的訓練是不同步的,超參數的變化也是不一樣的,比如dropout和學習率
有些模型主要訓練小尺寸樣本,有些模型訓練大尺寸樣本
採樣時,樣本尺寸縮放從8%到100%,寬高比隨機選取3/4或4/3(多尺度)
將圖像作光度扭曲,也就是隨機更改圖像的對比度,亮度和顏色。這樣可以增加網路對這些屬性的不變性
使用隨機插值方法重置圖像尺寸(因為網路輸入層的大小是固定的),使用到的隨機插值方法:雙線性插值,區域插值,最近鄰插值,三次方插值,這些插值方法等概率的被選擇使用。圖像放大時,像素也相應地增加 ,增加的過程就是「插值」程序自動選擇信息較好的像素作為增加的像素,而並非只使用臨近的像素,所以在放大圖像時,圖像看上去會比較平滑、乾淨
改變超參數(反向傳播若干次之後改變超參數,或者誤差達到某閾值時改變超參數)
GoogLeNet測試以及測試樣本處理
對於一個測試樣本,將圖像的短邊縮放成4種尺寸,分別為256,288,320,352。
從每種尺寸的圖像的左邊,中間,右邊(或者上面,中間,下面)分別截取一個方形區域。
從每個方形區域的4個拐角和中心分別截取一個224×224區域,再將方形區域縮小到224×224,這樣每個方形區域能得到6張大小為224×224的圖像,加上它們的鏡像版本(將圖像水平翻轉),一共得到4×3×6×2=144張圖像。這樣的方法在實際應用中是不必要的,可能存在更合理的修剪方法。下圖展示了不同修剪方法和不同模型數量的組合結果:
在論文《Some improvements on deep convolutional neural network based image classification》提到了用貪心演算法只要10到15個修剪樣本就可以了。
每個模型的Softmax分類器在多個修剪圖片作為輸入時都得到多個輸出值,然後再對所有分類器的softmax概率值求平均。
GoogLeNet檢測+分類
檢測方法使用SelectiveSearch+MultiBox (Google),主要是為了獲取可能含有對象的候選區域,分類方法使用上述提到的GoogLeNet神經網路。
MultiBox方法
將AlexNet(如圖8)的最後一層改為輸出k個邊界框和k個置信度。
邊界框編碼為四個節點值,分別是邊界框的左上頂點和右下頂點的相對坐標。
置信度是為這個邊界框打分,表示該邊界框含有目標的可能性,這裡k=200。
位置損失函數:
如果第i個預測框對應第j個目標,那麼xij=1,否則為0。
置信度損失函數(邏輯回歸)
如果第i個預測框和某一個目標匹配,那麼 。
最終的損失函數為:
SelectiveSearch方法
將超像素尺寸改為原來的2倍,這樣生成的候選框減少一半。此處並非嚴格的將超像素尺寸擴大1倍,而是在超像素合併過程中刪除掉一半被合併的像素。
第一幅圖是SelectiveSearch的合併效果圖,第二幅圖是SelectiveSearch合併演算法偽代碼。
假設R初始時有k個區域,合併兩個區域時刪除被合併的兩個區域,直到R中只有k/2個區域時,執行正常的合併操作,不再刪除候選區域。這樣生成的候選框比原始SelectiveSearch演算法生成的候選框數量少一半。
通過MultiBox和SelectiveSearch方法得到一系列的候選框,將這些候選框輸入到GoogLeNet神經網路中進行分類,得到最終的結果。
檢測分類的性能:
1.單個模型性能:
2. 綜合性能
GoogLeNet單個模型的分類性能比Deep Insight差2個百分點,6個模型放在一起平均之後的性能比Deep Insight高了3個百分點。
原文:https://blog.csdn.net/songguangfan/article/details/98035644#GoogLeNet_78
【End】
※阿里雲技術戰略總監陳緒:45 歲開源老兵「中年花開」阿里雲 | 人物誌
※53 年 IT 老兵詳談傳統網路到互聯網的演變史
TAG:CSDN |