神經網路模型:Backbone
參考:神經網路模型(Backbone) - silence_cho - 部落格園
自己搭建神經網路時,一般都採用已有的網路模型,在其基礎上進行修改。從2012年的AlexNet出現,如今已經出現許多優秀的網路模型,如下圖所示。 主要有三個發展方向:
Deeper:網路層數更深,代表網路VggNet
Module: 採用模組化的網路結構(Inception),代表網路GoogleNet
Faster: 輕量級網路模型,適合於移動端裝置,代表網路MobileNet和ShuffleNet
Functional: 功能型網路,針對特定使用場景而發展出來。如檢測模型YOLO,Faster RCNN;分割模型FCN, UNet
其發展歷史可以分為三個階段:
這些模型在ImageNet上的表現效果對比如下:
1。 LeNet-5
LeNet-5是LeCun在1998年的論文中Gradient-Based Learning Applied to Document Recognition 提出的網路模型,其結構如下:(其中卷積為5*5的kernel,下采樣為2*2的MaxPooling),其結構比較簡單,關於LeNet-5結構設計的詳細分析,參見:參考一,參考二
2. AlexNet
AlexNet是Alex Krizhevsky在2012的文章ImageNet Classification with Deep Convolutional Neural Networks中提出,其結構模型如下:(分上下兩部分卷積,計算力不足,放在兩塊GPU上)
AlexNet的特色:
(1) Training on Multiple Gpus: 受於當時的算力限制,Alexnet創新地將影象分為上下兩塊分別訓練,然後在全連線層合併在一起
(2) ReLU Nonlinearity: 採用ReLU啟用函式代替Sigmoid或tanh, 解決了梯度飽和的問題
(3)Local Response Normalization: 區域性響應歸一化,
(4) Data Augmentation: 擴增資料,減小過擬合:第一種是 摳圖(從256x256摳出224x224)加上水平反轉。第二種是 改變RGB顏色通道強度。
5) Dropout: 以一定機率捨棄神經元輸出,減小過擬合。
3.ZFNet
ZFNet是2013年的論文Visualizing and Understanding Convolutional Networks中提出,是2013年ILSVRC的冠軍。這篇文章使用反捲積(Deconvnet),視覺化特徵圖(feature map),透過視覺化Alex-net指出了Alex-net的一些不足,最後修改網路結構,使得分類結果提升;是CNN領域視覺化理解的開山之作,作者透過視覺化解釋了為什麼CNN有非常好的效能、如何提高CNN效能,然後進行調整網路,提高了精度(參考文章)
ZFNet透過修改結構中的超引數來實現對AlexNet的改良,具體說來就是增加了中間卷積層的尺寸,讓第一層的步長和濾波器尺寸更小。其網路結構的兩種表示圖如下:
相比於AlexNet其改進如下
:(ImageNet top5 error:16。4%提升到11。7%)
(1) Conv1: 第一個卷積層由(11*11, stride=4)變為(7*7,stride=2)
(2) Conv3, 4, 5: 第三,四,五個卷積核的通道數由384,384,256變為512,1024,512
4. VGGNet
VGGNet是2014年論文Very Deep Convolutional Networks for Large-scale Image Recognition 中提出,2014年的ImageNet比賽中,分別在定位和分類跟蹤任務中取得第一名和第二名,其主要的貢獻是展示出網路的深度(depth)是演算法優良效能的關鍵部分,其結構如下:
VGGNet的特色
:(參考1, 參考2)
(1) 結構簡潔:5層卷積層、3層全連線層、softmax輸出層構成,層與層之間使用max-pooling(最大化池)分開,所有隱層啟用單元都採用ReLU函式。
(2)小卷積核和多卷積核:VGG使用多個較小卷積核(3x3)的卷積層代替一個卷積核較大的卷積層,一方面可以減少引數,另一方面相當於進行了更多的非線性對映,可以增加網路的擬合/表達能力。
VGG的作者認為兩個3x3的卷積堆疊獲得的感受野大小,相當一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感受野相當於一個7x7的卷積。這樣可以增加非線性對映,也能很好地減少引數(例如7x7的引數為49個,而3個3x3的引數為27),如下圖所示:
VGGNet提出的結論:
(1) LRN層無效能增益(A-LRN):AlexNet曾經用到的LRN層(local response normalization,區域性響應歸一化)並沒有帶來效能的提升
(2) 隨著深度增加,分類效能逐漸提高(從11層到19層)
(3) 多個小卷積核比單個大卷積核效能好
5. GoogLeNet
5.1 GoogLeNet V1
GoogLetNet V1是在2014年論文Going deeper with convolutions中提出的,ILSVRC 2014的勝利者。相比於VGG,其並不是單純的將網路加深,還引入了Inception模組的概念,最終效能和VGG差不多,但引數量更少。
Inception提出原因:傳統網路為了減少引數量,減小過擬合,將全連線和一般卷積轉化為隨機稀疏連線,但是計算機硬體對非均勻稀疏資料的計算效率差,
為了既保持網路結構的稀疏性,又能利用密集矩陣的高計算你效能,Inception網路結構的主要思想是尋找用密整合分來近似最優區域性稀疏連線
,透過構造一種“基礎神經元”結構,來搭建一個稀疏性、高計算效能的網路結構
Inception的結構如下圖所示:
Inception架構特點:
(1)加深的基礎上進行加寬,稀疏的網路結構,但能產生稠密的資料,既能增加神經網路表現,又能保證計算資源的使用效率
(2) 採用不同大小的卷積核意味著不同的感受野,最後在channel上拼接,意味著不同尺度的特徵融合
(3)採用1*1卷積,一是減少維度來減少計算量和引數,二是修正線性啟用,增加非線性擬合能力(每個1*1後都有ReLU啟用函式)
以Inception為基礎模組,GoogLeNet V1的整體網路架構如下(共22層):
GoogLeNet V1網路特色:
(1) 採用Inception模組化結構,方便新增修改
(2) 採用Average Pool 來代替全連線層(借鑑Network in Network),實際在最後一層還是添加了一個全連線層,方便做finetune。
(3) 另外增加了兩個輔助的softmax分支(incetion 4b和4e後面),作用有兩點,一是為了避免梯度消失,用於向前傳導梯度。反向傳播時如果有一層求導為0,鏈式求導結果則為0。二是將中間某一層輸出用作分類,起到模型融合作用。最後的loss=loss_2 + 0。3 * loss_1 + 0。3 * loss_0。實際測試時,這兩個輔助softmax分支會被去掉。
5.2 GoogLeNet V2, V3
GoogLeNet V2, V3是在2015年論文 Rethinking the Inception Architecture for Computer Vision 中提出,主要是對V1的改進。
GoogLeNet v2的Inception結構和整體的架構如下:
GoogLeNet V2網路特點:
(1) 借鑑VGG,用兩個3*3卷積代替一個5*5卷積,降低引數量,提高計算速度(如上圖Figure5中Inception)
(2)它們將濾波器大小nxn的卷積分解為1xn和nx1卷積的組合(7x7卷積相當於首先執行1x7卷積,然後在其輸出上執行7x1卷積,如上圖Figure6中Inception),但在網路的前期使用這種分解效果並不好,在中度大小的特徵圖(feature map)上使用效果才會更好(特徵圖大小建議在12到20之間)
(3) 為了同時保持特徵表示並降低計算量,將池化和卷積並行執行再合併,如下圖所示:
GoogLeNet V3
: V3包含了為V2規定的所有上述改進,另外還使用了以下內容:
(1)採用RMSProp最佳化器
(2) 學習Factorization into small convolutions的思想,將7x7分解成兩個一維的卷積(1x7,7x1),3x3也是一樣(1x3,3x1),這樣的好處,既可以加速計算(多餘的計算能力可以用來加深網路),又可以將1個conv拆成2個conv,使得網路深度進一步增加,增加了網路的非線性,還有值得注意的地方是網路輸入從224x224變為了299x299,更加精細設計了35x35/17x17/8x8的模組。
(3) 在輔助分類器中的使用BatchNorm。
(4) 採用標籤平滑(新增到損失公式中的一種正規化元件,可防止網路對類過於自信。防止過度擬合)
5.3 GoogLeNet V4
GoogLeNet V4(Inception V4)是在2016年的論文 Inception-v4, Inception-ResNet and the Impact of Residual Connections on Learning 中提出,主要是利用殘差網路(ResNet)來改進V3,得到Inception-ResNet-v1,Inception-ResNet-v2,Inception-v4網路。
6. ResNet
ResNet是何凱明在2015年的論文Deep Residual Learning for Image Recognition 中提出,ResNet網路提出了殘差網路結構,解決了以前深層網路難訓練的問題,將網路深度有GoogLeNet的22層提高到了152層。殘差網路(bottleneck)的結構如下:(參考1)
相比傳統網路:y=f(x),ResNet Block公式為:y=f(x) + x,可以稱之為skip connect。有兩個點需要思考下:一是其導數總比原導數加1,這樣即使原導數很小時,也能傳遞下去,能解決梯度消失的問題; 二是y=f(x) + x式子中引入了恆等對映(當f(x)=0時,y=2),解決了深度增加時神經網路的退化問題。
ResNet由多個Residual Block疊加成的,其結構如下:
其中Resnet-18/34採用的residual block和Resnet-50/101/152不太一樣,分別如下所示:
除了殘差結構,ResNet還有兩個細節需要關注下
:
(1)第一個卷積層採用了7*7的大卷積核,更大的感受野,獲取圖片更多的初始特徵(primary feature) (圖片channel=3,第一層使用大kernel,增加的引數量不是很大)·
(2)短路連線中,輸入和輸出維度不一致時,不能直接相加(Element-wise add),採用步長為2的卷積來減小維度尺寸?
7. DenseNet
DenseNet網路是在2017的論文 Densely Connected Convolutional Networks 中提出,與ResNet一致,也採用shortcut連線,但是其將前面所有層與後面層密集連線(dense connection), 另外其採用channel concatenate來實現特徵重用(代替ResNet的Element-wise addition)。其整體網路結構如下圖所示:
DenseNet網路包括Dense Block和Transition layer兩個基礎模組,Dense Block類似於ResNet中的residual block,其區別對比如下:
由上圖可以發現兩個主要區別
:(參考1)
1) DenseNet是密集連線,前面層和後面層間都有連線;ResNet只有相鄰層有連線
2) DenseNet是channel-wise concatenation; Resnet 是Element-wise addition
DenseNet的Transition layer主要是用來降低feature map的尺寸,將來自不同層的feature map變化為同等尺寸後進行concatenate,其結構如下:
BN + ReLU+1*1 Conv + 2*2 Average Pool
DenseNet的特點:
(1) 由於密集連線方式,DenseNet提升了梯度的反向傳播,使得網路更容易訓練 (每層可以直達最後的誤差訊號)
(2) 引數更小且計算更高效 (concatenate來實現特徵複用,計算量很小)
(3) 由於特徵複用,分類器使用到了低階特徵
(4) 需要較大的視訊記憶體才能執行(所有層都需儲存?)
參考:
https://
zhuanlan。zhihu。com/p/66
215918
https://
zhuanlan。zhihu。com/p/22
038289
上述都是些大型的經典網路,執行較慢,需要的較大的算力,而輕量級網路則採用不同的設計和模型架構,來應對移動端裝置上的使用,目前主要的輕量級網路包括 SqueezzeNet, MobileNet和ShuffleNet,其發展歷史如下:
這些網路實現輕量級的主要方法如下:
(1) 最佳化網路結構: shuffle Net
(2) 減少網路的引數: Squeeze Net
(3) 最佳化卷積計算: MobileNet(改變卷積的順序); Winograd(改變卷積計算方式)
(4) 刪除全連線層: Squeeze Net; LightCNN
8
. SqueezeNet
SqueezeNet是在2017年的論文 SqueezeNet: AlexNet-level accuracy with 50x fewer parameters and <0。5MB model size 中提出, squeezeNet的模型壓縮策略主要有三個:(Idea from GoogLeNet) (參考1)
(1) 多使用1*1的卷積,少使用3*3的卷積,減少引數量
(2) 3*3卷積採用更少的channel數
(3) 將降取樣後置,即推遲使用Pooling,從而增加感受野,儘可能多的獲得feature
SqueezeNet的網路基礎單元是Fire Module,多個fire module堆疊,結合pooling組成SqueezeNet,如下圖所示:(右邊兩張加入了shortcut)
Fire Module又包括兩部分:squeeze layer 和 Expand layer,如下圖所示:
squeeze layer
:主要是1*1的卷積,對網路channel進行壓縮,卷積核的個數為S1
expand layer
:1*1的卷積個數為E1,3*3的卷積個數為E3(上圖中E2應該為E3),然後進行concate。
論文中關於E1, E3,S1的關係描述如下:
9. MobileNet
9.1 MobileNet V1
MobileNet V1是在2017年Google的論文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 中提出,其主要壓縮策略是深度可分離卷積(Depthwise separable Convolution),其包括兩步,如下圖所示:
(1)
深度卷積
:將卷積拆分為單通道的形式,在不改變輸入特徵影象的深度的情況下,對每一通道進行卷積操作,得到和輸入特徵圖通道數一致的輸出特徵圖。如下圖,輸入12×12×3的特徵圖,經過5×5×1×3的深度卷積之後,得到了8×8×3的輸出特徵圖。輸入個輸出的維度是不變的3。
(2)
逐點卷積
:即1*1的卷積,對深度卷積得到的特徵圖進行升維,如下圖,8×8×3的特徵圖,透過1*1*3*256的卷積,輸出8*8*256的輸出特徵圖。
引數量和計算量對比:
深度可分離卷積和傳統卷積相比操作和引數更少,如下圖所示,可以發現深度可分離卷積運算元和引數都是傳統卷積的(1/N +1/Dk2), 採用3*3卷積時大約是1/9。(但模型精度大概只降低1%)
模型結構對比:
深度可分離卷積單元相比傳統卷積多一個ReLU6啟用函式和1*1卷積層,對比如下圖:
MobileNet V1網路的整體架構如下圖, 多個深度卷積的堆疊(s2表示步長為2):
MobileNet V1還可以引入結構超引數來進一步壓縮網路,主要是在kernel的深度和尺寸兩方面,如下圖:
9.2 MobileNet V2
MobileNet V2是在2018年的論文 MobileNetV2: Inverted Residuals and Linear Bottlenecks 中提出,對V1的卷積單元進行了改進,主要引入了Linear bottleneck和Inverted residuals。
(1)
Linear bottleneck
: 在原始V1訓練時容易出現卷積層引數為空的現象,這是由於ReLU函式:
對低維度做ReLU運算,很容易造成資訊的丟失。而在高維度進行ReLU運算的話,資訊的丟失則會很少
;因此去掉卷積單元中最後一個ReLU函式。(Linear bottleneck: Eltwise + with no ReLU at the end of the bottleneck)
(2)
Inverted Residual
: 深度卷積本身沒有改變channel的能力,
來的是多少通道輸出就是多少通道
。如果來的通道很少的話,DW深度卷積只能在低維度上工作,這樣效果並不會很好,所以
我們要“擴張”通道
。既然我們已經知道
PW逐點卷積也就是1×1卷積可以用來升維和降維
,那就可以
在DW深度卷積之前使用PW卷積進行升維(升維倍數為t,t=6),再在一個更高維的空間中進行卷積操作來提取特徵
,隨後再進行降維。
(Inverted Residual: expand - transfer - reduce)
對比下V2和ResNet的結構,如下圖:可以發現V2是先升,卷積,降維,和ResNet(降維,卷積,升維)相反,因此成為Inverted residual。
Linear bottleneck和Inverted Residual解釋:
對比下V1和V2的卷積結構單元,如下圖:V2將最後一層的ReLU6換成了Linear,並引入了shortcut進行升維和降維(最右邊的stride=2減小尺寸,所以沒有shortcut)。
MobileNet V2的整體結構如下圖:
9.3 MobileNet V3
MobileNet V3在2019年的論文Searching for MobileNetV3 中提出,還沒啃完,有空來填坑。
10 ShuffleNet
10.1 shuffleNet V1
shuffleNet V1 是2017年在論文ShuffleNet: An Extremely Efficient Convolutional Neural Network for Mobile Devices 中提出的,其主要壓縮思路是group convolution 和 channel shuffle。
(1)
group convolution
(
分組卷積
): 分組卷積的思路是將輸入特徵圖按通道數分為幾組,然後採用不同的卷積核再對各個組進行卷積,這樣會降低卷積的計算量。傳統的卷積是卷積核在所有通道上進行卷積,算全通道卷積,而分組卷積算通道上的稀疏卷積,如下圖所示。(mobileNet算是一種特殊的分組卷積,分組數和通道數一樣)
(2)
channel shuffle
(
通道混洗
) : 分組卷積以一個問題是不同組之間的特徵圖資訊不通訊,就好像分了幾個互不相干的路,大家各走各的,會降低網路的特徵提取能力。MobileNet是採用密集的1*1pointwise convolution進行通道特徵融合,計算量較大。channel shuffle的思路是對分組卷積之後的特徵圖的排列順序進行打亂重新排列,這樣下一個分組卷積的輸入就來自不同的組,資訊可以在不同組之間流轉。channel shuffle的實現步驟如下圖所示:reshape——transpose-flatten
shufflleNet V1網路的基本單元如下圖所示,相比a圖中,b圖將1x1的密集卷積換成分組卷積,添加了一個channel shuffle,另外3x3的depthwise convolution之後沒有使用ReLU啟用函式,圖c中則採用stride=2,同時將elment-wise add 換成了concat。
shuffleNet V1特點,以及和ResNet和mobileNet的對比如下:
ShuffleNet V1的整體架構如下,每個stage都是shuffleNet基本單元的堆疊。
10.2 shuffleNet V2
shuffleNet V2 是2018年在論文ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design中提出的, 論文中針對設計快速的輕量級模型提出了四條指導方針(Guidelines):
(1)
G1: 卷積層的輸入和輸出特徵通道數相等時MAC最小,此時模型速度最快
(2)
G2: 過多的 group操作會增大MAC,從而使模型速度變慢
(3)
G3: 模型中的分支數量越少,模型速度越快
(4)
G4:element-wise操作所帶來的時間消耗遠比在FLOPs上的體現的數值要多,因此要儘可能減少element-wise操作
。
論文中接著分析了其他網路模型違背了相應的原則方針,如下圖所示:
針對上述四條guidelines,論文提出shuffleNet V2的基本單元,如下圖:
(1) channel split然後concat,保證輸入輸出channel一致,遵循準則1?
(2) 去掉1*1的分組卷積(channel split相當於分組了),遵循準則2
(3) channel split和將channel shuffle移動到後面,遵循準則3?
(4)利用concat代替add,遵循準則4
最後shuffleNet V2的整體架構如下:
參考:
https://
baijiahao。baidu。com/s?
id=1589005428414488177&wfr=spider&for=pc