1. 程式人生 > 實用技巧 >【程式喵筆記】影象分類網路1.0

【程式喵筆記】影象分類網路1.0

影象分類網路

來總結一下部分經典的分類網路~

在這裡插入圖片描述

目錄

前言

ImageNet大規模視覺識別比賽(ImageNet Large Scale Visual Recognition Challenge)120萬幅高解析度影象分類為1000個不同的類,雖然2017年就已經宣佈停賽,但是裡面的一些網路可以說是在特徵提取和深度學習之中堪稱經典。從12年的AlexNet開始,網路越來越深,越學越好~

在這裡插入圖片描述

Top5錯誤率是正確標籤不在預測標籤的前5中的影象在總樣本中比例。

AlexNet

網路構架

AlexNet可以說是對傳統神經網路一大突破,錯誤率直接下跌接近10個百分點,先看看網路構架

在這裡插入圖片描述

創新點

網路現在看來不是很驚豔,但是也有為後續網路鋪路的幾點創新:

ReLU啟用

為了增加網路的非線性,卷積後使用啟用函式,原先使用的是sigmoid或者tanh,RelU就很簡單粗暴了f(x) = max(0, x),ReLU的引入大大減少了梯度下降的訓練時間,網路更快收斂

在這裡插入圖片描述

Max Pooling最大池化

池化層總結了特徵圖的輸出,也就是將特徵圖的大小變小,保留重要的特徵,原先常用的是平均池化,但是特徵會有所模糊,在AlexNet之後,最大池化開始流行

Dropout

為了防止過擬合(過擬合就是分的太細了,簡單看訓練集準確率很高,驗證集準確率卻低)不僅在資料預處理的時候採用資料擴充(data augmentation),也在全連線層引入Dropout。Dropout就是隨機捨棄一些神經元,前向傳播輸出為0,反向傳播不更新,下一次訓練恢復,然後再隨機捨棄一些。可以防止訓練資料中複雜的共同適應。

創新點還有區域性響應歸一化(LRN),這個後續學者證明沒多大用處。

VGG

VGG可謂在識別網路中很多都用到了,最經典的是VGG16,16層網路。可是這16層看起來挺淺,但是當時可不容易,網路層數增多會引起梯度爆炸,梯度消失,網路崩了怎麼玩?作者就想出一個好辦法啊~預訓練:先訓練一個淺層網路,用淺層網路初始化深層網路的引數,這樣就有個引導,不會跑太偏。

網路構架

最常用的VGG16和19在分類,識別網路很多都為特徵提取的網路結構

在這裡插入圖片描述

創新點

3*3小卷積

自從VGG之後,3*3的卷積變得很普遍,更少的引數,更優的效果,更快的訓練。

先說感受野,一個5*5的卷積感受野為25,兩個3*3步長為1的感受野也是25. 但是引數一個5*5

引數為5*5*c*c,兩個3*3引數為 2*3*3*c*c,c為特徵圖維度數(通道數)

再說效果優秀,文章證明2個3*3替換為 5*5,Top1錯誤率增加了7%

在這裡插入圖片描述

卷積-池化結構

卷積為 3*3,步長為1,之後接ReLU啟用。最大池化為 2*2步長為2,最大池化之後特徵圖的長和寬都會變為原來的一半。為了彌補這以缺失,在後一層卷積增加捲積核的維度,從而增加特徵圖的維度。所以VGG特徵圖是變得越來越小,維度越來越深。

在這裡插入圖片描述

Inception

這是Google提出的網路,主要是一個Inception結構,並行多次卷積在拼接,有4個版本,最後一個和ResNet結合,著重分析前三個

在這裡插入圖片描述

創新點

Inception結構

目標識別存在問題:

  • 全域性目標大卷積核更優,區域性目標小卷積核更優
  • 卷積核堆疊會增加計算量,也會使網路過深,可能存在梯度消失

解決的方法把全連線改成稀疏連線,卷積層也是稀疏連線,但是不對稱的稀疏資料數值硬體不能跟上(硬體全是針對密集矩陣優化。)所以,Inception是一種硬體可以跟上並且近似的最優區域性稀疏結構。

在這裡插入圖片描述

上一層卷積經過不同大小的卷積,只要保證padding = 0、1、2,就可以得到相同大小的特徵圖並連線,增加一個3*3 max pooling會產生更優的效果。

5*5卷積加入很大程度上提取了特徵圖中遠距離的特徵,但是計算量增加了很多,但是又不想捨棄 5*5只能在特徵圖維度上減少。就增加了 1*1的卷積來降低維度。

1*1卷積

降維:對於同樣大小的輸入輸出特徵圖,增加1*1卷積通過降維,大大減少了網路的引數

在這裡插入圖片描述

聚合:1*1卷積實際上使跨通道的聚合,將多個輸入特徵圖上相同位置的點做全連線處理,並增加ReLU提取非線性特徵。

這樣,改進後的Inception模組變成這樣

在這裡插入圖片描述

輔助分類網路

網路太深,如果所有的一起訓練,前面幾層梯度導數為0,這樣就出現梯度消失,為解決這個問題,增加了兩個softmax輔助分類網路,在較為低層的網路進行區分,增加返回的梯度訊號。輔助分類網路只用於訓練階段,從中間層的分類結果按照比較小的權重(0.3)增加至最終分類層中。

具體GoogLeNet網路如下:

在這裡插入圖片描述

Batch Normalization

