文獻簡介
CVPR2015 ? 計算機視覺和圖像處理相關(guān)領(lǐng)域頂級會議
本文是Google公司的Christian Szegedy等人于2014年提出的較深的網(wǎng)絡(luò),網(wǎng)絡(luò)層數(shù)達到22層策泣,其中提出了很多新穎的結(jié)構(gòu)和想法晴裹。并在ILSVRC2014中獲得了分類和檢測第一的好成績焙矛。該網(wǎng)絡(luò)的特點是提升了計算資源的利用率,可以在保持網(wǎng)絡(luò)計算資源不變的前提下,通過工藝上的設(shè)計來增加網(wǎng)絡(luò)的寬度和深度逮壁,基于Hebbian法則和多尺度處理來優(yōu)化性能。GoogLeNet用的參數(shù)比ILSVRC2012的冠軍AlexNet的參數(shù)少12倍粮宛,但準(zhǔn)確率更高窥淆。
2014年,GoogLeNet和VGG是當(dāng)年ImageNet挑戰(zhàn)賽(ILSVRC14)的雙雄巍杈,GoogLeNet獲得了第一名忧饭、VGG獲得了第二名,這兩類模型結(jié)構(gòu)的共同特點是層次更深了筷畦。VGG繼承了LeNet以及AlexNet的一些框架結(jié)構(gòu)(詳見? 大話CNN經(jīng)典模型:VGGNet)词裤,而GoogLeNet則做了更加大膽的網(wǎng)絡(luò)結(jié)構(gòu)嘗試刺洒,雖然深度只有22層,但大小卻比AlexNet和VGG小很多吼砂,GoogleNet參數(shù)為500萬個逆航,AlexNet參數(shù)個數(shù)是GoogleNet的12倍,VGGNet參數(shù)又是AlexNet的3倍渔肩,因此在內(nèi)存或計算資源有限時因俐,GoogleNet是比較好的選擇;從模型結(jié)果來看周偎,GoogLeNet的性能卻更加優(yōu)越抹剩。
文獻綜述
我們提出了一個代號為Inception的深度卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu),其目標(biāo)是將分類蓉坎、識別ILSVRC14數(shù)據(jù)集的技術(shù)水平提高一個層次澳眷。這種架構(gòu)的主要特點是提高了網(wǎng)絡(luò)內(nèi)部計算資源的利用率。通過細致設(shè)計袍嬉,我們增加了網(wǎng)絡(luò)的深度和寬度境蔼,并同時保持計算量不變。為了提高質(zhì)量伺通,網(wǎng)絡(luò)結(jié)構(gòu)基于赫布原則和多尺度處理規(guī)則設(shè)計箍土。我們提交給ILSVRC14的一個具體化身稱為GoogLeNet,這是一個22層深的網(wǎng)絡(luò)罐监,其質(zhì)量在分類和檢測方面進行評估吴藻。
應(yīng)用背景
一般來說,提升網(wǎng)絡(luò)性能最直接的辦法就是增加網(wǎng)絡(luò)深度和寬度弓柱,深度指網(wǎng)絡(luò)層次數(shù)量沟堡、寬度指神經(jīng)元數(shù)量。但這種方式存在以下問題:
(1)參數(shù)太多矢空,如果訓(xùn)練數(shù)據(jù)集有限航罗,很容易產(chǎn)生過擬合;
(2)網(wǎng)絡(luò)越大屁药、參數(shù)越多粥血,計算復(fù)雜度越大,難以應(yīng)用酿箭;
(3)網(wǎng)絡(luò)越深复亏,容易出現(xiàn)梯度彌散問題(梯度越往后穿越容易消失),難以優(yōu)化模型缭嫡。
所以缔御,有人調(diào)侃“深度學(xué)習(xí)”其實是“深度調(diào)參”。
解決這些問題的方法當(dāng)然就是在增加網(wǎng)絡(luò)深度和寬度的同時減少參數(shù)妇蛀,為了減少參數(shù)耕突,自然就想到將全連接變成稀疏連接笤成。但是在實現(xiàn)上,全連接變成稀疏連接后實際計算量并不會有質(zhì)的提升有勾,因為大部分硬件是針對密集矩陣計算優(yōu)化的疹启,稀疏矩陣雖然數(shù)據(jù)量少,但是計算所消耗的時間卻很難減少蔼卡。
那么,有沒有一種方法既能保持網(wǎng)絡(luò)結(jié)構(gòu)的稀疏性挣磨,又能利用密集矩陣的高計算性能雇逞。大量的文獻表明可以將稀疏矩陣聚類為較為密集的子矩陣來提高計算性能,就如人類的大腦是可以看做是神經(jīng)元的重復(fù)堆積茁裙,因此塘砸,GoogLeNet團隊提出了Inception網(wǎng)絡(luò)結(jié)構(gòu),就是構(gòu)造一種“基礎(chǔ)神經(jīng)元”結(jié)構(gòu)晤锥,來搭建一個稀疏性掉蔬、高計算性能的網(wǎng)絡(luò)結(jié)構(gòu)。
何為Inception矾瘾?
Inception歷經(jīng)了V1女轿、V2、V3壕翩、V4等多個版本的發(fā)展蛉迹,不斷趨于完善,本文只是介紹V1版本放妈。讀者可以查閱相關(guān)資料了解后續(xù)版本北救。
以下是Inception初始結(jié)構(gòu):
在初始結(jié)構(gòu)中,我們能夠看到芜抒,有卷積操作珍策,有濾波器級聯(lián),還有池化操作宅倒。
卷積操作示意圖:(具體過程可以查閱其它資料)
卷積會導(dǎo)致數(shù)據(jù)量增加:
濾波器級聯(lián)示意圖:
池化操作示意圖:(池化操作有很多種類型攘宙,均值池化,最大值池化唉堪,等等)
通過設(shè)計一個稀疏網(wǎng)絡(luò)結(jié)構(gòu)模聋,但是能夠產(chǎn)生稠密的數(shù)據(jù),既能增加神經(jīng)網(wǎng)絡(luò)表現(xiàn)唠亚,又能保證計算資源的使用效率链方。谷歌提出了最原始Inception的基本結(jié)構(gòu):
該結(jié)構(gòu)將CNN中常用的卷積(1x1,3x3灶搜,5x5)祟蚀、池化操作(3x3)堆疊在一起(卷積工窍、池化后的尺寸相同,將通道相加)前酿,一方面增加了網(wǎng)絡(luò)的寬度患雏,另一方面也增加了網(wǎng)絡(luò)對尺度的適應(yīng)性。
網(wǎng)絡(luò)卷積層中的網(wǎng)絡(luò)能夠提取輸入的每一個細節(jié)信息罢维,同時5x5的濾波器也能夠覆蓋大部分接受層的的輸入淹仑。還可以進行一個池化操作,以減少空間大小肺孵,降低過度擬合匀借。在這些層之上,在每一個卷積層后都要做一個ReLU操作平窘,以增加網(wǎng)絡(luò)的非線性特征吓肋。
然而這個Inception原始版本,所有的卷積核都在上一層的所有輸出上來做瑰艘,而那個5x5的卷積核所需的計算量就太大了是鬼,造成了特征圖的厚度很大,為了避免這種情況紫新,在3x3前均蜜、5x5前、max pooling后分別加上了1x1的卷積核弊琴,以起到了降低特征圖厚度的作用兆龙,這也就形成了Inception v1的網(wǎng)絡(luò)結(jié)構(gòu),如下圖所示:?
1x1的卷積核作用
naive的inception模塊問題:由于較高層會捕獲較高的抽象特征敲董,其空間集中度預(yù)計會減少紫皇。隨著轉(zhuǎn)移到更高層,3×3和5×5卷積的比例會增加腋寨,但3×3和5×5卷積代價是昂貴的聪铺,一旦池化單元添加到混合中,這個問題甚至?xí)兊酶黠@萄窜,輸出濾波器的數(shù)量等于前一階段濾波器的數(shù)量铃剔。池化層輸出和卷積層輸出的合并會導(dǎo)致這一階段到下一階段輸出數(shù)量不可避免的增加。雖然這種架構(gòu)可能會覆蓋最優(yōu)稀疏結(jié)構(gòu)查刻,但它會非常低效键兜,導(dǎo)致在幾個階段內(nèi)計算量爆炸。
1x1卷積的主要目的是為了減少維度穗泵,還用于修正線性激活(ReLU)普气。比如,上一層的輸出為100x100x128佃延,經(jīng)過具有256個通道的5x5卷積層之后(stride=1现诀,pad=2)夷磕,輸出數(shù)據(jù)為100x100x256,其中仔沿,卷積層的參數(shù)為128x5x5x256= 819200坐桩。而假如上一層輸出先經(jīng)過具有32個通道的1x1卷積層,再經(jīng)過具有256個輸出的5x5卷積層封锉,那么輸出數(shù)據(jù)仍為為100x100x256绵跷,但卷積參數(shù)量已經(jīng)減少為128x1x1x32 + 32x5x5x256= 204800,大約減少了4倍烘浦。
1×1(×N)卷積過濾器:
與正常的過濾器一樣抖坪,唯一不同的是它的大小是1×1,沒有考慮在前一層局部信息之間的關(guān)系闷叉。最早出現(xiàn)在 Network In Network的論文中 ,用于跨通道信息整合脊阴,使用1*1卷積是想加深加寬網(wǎng)絡(luò)結(jié)構(gòu) 握侧,在Inception網(wǎng)絡(luò)中用來降維,之后resnet,fasterrcnn,densenet, pspnet都有應(yīng)用嘿期。
如果一開始卷積作用在一個 平面圖(一個 channel//depth)上的時候品擎,1 * 1 的卷積層其實并沒有太大意義(相當(dāng)于對每個像素乘了一個常數(shù)),可是當(dāng)我們對一個有多通道的圖片進行 1 * 1 卷積時备徐,就是對每個通道進行了 線性組合萄传, 線性組合的參數(shù)其實就是卷積核的值。
(通道:由上一層filter產(chǎn)生蜜猾,上一層有N個filter則有N個通道)
假定該卷積層有M個filter秀菱,每個filter會對每一個通道都去卷積一遍,最后求和每個通道的卷積結(jié)果通過線性組合(求和等)蹭睡,得到最終的卷積衍菱。也就是說對于一張寬度W,高度H,通道數(shù)N的feature map (W*H*N),通過本層的M個1*1的filter的卷積之后,會變成一張W*H*M的feature map肩豁。若N>M脊串,其實就是降維了,反之即升維了清钥。
如果2個filters的1x1卷積層琼锋,那么數(shù)據(jù)就從原本的depth 3 降到了2。若用4個filters祟昭,則起到了升維的作用:
以GoogLeNet的3a模塊為例缕坎,輸入的feature map是28×28×192,3a模塊中1×1卷積通道為64从橘,3×3卷積通道為128,5×5卷積通道為32念赶,如果是naive Inception Module础钠,那么卷積核參數(shù)為1×1×192×64+3×3×192×128+5×5×192×32,而降維Inception Module對3×3和5×5卷積層前分別加入了通道數(shù)為96和16的1×1卷積層叉谜,這樣卷積核參數(shù)就變成了1×1×192×64+(1×1×192×96+3×3×96×128)+(1×1×192×16+5×5×16×32)旗吁,參數(shù)大約減少到原來的三分之一。
下面是基于Inception構(gòu)建了GoogLeNet的網(wǎng)絡(luò)結(jié)構(gòu)如下(共22層):
對上圖說明如下:
(1)GoogLeNet采用了模塊化的結(jié)構(gòu)(Inception結(jié)構(gòu))停局,方便增添和修改很钓;
(2)網(wǎng)絡(luò)最后采用了average pooling(平均池化)來代替全連接層,該想法來自NIN(Network in Network)董栽,事實證明這樣可以將準(zhǔn)確率提高0.6%码倦。但是,實際在最后還是加了一個全連接層锭碳,主要是為了方便對輸出進行靈活調(diào)整袁稽;
(3)雖然移除了全連接,但是網(wǎng)絡(luò)中依然使用了Dropout ;?
(4)為了避免梯度消失擒抛,網(wǎng)絡(luò)額外增加了2個輔助的softmax用于向前傳導(dǎo)梯度(輔助分類器)推汽。輔助分類器是將中間某一層的輸出用作分類,并按一個較小的權(quán)重(0.3)加到最終分類結(jié)果中歧沪,這樣相當(dāng)于做了模型融合歹撒,同時給網(wǎng)絡(luò)增加了反向傳播的梯度信號,也提供了額外的正則化诊胞,對于整個網(wǎng)絡(luò)的訓(xùn)練很有裨益暖夭。而在實際測試的時候,這兩個額外的softmax會被去掉撵孤。
GoogLeNet的網(wǎng)絡(luò)結(jié)構(gòu)圖細節(jié)如下:
注:上表中的“#3x3 reduce”迈着,“#5x5 reduce”表示在3x3,5x5卷積操作之前使用了1x1卷積的數(shù)量早直。
GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)明細表解析如下:
0寥假、輸入
原始輸入圖像為224x224x3,且都進行了零均值化的預(yù)處理操作(圖像每個像素減去均值)霞扬。
1糕韧、第一層(卷積層)
使用7x7的卷積核(滑動步長2,padding為3)喻圃,64通道萤彩,輸出為112x112x64,卷積后進行ReLU操作
經(jīng)過3x3的max pooling(步長為2)斧拍,輸出為((112 - 3+1)/2)+1=56雀扶,即56x56x64,再進行ReLU操作
2、第二層(卷積層)
使用3x3的卷積核(滑動步長為1愚墓,padding為1)予权,192通道,輸出為56x56x192浪册,卷積后進行ReLU操作
經(jīng)過3x3的max pooling(步長為2)扫腺,輸出為((56 - 3+1)/2)+1=28,即28x28x192村象,再進行ReLU操作
3a笆环、第三層(Inception 3a層)
分為四個分支,采用不同尺度的卷積核來進行處理
(1)64個1x1的卷積核厚者,然后RuLU躁劣,輸出28x28x64
(2)96個1x1的卷積核,作為3x3卷積核之前的降維库菲,變成28x28x96账忘,然后進行ReLU計算,再進行128個3x3的卷積(padding為1)熙宇,輸出28x28x128
(3)16個1x1的卷積核闪萄,作為5x5卷積核之前的降維,變成28x28x16奇颠,進行ReLU計算后,再進行32個5x5的卷積(padding為2)放航,輸出28x28x32
(4)pool層烈拒,使用3x3的核(padding為1),輸出28x28x192广鳍,然后進行32個1x1的卷積荆几,輸出28x28x32。
將四個結(jié)果進行連接赊时,對這四部分輸出結(jié)果的第三維并聯(lián)吨铸,即64+128+32+32=256,最終輸出28x28x256
3b祖秒、第三層(Inception 3b層)
(1)128個1x1的卷積核诞吱,然后RuLU,輸出28x28x128
(2)128個1x1的卷積核竭缝,作為3x3卷積核之前的降維房维,變成28x28x128,進行ReLU抬纸,再進行192個3x3的卷積(padding為1)咙俩,輸出28x28x192
(3)32個1x1的卷積核,作為5x5卷積核之前的降維湿故,變成28x28x32阿趁,進行ReLU計算后膜蛔,再進行96個5x5的卷積(padding為2),輸出28x28x96
(4)pool層脖阵,使用3x3的核(padding為1)皂股,輸出28x28x256,然后進行64個1x1的卷積独撇,輸出28x28x64屑墨。
將四個結(jié)果進行連接,對這四部分輸出結(jié)果的第三維并聯(lián)纷铣,即128+192+96+64=480卵史,最終輸出輸出為28x28x480
第四層(4a,4b,4c,4d,4e)、第五層(5a,5b)……搜立,與3a以躯、3b類似,在此就不再重復(fù)啄踊。
實驗結(jié)果
從GoogLeNet的實驗結(jié)果來看忧设,效果很明顯,差錯率比MSRA颠通、VGG等模型都要低址晕,對比結(jié)果如下表所示:?
筆記整理:唐柳
資料提供:文含,張躍飛顿锰,鄧若辰