不同cnn網絡的特點歸納

這是本人學習cnn網絡的總結

圖片的語義信息:視覺層、對象層和概念層。

AlexNet (8層結構,其中前5層爲卷積層,後面3層爲全連接層)創新點:
1.用relu替換sigmoid解決了sigmoid再網絡較深時的梯度彌散問題
2.使用drop隨機忽略一部分神經元,避免模型過擬合
3.使用最大池化替代平均池化
4.提出了LRN層,對局部神經元的活動創建競爭機制,使得其中響應比較大的值變得相對更大,並抑制其他反饋較小的神經元,增強了模型的泛化能力(在VGG中好像證明了沒啥用)。
5.使用CPU加速深度卷積網絡的訓練
6.數據增強,隨機截取指定大小區域圖片,水平翻轉,PCA處理(PCA(principal Component Analysis),即主成分分析方法,是一種使用最廣泛的數據壓縮算法。在PCA中,數據從原來的座標系轉換到新的座標系,由數據本身決定。轉換座標系時,以方差最大的方向作爲座標軸方向,因爲數據的最大方差給出了數據的最重要的信息。第一個新座標軸選擇的是原始數據中方差最大的方法,第二個新座標軸選擇的是與第一個新座標軸正交且方差次大的方向。重複該過程,重複次數爲原始數據的特徵維數。),增加噪聲

VGG系列 創新點:

  • 3個3x3卷積核來代替7x7卷積核,使用了2個3x3卷積核來代替5*5卷積核,這樣做的主要目的是在保證具有相同感知野的條件下,提升了網絡的深度,在一定程度上提升了神經網絡的效果。
  • 缺點:
  • VGG耗費更多計算資源,並且使用了更多的參數(這裏不是3x3卷積的鍋),導致更多的內存佔用(140M)。其中絕大多數的參數都是來自於第一個全連接層。VGG可是有3個全連接層啊!

VGG擁有5段卷積,每段有多個卷積層,同時,每段結束都會連接一個最大池化層,池化層的作用是特徵增強,同時縮小Feature Map的尺寸。在VGG網絡中,只有C結構設置了1x1的卷積核,其餘都是3x3的卷積,這種操作減小了參數量。

1x1 卷積作用

  • 非線性變換,跨通道的交互和信息整合
  • 升維(殘差模塊,resv1先用1x1降維,3x3卷積後再用1x1升維,Mobilenetv2中反過來)
  • 降維(殘差模塊,Inception模塊)

ResNet V1 V2:

  • ResNet V1網絡結構

在這裏插入圖片描述


兩種ResNet模塊,前者針對res18 34 後者針對res50 101 152

  • 圖a爲resnet v1結構,圖e爲resnet v2。
  • 圖e的結構好的原因在於兩點:1)反向傳播基本符合假設,信息傳遞無阻礙;2)BN層作爲pre-activation,起到了正則化的作用;
  • 該blog詳細分析了這幾個圖 https://blog.csdn.net/lanran2/article/details/80247515

Inception 系列:
從AlexNet以來,主流的網絡結構都是網絡更深(層數)更寬(神經元數),缺點是參數太多容易過擬合,容易出現梯度彌散。
Inception就是在增加網絡深度和寬度的同時減少參數。
1.採用了模塊化的結果,方便增添和修改;
2.網絡最後採用average pooling來代替全連接層,將top-1的成功率提高了0.6%; 3.網絡移除了全連接層,但 是保留了Dropout層;
4.網絡增加了兩個輔助的softmax用於向前傳到梯度,避免梯度消失。

Inception v1:
原始版本所有卷積在上一層的所有輸出來做,計算量太大,所以在3x3,5x5卷積和pooling前加了1x1卷積起到降維的作用。相比於NIN增加了分支。
在這裏插入圖片描述
Inception v2:
輸入層後面加入BN層,減少了內部神經元數據分佈變化,每一層的輸出都規範到一個N(0,1)的高斯分佈,同時還可以作爲一種正則化技術減少dropout的使用
用兩個3x3卷積代替5x5卷積,降低了參數數量同時加速計算

Inception v3:
在v2基礎上提出了卷積分解
將7x7卷積分解成兩個一維的卷積1x7,7x1,既可以加速計算,又可以將1個conv拆爲2個conv,使得網絡深度進一步增加,增加了網絡的非線性
優化了Inception Module結構,只在網絡的後部出現,在分支中使用了分支
pooling用conv+pooling並行,防止表徵瓶頸(極度壓縮)
增加網絡寬度,輸入從224x224變爲299x299
在這裏插入圖片描述
Inception v4:
用殘差連接來改進v3結構
將Inception模塊和Residual Connection結合,提出了Inception-ResNet-V1,Inception-ResNet-V2,訓練收斂更快,精度更高。

Inception各種改進系列

ResNext: 就是the next dimension,文中提出了另外一種維度cardinality,主要表示ResNext中module的個數
增大cardinality比增大模型的width和depth效果更好
和ResNet相比,ResNext參數更少,效果更好,結構更加簡單,更方便設計。
每個被聚合的拓撲結構都一樣,超參數也減少了

**Xception:**在Inception v3基礎上提出了通道分離式卷積。
模型參數的微量減少,精度提高

Inception v3是先做1x1卷積再做3x3卷積,先進行通道卷積再進行空間卷積,Xception則相反,先進行空間的3x3卷積,再進行通道的1x1卷積

Inception v3在每個module中都有RELU操作,而Xception 在每個module中是沒有RELU操作的

Mobilenet(輕量化網絡):
將卷積操作因式分解爲一個depthwise convolution 和 pointwise convolution,在不怎麼影響準確率的前提下大大減少計算時間和參數數量,可以說MobileNet是xception思想的應用,區別在於xcepion重點提高精度,MobileNet重點在壓縮模型同時保證精度

