您當前的位置:首頁 > 舞蹈

神經網路模型:Backbone

作者:由 liuwei 發表于 舞蹈時間:2020-12-16

參考:神經網路模型(Backbone) - silence_cho - 部落格園

自己搭建神經網路時,一般都採用已有的網路模型,在其基礎上進行修改。從2012年的AlexNet出現,如今已經出現許多優秀的網路模型,如下圖所示。 主要有三個發展方向:

Deeper:網路層數更深,代表網路VggNet

Module: 採用模組化的網路結構(Inception),代表網路GoogleNet

Faster: 輕量級網路模型,適合於移動端裝置,代表網路MobileNet和ShuffleNet

Functional: 功能型網路,針對特定使用場景而發展出來。如檢測模型YOLO,Faster RCNN;分割模型FCN, UNet

神經網路模型:Backbone

其發展歷史可以分為三個階段:

神經網路模型:Backbone

這些模型在ImageNet上的表現效果對比如下:

神經網路模型:Backbone

1。 LeNet-5

LeNet-5是LeCun在1998年的論文中Gradient-Based Learning Applied to Document Recognition 提出的網路模型,其結構如下:(其中卷積為5*5的kernel,下采樣為2*2的MaxPooling),其結構比較簡單,關於LeNet-5結構設計的詳細分析,參見:參考一,參考二

神經網路模型:Backbone

神經網路模型:Backbone

2. AlexNet

AlexNet是Alex Krizhevsky在2012的文章ImageNet Classification with Deep Convolutional Neural Networks中提出,其結構模型如下:(分上下兩部分卷積,計算力不足,放在兩塊GPU上)

神經網路模型:Backbone

神經網路模型:Backbone

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的改良,具體說來就是增加了中間卷積層的尺寸,讓第一層的步長和濾波器尺寸更小。其網路結構的兩種表示圖如下:

神經網路模型:Backbone

相比於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)是演算法優良效能的關鍵部分,其結構如下:

神經網路模型:Backbone

神經網路模型:Backbone

 VGGNet的特色

:(參考1, 參考2)

(1) 結構簡潔:5層卷積層、3層全連線層、softmax輸出層構成,層與層之間使用max-pooling(最大化池)分開,所有隱層啟用單元都採用ReLU函式。

(2)小卷積核和多卷積核:VGG使用多個較小卷積核(3x3)的卷積層代替一個卷積核較大的卷積層,一方面可以減少引數,另一方面相當於進行了更多的非線性對映,可以增加網路的擬合/表達能力。

VGG的作者認為兩個3x3的卷積堆疊獲得的感受野大小,相當一個5x5的卷積;而3個3x3卷積的堆疊獲取到的感受野相當於一個7x7的卷積。這樣可以增加非線性對映,也能很好地減少引數(例如7x7的引數為49個,而3個3x3的引數為27),如下圖所示:

神經網路模型:Backbone

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的結構如下圖所示:

神經網路模型:Backbone

Inception架構特點:

(1)加深的基礎上進行加寬,稀疏的網路結構,但能產生稠密的資料,既能增加神經網路表現,又能保證計算資源的使用效率

(2) 採用不同大小的卷積核意味著不同的感受野,最後在channel上拼接,意味著不同尺度的特徵融合

(3)採用1*1卷積,一是減少維度來減少計算量和引數,二是修正線性啟用,增加非線性擬合能力(每個1*1後都有ReLU啟用函式)

以Inception為基礎模組,GoogLeNet V1的整體網路架構如下(共22層):

神經網路模型:Backbone

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結構和整體的架構如下:

神經網路模型:Backbone

神經網路模型:Backbone

 GoogLeNet V2網路特點:

(1) 借鑑VGG,用兩個3*3卷積代替一個5*5卷積,降低引數量,提高計算速度(如上圖Figure5中Inception)