先說說batch,就是一批一批資料訓練,好處一是平行計算更高效,二是一批資料上計算梯度和損失,這批資料量越大越好,如果能一次把所有的資料都放到一批那就簡直完美,但是硬體不能實現。

每層的輸入受到前幾層影響,如果前一層的分佈變化,後一層需要適應,那麼學習起來就很複雜了,這就產生了協方差偏移。訓練過程中,深度網路內部節點分佈的變化就是 Internal Covariate Shift(內部協方差偏移),需要較低的學習率和合適的初始化引數,訓練的很慢。

如果在訓練中,把多個樣本做歸一化,就是變為均值為0,方差為1的正態分佈,這樣的歸一化之後的資料再輸入到啟用函式中,啟用函式的取值靠近中間,不會出現梯度消失,如圖,啟用函式如果為sigmoid,歸一化後輸入為藍色區域

在這裡插入圖片描述

但是這樣啟用函式都線上性區域了,啟用函式就是要提供非線性啊,對歸一化的值還要進行偏移

在這裡插入圖片描述

在Inception-v3中所有卷積層和輔助分類的全連線層全部使用BN

不對稱卷積核

這是Inception-v3在Inception-v1上的改進,形成3種不同的Inception模組,用來對深層特徵提取,一種是5*5卷積由兩個 3*3替代,更少的引數,更優的效率

在這裡插入圖片描述

作者想,能不能更小,3*3變成 2*2,但是效果不怎麼好,還不如整一個非對稱的用 1*33*1兩個卷積替代 3*3更節省引數

在這裡插入圖片描述

這種非對稱的卷積在淺層使用意義不大,在深層網路,更有助於生成高維的稀疏表示。還有一種類似的非對稱卷積,是最後的Inception模組,用於擴充套件濾波器組。

在這裡插入圖片描述

ResNet

網路想要深,但是越深效果反而差了,卷積神經網路遇到的問題:按道理加深網路層數可以提取更深入的資訊,但是實際上加深網路會使得網路衰退,就是網路層數增加,錯誤增加,退化問題。

在這裡插入圖片描述

突破神經網路深度問題最為顛覆性問題就是ResNet。

網路構架

網路設定很簡單,卷積和VGG一樣,大多是3*3卷積,遵循兩個原則::(i)對於相同的輸出特徵圖尺寸,各層有相同數量的濾波器; (ii)如果將特徵圖的大小(尺寸)減半(用步長為2的卷積進行下采樣),則過濾器的數量將增加一倍,以保持每一層的時間複雜度。卷積之後,Relu啟用之前,增加Batch Normalization(BN)防止梯度消失。

在這裡插入圖片描述

以ResNet50為例,從conv3_x開始,第1個block的第2個卷積會步長為2,特徵圖尺寸減半,作為補償,濾波器數量變為2倍.

在這裡插入圖片描述

創新點

殘差模組

解決網路退化問題特別簡單,增加了一個恆等對映 x,讓網路的輸出為卷積之後的 F(x)x相加,這樣網路就變成了輸出和輸入的差,就是殘差了

在這裡插入圖片描述

如果極端而言,右邊恆等對映x很優秀了,那麼F(x)很容易就變為0,這樣也就相當於這層特徵提取的太差,就把他扔了,下一層繼續提取(但實際不會這麼極端)。直接把x拿過來這跟線就是短連結,不會增加網路額外的引數和複雜度,並且不會變為0。

這裡的F(x)必須是兩層或者更多層的網路,如果是單層那麼又等價為線性層。如果F(x)和x維度一致,可以直接相加的;如果不一致對x進行一個維度變換,文章提出兩種方案,一是直接加0,二是用1*1的卷積卷一下來增加維度(二效果更好)。

在這裡插入圖片描述

比較可以看出來,同樣網路構造,ResNet中34層要比18層優秀。不僅如此。18層雖然結果相似,但是ResNet更快收斂。針對殘差模組的設計,ReLU和BN到底應該放在哪,作者在後續文章做了一些改進

在這裡插入圖片描述

就是這小小的一個恆等對映,就是網路深度質的突破(千層都不是問題),此後,很多學者的研究都是在ResNet基礎上。

ResNeXt

這可以說是一個綜合體,借鑑了Inception結構的稀疏模組和ResNet的殘差結構。

網路構架

構架和ResNet很相似,不過殘差模組增加C,C就是並列的相同的分支

在這裡插入圖片描述

創新點

Cardinatity

ResNeXt提出一個Cardinatity,作為模型複雜度的一個新度量,指的是一個block中所具有的相同分支的數目,也就是原先玩1個64維度的特徵圖,現在拿32個4維特徵圖分別玩。

在這裡插入圖片描述

這樣玩的原因有點像全連線層,就是神經元啊,要分開,轉換再聚合

在這裡插入圖片描述

那麼網路也可以先分開,再卷積,最後聚合一起啊。這就是Network-in-Neuron。在保證相似計算複雜度及模型引數大小的前提下,提升cardinatity比提升網路深度或寬度可取得更好的模型表達能力。

在這裡插入圖片描述

比起來Inception-Resnet更加簡單高效,網路看起來清晰不少(我感覺Inception網路結構太複雜),ResNeXt每一個卷積路徑有相同的結構,多條路徑可以共享,而Inception-ResNet就是挺五花八門的。這樣再實際操作的時候就按照群卷積(Group convolution)操作就可以

在這裡插入圖片描述

【後記】
讀完大神的paper總是要讚歎許久,以上是我看陳雲霽老師的書和啃網路論文的總結,可能有不全面之處,大家多多交流~
在這裡插入圖片描述