卷積過程,給定輸入爲DIxDIxM,先用M個DKxDKx1(二維卷積)進行一對一卷積(對應下面圖b),得到M個DFxDF結果,這一步計算量爲MxDKxDKxDFxDF,接下來用N個1x1xM 卷積DFxDFxM(對應下面圖c),得到結果爲DFxDFxN,這一步計算量爲MxNxDFxDF
總計算量爲MxDKxDKxDFxDF+MxNxDFxDF,原來過程爲輸入給定DIxDIxM,用N個DKxDKxM卷積結果得到DFxDFxN,總計算量爲MxNxDKxDKxDFxDF,現在爲原來計算量的1/N+1/(DK^2)

傳統卷積和深度分離卷積的區別

Mobilenetv2 改進點(兩點):

1.linear bottlenecks:去掉了小維度輸出層後面的非線性激活層(relu)保證模型表達能力(在v1中depthwise conv來代替傳統卷積,用width multiplier 參數做模型通道的所見,這樣特徵信息就能更集中在縮減後的通道中,如果此時奸商一個非線性激活層,就會有較大的信息丟失) rele對不同維度輸入信息丟失不同,維度大丟失少,維度小丟失較多

2.inverted residuals
對傳統residual block不同,這裏採用先升維再降維,實驗證明能有效提高結果

ShuffleNet:
在MobileNet的基礎上做了改進,MobileNet後面用的1x1卷積還是傳統的卷積,ShuffleNet在此基礎上將1x1卷積做了shuffle和group操作,實現了channle shuffle 和pointwise group convolution 操作,速度和精度都有所提升,下圖a爲原始MobileNet框架,b將feature map做了shuffle操作,c是經過channel shuffle之後的結果。

基本思路如下

假設輸入2個group,輸出5個group

| group 1 | group 2 |

| 1,2,3,4,5 |6,7,8,9,10 |

轉化爲矩陣爲2*5的矩陣

1 2 3 4 5

6 7 8 9 10

轉置矩陣,5*2矩陣

1 6

2 7

3 8

4 9

5 10

攤平矩陣

| group 1 | group 2 | group 3 | group 4 | group 5 |

| 1,6 |2,7 |3,8 |4,9 |5,10 |

ShuffleNet Units結構如下:

(a)是一個帶depthwiseconvolution (DWConv)的bottleneck unit

(b)在(a)的基礎上,進行了pointwisegroup convolution (GConv) and channel shuffle

©進行了AVG pooling和concat操作的最終ShuffleNetunit

ShuffleNet V2:
論文指出單純的乘加運算FLOPs並不能完全表示模型的運算速度,訪存開銷memory access cost(MAC)也應該考慮進去。並基於這,設計出了輕量化網絡ShuffleNet V2
提出了4個改進的原則:

(1)單個模塊的輸入輸出通道相同,可以最小化訪存開銷(MAC)

(2)過量使用組卷積group convolution ,會增加MAC

(3)網絡的分支越多,並行度越差

(4)Element-wise (每個元素相乘)操作的時間是不可忽略的

最終結論:

使用平衡的卷積,(相同的輸入,輸出通道數)

組卷積的group數要謹慎設計

減少網絡的並行度,減少碎片化

減少Element-wise 操作

V2和V1模塊設計的區別:

v2中的傳統模塊增加了channel split,假設原始輸入通道數爲c,將通道分成了c-c’和c’兩個通道,實驗中,c’=c/2

將channle shuffle操作移到後面來做

傳統模塊中將add操作轉化爲concat操作,有助於增加信息量,減少運算量

將Group conv換成了普通的conv,可以減少group數,減少MAC

DenseNet:
從feature入手,通過對feature的極致利用達到更好的效果和更好的參數,網絡更窄。

優點:

1、減輕了vanishing-gradient(梯度消失)

2、加強了feature的傳遞

3、更有效地利用了feature

4、一定程度上較少了參數數量

在傳統的卷積神經網絡中,如果你有L層,那麼就會有L個連接,但是在DenseNet中,會有L(L+1)/2個連接。

對於resnet輸出爲下面公式

DenseNet公式如下:
[x0,x1,…,xl-1]表示將0到l-1層的輸出feature map做concatenation。concatenation是做通道的合併,就像Inception那樣。而前面resnet是做值的相加,通道數是不變的。Hl包括BN,ReLU和3*3的卷積。

下面是結構圖,包含三個dense block,分爲多個block的原因是希望各個塊內feature map的size統一,這樣做concat的時候就不會出現size的問題

每層輸出的特徵圖比較小,小於100,每個dense block的3x3卷積前面都包含了一個1x1的卷積操作,bottleneck layer,減少特徵圖數量,既能降維減少計算量,又能融合各個通道的特徵,在每兩個dense block之間增加了1x1的卷積操作這是translation layer。

在這裏插入圖片描述

bottleneck和transition layer操作:在每個Dense Block中都包含很多個子結構,以DenseNet-169的Dense Block(3)爲例,包含32個11和33的卷積操作,也就是第32個子結構的輸入是前面31層的輸出結果,每層輸出的channel是32(growth rate),那麼如果不做bottleneck操作,第32層的33卷積操作的輸入就是3132+(上一個Dense Block的輸出channel),近1000了。而加上11的卷積,代碼中的11卷積的channel是growth rate4,也就是128,然後再作爲33卷積的輸入。這就大大減少了計算量,這就是bottleneck。至於transition layer,放在兩個Dense Block中間,是因爲每個Dense Block結束後的輸出channel個數很多,需要用1*1的卷積核來降維。詳情參考:https://blog.csdn.net/dulingtingzi/article/details/79927441

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章