深度學(xué)習(xí)中的大型卷積網(wǎng)絡(luò)匯總

Inception v1

Inception v1也叫GoogLeNet 。

這是Google的一篇論文,在當(dāng)時(shí)無(wú)法網(wǎng)絡(luò)深度上提升網(wǎng)絡(luò)性能時(shí),論文另辟蹊徑,改用加大網(wǎng)絡(luò)的寬度方法。使用多通道卷積進(jìn)行構(gòu)建更寬的網(wǎng)絡(luò),不僅提高模型在分類(lèi)的效果,也提高了模型在目標(biāo)檢測(cè)的效果。主要構(gòu)建一種 Inception module。如下所示:

左圖對(duì)輸入做了4個(gè)分支,分別用不同尺寸的filter進(jìn)行卷積或池化,最后再在特征維度上拼接到一起。這種全新的結(jié)構(gòu)有什么好處呢?Szegedy從多個(gè)角度進(jìn)行了解釋?zhuān)?/p>

在直觀感覺(jué)上在多個(gè)尺度上同時(shí)進(jìn)行卷積,能提取到不同尺度的特征。特征更為豐富也意味著最后分類(lèi)判斷時(shí)更加準(zhǔn)確。

四個(gè)分支同步進(jìn)行會(huì)導(dǎo)致計(jì)算爆炸,所在會(huì)在進(jìn)行計(jì)算之前使用1x1卷積進(jìn)行通道的尺度縮放。

下面就是Inception v1的全整個(gè)網(wǎng)絡(luò)圖。

上圖中,在網(wǎng)絡(luò)的中間層還有兩個(gè)中間的loss,在中間進(jìn)行權(quán)重的調(diào)整調(diào)整。

各層的卷積尺度。作者提到輸入尺寸是224x224.所以這里的7x7 / 2卷積輸入是224x224x3的圖片,輸出就是112x112x3.

VGG

VGG和GoogLeNet 是同一時(shí)期的論文,VGG沿用了Alex框架,使用了dropout等手段加深了網(wǎng)絡(luò)深度,并使用堆疊3x3卷積核代替7x7的網(wǎng)絡(luò)。論文探討了很多的調(diào)參技巧是再進(jìn)行實(shí)驗(yàn)的時(shí)候比較有用的。

vgg一共進(jìn)行了6次實(shí)驗(yàn),其中D和E表現(xiàn)最佳。D就是VGG16網(wǎng)絡(luò),E是VGG19網(wǎng)絡(luò),所有的網(wǎng)絡(luò)都是使用3x3卷積核。

Inception v2 + v3

這兩個(gè)模型出現(xiàn)在同一篇論文中,主要探討三個(gè)原則:

  • 將 5×5 的卷積分解為兩個(gè) 3×3 的卷積運(yùn)算以提升計(jì)算速度
  • 作者將 n*n 的卷積核尺寸分解為 1×n 和 n×1 兩個(gè)卷積。例如,一個(gè) 3×3 的卷積等價(jià)于首先執(zhí)行一個(gè) 1×3 的卷積再執(zhí)行一個(gè) 3×1 的卷積。


  • 對(duì)于前面的串聯(lián)改為并聯(lián)

  • inception v2的模型結(jié)構(gòu)

其中v2/v3模型結(jié)構(gòu)上的差別只有一點(diǎn)即在inception v3中使用的Aug loss里面使用了BN進(jìn)行regularization。

ResNet

殘差神經(jīng)網(wǎng)絡(luò)是一個(gè)卷積神經(jīng)網(wǎng)絡(luò)模型的大突破,直接解決了無(wú)法訓(xùn)練更深層的網(wǎng)絡(luò)問(wèn)題。
運(yùn)用如下公式:

  • 使用殘差塊對(duì)已經(jīng)訓(xùn)練的的網(wǎng)絡(luò)進(jìn)行連接:

這里x使上層的網(wǎng)絡(luò),相當(dāng)于已經(jīng)擬合90%的模型,二F(x)就是殘差塊,這就是真實(shí)網(wǎng)絡(luò)和x的一個(gè)殘差(誤差)。F(x) + x就像可以更加精確的擬合網(wǎng)絡(luò)了。公式1中的x和F(x)的尺度不變。

若x和F(x)的尺度不一樣,就需要使用公式2:


完整模型如下:


inception v4和 Inception-ResNet-v1,Inception-ResNet-v2

這三個(gè)個(gè)模型同時(shí)出現(xiàn)在一篇論文里面。論文中有大量的圖和表,這是一篇實(shí)驗(yàn)性很強(qiáng)的論文,大部分在討論模型的基礎(chǔ)結(jié)構(gòu)的功能,對(duì)比模型在分類(lèi)和檢測(cè)任務(wù)的性能。

Inception v4 引入了專(zhuān)用的「縮減塊」(reduction block),它被用于改變網(wǎng)格的寬度和高度。早期的版本并沒(méi)有明確使用縮減塊,但也實(shí)現(xiàn)了其功能。
如下:

Inception-ResNet-v2和Inception-ResNet-v1結(jié)構(gòu)類(lèi)似如下:

受 ResNet 的優(yōu)越性能啟發(fā),研究者提出了一種混合 inception 模塊。Inception ResNet 有兩個(gè)子版本:v1 和 v2。在分析其顯著特征之前,先看看這兩個(gè)子版本之間的微小差異。

  • Inception-ResNet v1 的計(jì)算成本和 Inception v3 的接近。
  • Inception-ResNetv2 的計(jì)算成本和 Inception v4 的接近。
  • 它們有不同的 stem。兩個(gè)子版本都有相同的模塊 A、B、C 和縮減塊結(jié)構(gòu)。唯一的不同在于超參數(shù)設(shè)置。

參考:一文概覽Inception家族的

ResNeXt

ResNeXt 結(jié)構(gòu)可以在不增加參數(shù)復(fù)雜度的前提下提高準(zhǔn)確率,同時(shí)還減少了超參數(shù)的數(shù)量。

文中提出網(wǎng)絡(luò) ResNeXt,同時(shí)采用 VGG 堆疊的思想和 Inception 的 split-transform-merge 思想,但是可擴(kuò)展性比較強(qiáng),可以認(rèn)為是在增加準(zhǔn)確率的同時(shí)基本不改變或降低模型的復(fù)雜度。這里提到一個(gè)名詞cardinality,右邊的 ResNeXt 中每個(gè)分支一模一樣,分支的個(gè)數(shù)就是 cardinality。通過(guò)在大卷積核層兩側(cè)加入 1x1 的網(wǎng)絡(luò)層,控制核個(gè)數(shù),減少參數(shù)個(gè)數(shù)的方式。

圖中中括號(hào)內(nèi)就是 split-transform-merge,通過(guò) cardinality(C) 的值控制 repeat layer。
output 在上下相鄰的格子不斷減半,中括號(hào)內(nèi)的逗號(hào)后面卷積核的個(gè)數(shù)不斷翻倍。
參考:ResNeXt算法詳解

Xception

Xception網(wǎng)絡(luò)結(jié)構(gòu),不僅借鑒了depthwise separable convolution的思想,也結(jié)合了ResNet的思想,最后作者也比較了ResNet在其中的作用

  • 首先通過(guò)‘1x1’卷積,將輸入數(shù)據(jù)拆分cross-channel相關(guān)性,拆分成3或者4組獨(dú)立的空間
  • 然后,通過(guò)‘3x3’或者‘5x5’卷積核映射到更小的空間上去

模型使用的殘差塊:

Xception模型結(jié)構(gòu):

  1. 整個(gè)網(wǎng)絡(luò)結(jié)構(gòu)具有14個(gè)模塊,36個(gè)卷積
  2. 殘差連接
    3.最后采用logistic regression

參考基礎(chǔ)模型

DenseNet

DenseNet使RseNet上演變出來(lái)的又一個(gè)超級(jí)網(wǎng)絡(luò),網(wǎng)絡(luò)設(shè)計(jì)了一種Dense Block模塊。如下:

這里的Dense Block模塊層數(shù)為5,即具有5個(gè)BN+Relu+Conv(3*3)這樣的layer,網(wǎng)絡(luò)增長(zhǎng)率為k=4,簡(jiǎn)單的說(shuō)就是每一個(gè)layer輸出的feature map的維度為4。這里的網(wǎng)絡(luò)增長(zhǎng)率就是每層網(wǎng)絡(luò)的的特征層輸出數(shù)量。因?yàn)镈enseNet的每層網(wǎng)絡(luò)的輸入是前面所有層的輸出。所以這里要統(tǒng)一每層網(wǎng)絡(luò)的輸入層數(shù)k。
若k=32,第L 層網(wǎng)絡(luò)的網(wǎng)絡(luò)輸入未 k0 + k(L-1).第L層的網(wǎng)絡(luò)的輸出為32.

  • k0是網(wǎng)絡(luò)的輸入層的輸出層數(shù)
  • k是就是前面每層的網(wǎng)絡(luò)輸出。

網(wǎng)絡(luò)結(jié)構(gòu):

這里有bottleneck layer和Translation layer。

  • 這里bottleneck layer就是Dense Block的1x1結(jié)構(gòu),dense block的33卷積前面都包含了一個(gè)11的卷積操作,就是所謂的bottleneck layer,目的是減少輸入的feature map數(shù)量,既能降維減少計(jì)算量,又能融合各個(gè)通道的特征,這里11卷積的channel是growth rate4
  • 放在兩個(gè)Dense Block中間,是因?yàn)槊總€(gè)Dense Block結(jié)束后的輸出channel個(gè)數(shù)很多,需要用1*1的卷積核來(lái)降維。

參考1, 2, 3

SENet

Momenta 的胡杰一篇大作。

SE 模塊的示意圖。給定一個(gè)輸入 x,其特征通道數(shù)為 c_1,通過(guò)一系列卷積等一般變換后得到一個(gè)特征通道數(shù)為 c_2 的特征。與傳統(tǒng)的 CNN 不一樣的是,接下來(lái)通過(guò)三個(gè)操作來(lái)重標(biāo)定前面得到的特征。

  • 首先是 Squeeze 操作,順著空間維度來(lái)進(jìn)行特征壓縮,將每個(gè)二維的特征通道變成一個(gè)實(shí)數(shù),這個(gè)實(shí)數(shù)某種程度上具有全局的感受野,并且輸出的維度和輸入的特征通道數(shù)相匹配。它表征著在特征通道上響應(yīng)的全局分布,而且使得靠近輸入的層也可以獲得全局的感受野,這一點(diǎn)在很多任務(wù)中都是非常有用的。

  • 其次是 Excitation 操作,它是一個(gè)類(lèi)似于循環(huán)神經(jīng)網(wǎng)絡(luò)中門(mén)的機(jī)制。通過(guò)參數(shù) w 來(lái)為每個(gè)特征通道生成權(quán)重,其中參數(shù) w 被學(xué)習(xí)用來(lái)顯式地建模特征通道間的相關(guān)性。

  • 最后是一個(gè) Reweight 的操作,將 Excitation 的輸出的權(quán)重看做是進(jìn)過(guò)特征選擇后的每個(gè)特征通道的重要性,然后通過(guò)乘法逐通道加權(quán)到先前的特征上,完成在通道維度上的對(duì)原始特征的重標(biāo)定。

在resnet和inception上的改動(dòng)如下:

上左圖是將 SE 模塊嵌入到 Inception 結(jié)構(gòu)的一個(gè)示例。方框旁邊的維度信息代表該層的輸出。