(2)它們將濾波器大小nxn的卷積分解為1xn和nx1卷積的組合(7x7卷積相當於首先執行1x7卷積,然後在其輸出上執行7x1卷積,如上圖Figure6中Inception),但在網路的前期使用這種分解效果並不好,在中度大小的特徵圖(feature map)上使用效果才會更好(特徵圖大小建議在12到20之間)

(3) 為了同時保持特徵表示並降低計算量,將池化和卷積並行執行再合併,如下圖所示:

神經網路模型:Backbone

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)

神經網路模型:Backbone

相比傳統網路:y=f(x),ResNet Block公式為:y=f(x) + x,可以稱之為skip connect。有兩個點需要思考下:一是其導數總比原導數加1,這樣即使原導數很小時,也能傳遞下去,能解決梯度消失的問題; 二是y=f(x) + x式子中引入了恆等對映(當f(x)=0時,y=2),解決了深度增加時神經網路的退化問題。

ResNet由多個Residual Block疊加成的,其結構如下:

神經網路模型:Backbone

其中Resnet-18/34採用的residual block和Resnet-50/101/152不太一樣,分別如下所示:

神經網路模型:Backbone

除了殘差結構,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)。其整體網路結構如下圖所示:

神經網路模型:Backbone

神經網路模型:Backbone

DenseNet網路包括Dense Block和Transition layer兩個基礎模組,Dense Block類似於ResNet中的residual block,其區別對比如下:

神經網路模型:Backbone

神經網路模型:Backbone

 由上圖可以發現兩個主要區別

:(參考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

神經網路模型:Backbone

DenseNet的特點:

(1) 由於密集連線方式,DenseNet提升了梯度的反向傳播,使得網路更容易訓練 (每層可以直達最後的誤差訊號)

(2) 引數更小且計算更高效 (concatenate來實現特徵複用,計算量很小)

(3) 由於特徵複用,分類器使用到了低階特徵

(4) 需要較大的視訊記憶體才能執行(所有層都需儲存?)

參考:

https://

zhuanlan。zhihu。com/p/66

215918

https://

zhuanlan。zhihu。com/p/22

038289

上述都是些大型的經典網路,執行較慢,需要的較大的算力,而輕量級網路則採用不同的設計和模型架構,來應對移動端裝置上的使用,目前主要的輕量級網路包括 SqueezzeNet, MobileNet和ShuffleNet,其發展歷史如下:

神經網路模型:Backbone

這些網路實現輕量級的主要方法如下:

(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)

神經網路模型:Backbone

神經網路模型:Backbone

Fire Module又包括兩部分:squeeze layer 和 Expand layer,如下圖所示:

神經網路模型:Backbone

squeeze layer

:主要是1*1的卷積,對網路channel進行壓縮,卷積核的個數為S1

expand layer

:1*1的卷積個數為E1,3*3的卷積個數為E3(上圖中E2應該為E3),然後進行concate。

論文中關於E1, E3,S1的關係描述如下:

神經網路模型:Backbone

9. MobileNet

9.1 MobileNet V1

MobileNet V1是在2017年Google的論文 MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications 中提出,其主要壓縮策略是深度可分離卷積(Depthwise separable Convolution),其包括兩步,如下圖所示:

神經網路模型:Backbone

(1)

深度卷積

:將卷積拆分為單通道的形式,在不改變輸入特徵影象的深度的情況下,對每一通道進行卷積操作,得到和輸入特徵圖通道數一致的輸出特徵圖。如下圖,輸入12×12×3的特徵圖,經過5×5×1×3的深度卷積之後,得到了8×8×3的輸出特徵圖。輸入個輸出的維度是不變的3。

神經網路模型:Backbone

(2)

逐點卷積

:即1*1的卷積,對深度卷積得到的特徵圖進行升維,如下圖,8×8×3的特徵圖,透過1*1*3*256的卷積,輸出8*8*256的輸出特徵圖。

神經網路模型:Backbone

引數量和計算量對比:

深度可分離卷積和傳統卷積相比操作和引數更少,如下圖所示,可以發現深度可分離卷積運算元和引數都是傳統卷積的(1/N +1/Dk2), 採用3*3卷積時大約是1/9。(但模型精度大概只降低1%)

神經網路模型:Backbone

模型結構對比:

深度可分離卷積單元相比傳統卷積多一個ReLU6啟用函式和1*1卷積層,對比如下圖:

神經網路模型:Backbone

神經網路模型:Backbone

MobileNet V1網路的整體架構如下圖, 多個深度卷積的堆疊(s2表示步長為2):

神經網路模型:Backbone

MobileNet V1還可以引入結構超引數來進一步壓縮網路,主要是在kernel的深度和尺寸兩方面,如下圖:

神經網路模型:Backbone

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。

神經網路模型:Backbone

Linear bottleneck和Inverted Residual解釋:

神經網路模型:Backbone

對比下V1和V2的卷積結構單元,如下圖:V2將最後一層的ReLU6換成了Linear,並引入了shortcut進行升維和降維(最右邊的stride=2減小尺寸,所以沒有shortcut)。

神經網路模型:Backbone

MobileNet V2的整體結構如下圖:

神經網路模型:Backbone

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算是一種特殊的分組卷積,分組數和通道數一樣)

