CNN卷積神經網路之GoogLeNet(Incepetion V1-V3)
- 未經本人同意,禁止任何形式的轉載!
- GoogLeNet(Incepetion V1)
- 前言
- 網路結構
- 1.Inception module
- 2.整體結構
- 多裁剪影像評估和模型融合
- 思考
- Incepetion V2
- 網路結構改進
- 1.Inception module
- 2.輔助分類器(Auxiliary Classifiers)
- 3.有效的特征圖降維方式
- 4.整體結構
- 5.BatchNorm
- Incepetion V3
- 網路結構改進(RMSProp優化器 LabelSmoothing et.)
- 對于低像素圖片分類的探索
- 總結
未經本人同意,禁止任何形式的轉載!
GoogLeNet(Incepetion V1)
《Going deeper with convolutions》
論文地址:http://arxiv.org/abs/1409.4842.
前言
GoogLeNet該網路是在ILSVRC2014比賽分類專案獲得第一名,GoogLeNet是一個具有22層網路的深度學習架構,當然這22層指的是擁有權重的層,
按照之前的思路,提升網路性能最直接的辦法就是增加網路深度和寬度,但一味地增加,會帶來問題:
1)引數太多,如果訓練資料集有限,很容易產生過擬合;
2)網路越深,容易出現梯度彌散問題,
為了減少引數,一開始會想到將全連接變成稀疏連接,但實作上,全連接變成稀疏連接后實際計算量并不會有質的提升,因為大部分硬體是針對密集矩陣計算優化的,稀疏矩陣雖然資料量少,但是計算所消耗的時間卻很難減少,因此Google研究人員提出了Inception的方法,
網路結構
1.Inception module

1 . 采用不同大小的卷積核最后拼接意味著不同尺度特征的融合;
2 . 卷積核采用1、3和5,主要是為了方便對齊,設定卷積stride=1后,只要分別設定pad=0、1、2,那么卷積之后便得到相同維度的特征,就可直接拼接在一起;
3 . 文章說很多地方都表明pooling挺有效,所以Inception里面也嵌入了,但是文中也說max-pooling layers result in loss of accurate spatial information,最大池化會導致某些精確的空間資訊丟失,
但是,使用5x5的卷積核仍然會帶來巨大的計算量, 為此,采用1x1卷積核來進行降維(減少通道數量),

下面給出一個使用1X1卷積降低引數量的例子:

其次,增加的1X1卷積后面也會跟著有非線性激勵,這樣同時也能夠提升網路的表達能力,
2.整體結構
雖網路的復雜程度加大了,但利用1X1卷積總的運算次數減小到之前的1/3,Inception網路是一個由上述型別的模塊互相堆疊組成的網路,從而形成了GoogLeNet,如圖所示GoogLeNet的整體架構,

可以看見當時還有輔助的分類器,除了最終的分類結果外,其實中間節點的分類效果還是不錯的,所以GoogLeNet干脆從中間拉了兩條分類器出來,然他們按一個較小的權重加到最終的分類結果中,這樣做好處:
1)相當于做了模型整合
2)給網路增加了反向傳播的梯度信號,一定程度解決了深網路帶來的梯度消失的問題而且還提供了額外的正則化
當然輔助分類器只用于訓練階段,在測驗階段是要去掉的,
下圖可以更清楚每層的具體結構:

延續VGGNet的設計思路,GoogLeNet也采用了模塊化的結構,方便增添和修改,網路最后采用了average pooling來代替全連接層,引數量進一步減少,雖然移除了全連接,但是網路中依然使用了Dropout,
多裁剪影像評估和模型融合

多裁剪影像評估和模型融合依舊對錯誤率的降低很有成效,對比起來看,模型融合功效更大,當然兩著是互補的,可以同時使用,
思考
Inception module帶來了空間維度上的多尺度注意力機制,此外,還可以理解為讓網路自己學習所需要的卷積核尺寸,以前的網路都需要人工的去設計卷積核的大小,而Inception網路不需要人為決定使用多大的卷積核,或者是否需要池化,讓網路自行學習,
Incepetion V2
《Rethinking the Inception Architecture for Computer Vision》
論文地址:https://arxiv.org/abs/1512.00567.
2015年,Google團隊又對其進行了進一步發掘改進,推出了Incepetion V2和V3,Inception v2與Inception v3被作者放在了一篇paper里面,
網路結構改進
1.Inception module
在Incepetion V1基礎上進一步考慮減少引數,讓新模型在使用更少訓練引數的情況下達到更高的性能,
演算法科學家們根據對卷積網路的各種架構選擇的大規模實驗,描述一些設計原則, 以下原則的效用是推測性的,未來需要更多的實驗證據來評估其準確性和有效性領域,但對這些原則的嚴重偏離往往會導致網路質量的惡化,使用這些準則,通常會導致架構的改善,
通用設計準則:
1)避免特征表達瓶頸,尤其是在網路的淺層,避免資訊極度壓縮帶來的瓶頸,一般而言,從輸入層到輸出層特征維度大小應該緩慢下降,
2)高維度特征表達在網路的區域中處理起來更加容易,增加CNN每個神經元的激活值會更多地解耦合特征,會使得網路訓練更快,(在高層的Inception結構中3x3拆分成了1x3和3x1的卷積核,以增強資訊表征),
3)空間資訊聚集可以通過低維度嵌入來完成,而且在幾乎不損失特征表達能力的情況下,網路后面可以使用像bottleneck的模塊,可以在卷積之前先用1*1的卷積核實作降維(作者認為網路后面的feature maps通道內的資訊相關性高,所以在通道層次降維并沒有太多不利影響,同時還加快了訓練),
4)平衡網路寬度和深度,瘦高或矮胖的CNN網路都不如一個身材勻稱的網路的效果好,
下面是一些具體改進:
吸取同時期VGGNet里面的思路,將大卷積核替換成連續的小卷積核(同樣的,卷積之后都接ReLu,多一些非線性,增加網路的特征表達能力),進一步探索是否可以更小,使用非對稱卷積,nxn的卷積可通過1xn卷積后接nx1卷積來替代,同樣的輸出大小,引數個數少了,在網路的前期使用這種分解效果并不好,在中等大小的特征圖上使用效果才會更好(對于mxm大小的特征圖,建議m在12~20),

