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