一般的DNN直接將全部信息拉成一維進(jìn)行全連接,會丟失圖像的位置等信息。
CNN(卷積神經(jīng)網(wǎng)絡(luò))更適合計(jì)算機(jī)視覺領(lǐng)域。下面總結(jié)從1998年至今的優(yōu)秀CNN模型,包括LeNet、AlexNet、ZFNet、VGG、GoogLeNet、ResNet、DenseNet、SENet、SqueezeNet、MobileNet。在了解巨佬們的智慧結(jié)晶,學(xué)習(xí)算法上的思路和技巧,便于我們自己構(gòu)建模型,也便于我們做遷移學(xué)習(xí)。
在觀看了斯坦福的CS231n課程視頻和同濟(jì)子豪兄的視頻后很有感悟,但在csdn發(fā)現(xiàn)沒有類似詳細(xì)的總結(jié),希望幫到一些小白,搭配子豪兄的視頻食用更佳哦。
- 卷積可以 提取原圖中符合卷積核特征的特征,賦予神經(jīng)網(wǎng)絡(luò) 局部感受野,權(quán)值共享(卷積核是共享的)。
- 池化(下采樣)目的是 減少參數(shù)量、防止過擬合、平移不變性(原圖像平移不改變模型判斷結(jié)果)
模型總結(jié)的主線以歷年ImageNet競賽的優(yōu)秀模型為主。
想高效入門深度學(xué)習(xí)的童鞋可以康康這篇哦:《一文極速理解深度學(xué)習(xí)》
其中一些經(jīng)典模型的代碼實(shí)現(xiàn)可以康康這篇!《經(jīng)典卷積神經(jīng)網(wǎng)絡(luò)Python,TensorFlow全代碼實(shí)現(xiàn)》
LeNet
1998年提出的模型,為了識別手寫數(shù)字。7層CNN,網(wǎng)絡(luò)結(jié)構(gòu)就是 卷積池化+卷積池化+3層全連接
為了節(jié)省運(yùn)算,不是所有通道都參與下一個(gè)卷積運(yùn)算。
輸出層不是用softmax,而是用了高斯連接。
采用了 Sigmoid / tanh 激活函數(shù)。
AlexNet
總結(jié)網(wǎng)絡(luò)結(jié)構(gòu)與LeNet差不多,但有更深的模型,更多卷積核,且處理的是自然圖像,而不是手寫數(shù)字。是ImageNet 2012年的winner,首次使用CNN,精度大幅提升,具有跨時(shí)代意義,之后所有CV領(lǐng)域的模型都是基于卷積神經(jīng)網(wǎng)絡(luò)。
原論文圖中輸入應(yīng)該是227*227*3,原論文有誤。因?yàn)楫?dāng)時(shí)GPU內(nèi)存不夠,所以用2個(gè)GPU,每個(gè)GPU有48個(gè)卷積核,將模型并行計(jì)算。
卷積池化歸一化統(tǒng)一算一層卷積層,因?yàn)槌鼗蜌w一化沒有參數(shù),所以是8層CNN。
參數(shù)量有6千萬,比LeNet多了3個(gè)數(shù)量級。
NORM層是局部響應(yīng)歸一化層,現(xiàn)在很少用了,現(xiàn)在用Batch Normalization挺好的。
AlexNet使用了ReLU激活函數(shù),Softmax輸出層,最大池化,使用了圖像數(shù)據(jù)增強(qiáng),使用了Dropout(0.5),還用7個(gè)類似的模型進(jìn)行了模型集成(精度提高了2.8%)。
核心創(chuàng)新點(diǎn):
ZFNet
ImageNet競賽2013年冠軍。結(jié)構(gòu)跟AlexNet沒有本質(zhì)區(qū)別,也是8層CNN,主要進(jìn)行了超參數(shù)的優(yōu)化,就是改改卷積的大小和步長。
但是他們這篇論文的核心貢獻(xiàn)點(diǎn)是可視化神經(jīng)網(wǎng)絡(luò),提出了反卷積、反池化、反激活,把feature map重構(gòu)回原始輸入空間,從而我們能直觀看到底層的卷積核提取底層的邊緣、顏色,越到高層卷積核提取的特征就越抽象和復(fù)雜,直觀地理解CNN提取了哪些特征和特征的重要些。
VGG
2014年ImageNe分類競賽亞軍,但是在一個(gè)定位競賽中是冠軍。
VGG創(chuàng)新地只用了3*3卷積核,并將網(wǎng)絡(luò)加深。
一共5個(gè)block,每個(gè)block有卷積和池化。VGG16表示共16個(gè)帶參數(shù)的層,還有個(gè)VGG19,只是在最后3個(gè)block分別加了一個(gè)卷積層。
主要的點(diǎn)是發(fā)揮了感受野的重要性,因?yàn)?層3*3卷積的感受野與1層7*7的卷積的感受野相同(2層3*3卷積的感受野與1層5*5的卷積的感受野相同),但3層3*3卷積會帶來更少的參數(shù)、更深的網(wǎng)絡(luò)、更多非線性變換。
但參數(shù)有點(diǎn)臃腫
GoogLeNet (InceptionNet)
2014年ImageNe分類競賽冠軍。
之前的網(wǎng)絡(luò)結(jié)構(gòu)主要是堆疊卷積池化,GoogLeNet網(wǎng)絡(luò)創(chuàng)新提出Inception module,主要堆疊這個(gè) Inception module。
本質(zhì)是多尺度并行卷積和池化(1*1,3*3,5*5).因?yàn)橛袝r(shí)圖像中重點(diǎn)區(qū)域大小不一樣(比如小狗的近照和遠(yuǎn)照),多個(gè)卷積核運(yùn)算賦予同一張圖不同感受野,充分地提取出圖像特征。
問題來了,這樣子將feature map直接摞起來,會越來越厚,計(jì)算量會非常大。
解決方法:1*1卷積
好處:升維或降維、跨通道信息交融、減少參數(shù)量、增加模型深度(提高非線性能力)。
子豪兄的這頁P(yáng)PT總結(jié)得非常好:
在 network in network 這篇論文中提出1*1卷積的重要性,(a)說明了28*28*256的輸入經(jīng)過32個(gè)5*5卷積,共需要201.8K個(gè)參數(shù);(b)說明了28*28*256的輸入先經(jīng)過16個(gè)1*1卷積降維,再經(jīng)過32個(gè)5*5卷積升維,得到同樣大小的輸出,但是只需要16.9K個(gè)參數(shù),且增加了模型深度,充分說明了1*1卷積的好處。
經(jīng)過改進(jìn):
參數(shù)少了很多,不錯(cuò)。
最終GoogLeNet網(wǎng)絡(luò)結(jié)構(gòu)(Deeper networks, with computational efficiency):
總共22個(gè)帶參數(shù)的層 (并行的算1層)
ResNet
2015年是神仙打架的一年,真正開啟了深度神經(jīng)網(wǎng)絡(luò),CNN也是這一年超越了人類圖像分類的水平。ResNet就是2015年ImageNet競賽的冠軍,由何凱明團(tuán)隊(duì)提出,當(dāng)時(shí)在圖像分類、語義分隔、定位等方面均戰(zhàn)勝了歷年來所有的模型,大喊一聲:還有誰!
下面好好了解一下這個(gè)masterpiece。
首先當(dāng)時(shí)的理念是網(wǎng)絡(luò)層數(shù)不是越深越好。主要是梯度消失和網(wǎng)絡(luò)退化現(xiàn)象
ResNet創(chuàng)新地提出 殘差模塊(Residual block):
核心思想就是在深層網(wǎng)絡(luò)中卷積的輸出等于淺層網(wǎng)絡(luò)的結(jié)果加上殘差,殘差就是經(jīng)過深層網(wǎng)絡(luò)訓(xùn)練的結(jié)果,如果經(jīng)過深層網(wǎng)絡(luò)訓(xùn)練得到0,那么輸出也是淺層網(wǎng)絡(luò)的結(jié)果,至少模型不會變差,所以堆疊多個(gè)殘差模塊的結(jié)果必然是比淺層模型更好的。
所以ResNet網(wǎng)絡(luò)可以瘋狂加深,總層數(shù)可以為34、50、101或152層。
- 用了步長為2的卷積代替池化。
- 用了MSRA初始化
- 用了Batch normalization,激活函數(shù)是 SGD+Momentum(0.9)
- 用了Global Average Pooling(GAP),大量節(jié)省了參數(shù)。
DenseNet
2017 CVPR最佳paper。
Dense Block(每一層都與前面層相連):
SENet
2017年(最后一屆)ImageNet競賽冠軍,由胡杰團(tuán)隊(duì)提出。
SENet的核心就是自適應(yīng)學(xué)習(xí)得到每個(gè)feature map通道的權(quán)重。
基于GAP(Global Average Pooling)去提取U中每個(gè)通道的權(quán)重,然后再把U和權(quán)重乘起來。它可以集成在任何網(wǎng)絡(luò)的后面(Inception、resnet等)。
SqueezeNet
由巨佬Song Han提出,主要為了保持精度的同時(shí)壓縮模型。
MobileNet
重點(diǎn)也是壓縮模型,為了使AI模型在邊緣的移動設(shè)備上運(yùn)行(邊緣計(jì)算)。
核心是讓每個(gè)通道分別用不同的卷積核卷積,再用1*1卷積跨通道融合特征。
小總結(jié)
很好的模型總結(jié)圖!