最后一個結構被正式用在IncepetionV2中,
2.輔助分類器(Auxiliary Classifiers)
輔助分類器在訓練早期并不會推動收斂:在訓練中在到達很高準確率之前,有沒有輔助分類器的存在似乎并不影響,在訓練末期,帶有輔助分類器的網路就會超過沒有輔助分類器的網路,
將淺層的輔助分類器移走對于網路最后的結果沒有任何作用,也就是這個分類器沒用,說明這些輔助分類器能不夠幫助低層特征訓練,(文中認為輔助分類器其實是起到了泛化的作用,是一個正則化方法,因為,網路的主分類器能夠取得更好的結果如果輔助分類器采用batch-normalized或者引入dropout,)
3.有效的特征圖降維方式
傳統的卷積網路會使用一些pooling操作來減少特征圖的大小,為了避免特征表達瓶頸bottleneck,減少資訊的過度丟失,會在加入池化層減少特征圖大小的同時都會同比例擴大它的通道數目,VGGNet
兩種較為傳統的做法:
1.先做Pooling減少特征圖尺寸,然后再使用1x1 conv對其通道數目放大,不過顯然首先使用Pooling的話會造成資訊硬性丟失的不可避免,在此之后再使用1x1 conv去增加通道數目的做法已經有亡羊補牢之嫌了,
2.先將通道數目擴大(一般使用1x1 conv),然后再使用Pooling來減少特征圖尺寸,不過顯然會有非常大的計算開銷,

作者提出同時做pooling和conv,stride為2,減少特征圖尺寸,之后再將兩者算出的特征圖contact起來,在減少計算量的同時也避免了表達瓶頸,符合上面提出的準則1(避免特征表達瓶頸),即有效的特征圖降維將卷積和池化的串行變為并行進一步減少計算量,
V2(左)和V1(右)對比:

*只有模塊交接處會進行Efficient Grid Size Reduction,
4.整體結構


只要遵守第二個準則,網路的質量對于變化是相對穩定的,雖然網路有42層深度,但計算成本只比GoogLeNet高2.5左右,仍然比VGGNet的效率高得多,
此外可以看見,非對稱卷積只在中等大小的特征圖上使用,
每一個conv都是 卷積+batch norm+ReLu
pytorch的代碼和論文中給出的結構有細微差別,感興趣的可以查看原始碼,
輔助分類器如下圖,加在3×Inception的后面:

5.BatchNorm

Incepetion V3
網路結構改進(RMSProp優化器 LabelSmoothing et.)
Inception-v3比Inception-v2增加了幾種處理:
1)RMSProp優化器
2)使用了LabelSmoothing(label-smoothing regularization,或者LSR)
3)第一個figure6結構(inception_b)的7x7卷積分解為3個3x3卷積(其他的figure6結構inception_c有非對稱卷積,可以去看原始碼)
4)輔助分類器使用了 BatchNorm, 同時輸入影像大小變成299x299,
對于低像素圖片分類的探索
一個典型情況是目標檢測后的分類,這就需要對包含了一個單獨目標以及一些背景的一個相對比較小的圖片patch進行分析,這個任務就是決定圖片patch中心是否對應了某個目標并且決定這個目標屬于哪一類,這個任務的挑戰在于往往這些目標都是較小的而且圖片patch也是低像素的,


如何恰當地處理低像素的輸入?
如果僅僅只改變輸入的像素而不調整模型的話,我們會使用一個計算開銷小的模型去處理一個困難的問題,顯然這樣是不行的,當計算開銷不變的時候,到底多高的輸入像素會幫助更大呢?一個簡單的方法來保證計算開銷不變就是降低前兩層的步長,或者直接取消網路的第一個pooling層(計算開銷改變不大),于是做了如下實驗:
79x79的感受野,在第一層(步長1)之后不跟最大池化,
151x151的感受野,在第一層(步長1)之后跟上最大池化,
299x299的感受野,在第一層(步長2)之后跟上最大池化,

那么這三個網路計算開銷基本差不多,單純根據輸入的像素來降低網路大小,網路的效果就會非常差,從上表的結果,我們可以發現,對于小物體的識別,還是需要考慮使用精心設計的高計算開銷低解析度網路,
總結
提出了有效擴大網路的四個準則以及很多新觀點:非對稱卷積進一步減小引數(只對中等大小的特征圖有效12-20),輔助分類器的有效應用是一種泛化手段,有效的特征圖降維將卷積和池化的串行變為并行進一步減少計算量,Label Smoothing,以及對于低像素圖片分類的實驗,
上一篇:CNN卷積神經網路之VGGNet.
下一篇:CNN卷積神經網路之ResNet.
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/261875.html
標籤:其他