這里我們使用 global average pooling 作為 Squeeze 操作。緊接著兩個(gè) Fully Connected 層組成一個(gè) Bottleneck 結(jié)構(gòu)去建模通道間的相關(guān)性,并輸出和輸入特征同樣數(shù)目的權(quán)重。我們首先將特征維度降低到輸入的 1/16,然后經(jīng)過(guò) ReLu 激活后再通過(guò)一個(gè) Fully Connected 層升回到原來(lái)的維度。這樣做比直接用一個(gè) Fully Connected 層的好處在于:1)具有更多的非線性,可以更好地?cái)M合通道間復(fù)雜的相關(guān)性;2)極大地減少了參數(shù)量和計(jì)算量。然后通過(guò)一個(gè) Sigmoid 的門(mén)獲得 0~1 之間歸一化的權(quán)重,最后通過(guò)一個(gè) Scale 的操作來(lái)將歸一化后的權(quán)重加權(quán)到每個(gè)通道的特征上。

除此之外,SE 模塊還可以嵌入到含有 skip-connections 的模塊中。上右圖是將 SE 嵌入到 ResNet 模塊中的一個(gè)例子,操作過(guò)程基本和 SE-Inception 一樣,只不過(guò)是在 Addition 前對(duì)分支上 Residual 的特征進(jìn)行了特征重標(biāo)定。如果對(duì) Addition 后主支上的特征進(jìn)行重標(biāo)定,由于在主干上存在 0~1 的 scale 操作,在網(wǎng)絡(luò)較深 BP 優(yōu)化時(shí)就會(huì)在靠近輸入層容易出現(xiàn)梯度消散的情況,導(dǎo)致模型難以?xún)?yōu)化。

目前大多數(shù)的主流網(wǎng)絡(luò)都是基于這兩種類(lèi)似的單元通過(guò) repeat 方式疊加來(lái)構(gòu)造的。由此可見(jiàn),SE 模塊可以嵌入到現(xiàn)在幾乎所有的網(wǎng)絡(luò)結(jié)構(gòu)中。通過(guò)在原始網(wǎng)絡(luò)結(jié)構(gòu)的 building block 單元中嵌入 SE 模塊,我們可以獲得不同種類(lèi)的 SENet。如 SE-BN-Inception、SE-ResNet、SE-ReNeXt、SE-Inception-ResNet-v2 等等。

參考1, 2

MobileNets

論文中的主要的思想是將一個(gè)標(biāo)準(zhǔn)卷積(standard convolution)分解成兩個(gè)卷積,一個(gè)是深度卷積(depthwise convolution),這個(gè)卷積應(yīng)用在每一個(gè)輸入通道上;另一個(gè)是1×1的逐點(diǎn)卷積(pointwise convolution),這個(gè)卷積合并每一個(gè)深度卷積的輸出

上圖a就是標(biāo)準(zhǔn)的卷積核,它的大小就是DK×DK×M×N。它可以被分解為b和c這兩個(gè)部分。
b的大小為M×(1×Dk×Dk)就是(depthwise convolution),c的大小為N×(M×1×1)就是(pointwise convolution).
既然卷積核分解了,那feature map也是要被分解的。
對(duì)一個(gè)DF×DF×M的特征圖。需要分解為(M×DK×DK)×(DF×DF)這兩個(gè)矩陣。
那怎么計(jì)算??

  • feature map 先與depthwise convolution進(jìn)行計(jì)算: M×(1×Dk×Dk) * (M×DK×DK)×(DF×DF) = M×(DF×DF)
  • 再與pointwise convolution進(jìn)行計(jì)算: N×(M×1×1) * (M×1×1)×(DF×DF) = N×(DF×DF)

如下:

左邊標(biāo)準(zhǔn)卷積,右邊是深度分離卷積。

總的結(jié)構(gòu):

除了最后的全連接層,所有層后面跟了batchnorm和ReLU,最終輸入到softmax進(jìn)行分類(lèi)。

  • 為了構(gòu)建更小和更少計(jì)算量的網(wǎng)絡(luò),作者引入了寬度乘數(shù) ,作用是改變輸入輸出通道數(shù),減少特征圖數(shù)量,讓網(wǎng)絡(luò)變瘦。
  • 分辨率乘數(shù) ,分辨率乘數(shù)用來(lái)改變輸入數(shù)據(jù)層的分辨率,同樣也能減少參數(shù)。

參考:1, 2

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容