神經網路模型:Backbone

(2)

channel shuffle

通道混洗

) : 分組卷積以一個問題是不同組之間的特徵圖資訊不通訊,就好像分了幾個互不相干的路,大家各走各的,會降低網路的特徵提取能力。MobileNet是採用密集的1*1pointwise convolution進行通道特徵融合,計算量較大。channel shuffle的思路是對分組卷積之後的特徵圖的排列順序進行打亂重新排列,這樣下一個分組卷積的輸入就來自不同的組,資訊可以在不同組之間流轉。channel shuffle的實現步驟如下圖所示:reshape——transpose-flatten

神經網路模型:Backbone

shufflleNet V1網路的基本單元如下圖所示,相比a圖中,b圖將1x1的密集卷積換成分組卷積,添加了一個channel shuffle,另外3x3的depthwise convolution之後沒有使用ReLU啟用函式,圖c中則採用stride=2,同時將elment-wise add 換成了concat。

神經網路模型:Backbone

shuffleNet V1特點,以及和ResNet和mobileNet的對比如下:

神經網路模型:Backbone

ShuffleNet V1的整體架構如下,每個stage都是shuffleNet基本單元的堆疊。

神經網路模型:Backbone

10.2 shuffleNet V2

shuffleNet V2 是2018年在論文ShuffleNet V2: Practical Guidelines for Ecient CNN Architecture Design中提出的, 論文中針對設計快速的輕量級模型提出了四條指導方針(Guidelines):

(1)

G1: 卷積層的輸入和輸出特徵通道數相等時MAC最小,此時模型速度最快

神經網路模型:Backbone

(2)

G2: 過多的 group操作會增大MAC,從而使模型速度變慢

神經網路模型:Backbone

(3)

G3: 模型中的分支數量越少,模型速度越快

神經網路模型:Backbone

(4)

G4:element-wise操作所帶來的時間消耗遠比在FLOPs上的體現的數值要多,因此要儘可能減少element-wise操作

神經網路模型:Backbone

論文中接著分析了其他網路模型違背了相應的原則方針,如下圖所示:

神經網路模型:Backbone

針對上述四條guidelines,論文提出shuffleNet V2的基本單元,如下圖:

神經網路模型:Backbone

(1) channel split然後concat,保證輸入輸出channel一致,遵循準則1?

(2) 去掉1*1的分組卷積(channel split相當於分組了),遵循準則2

(3) channel split和將channel shuffle移動到後面,遵循準則3?

(4)利用concat代替add,遵循準則4

最後shuffleNet V2的整體架構如下:

神經網路模型:Backbone

參考:

https://

baijiahao。baidu。com/s?

id=1589005428414488177&wfr=spider&for=pc

標簽: 卷積  如下  網路  inception  channel