Feature Extractor[inception v2 v3]



0 - 背景

在經過了inception v1的基礎上,google的人員還是覺得有維度約間的空間,在《Rethinking the Inception Architecture for Computer Vision》一文中,通過卷積分解、網格約間等方式來修改inception模塊。當然了在BN那篇論文的附錄部分也多少涉及到v2的設計方向。

因為第一篇論文並沒有詳細說明設計inception v1的一些具體原理,而其主要是從如何減小模型的參數量上下手,所以v3上對這部分做了個簡單的原則說明:

  • principle 1 - 從模型的輸入到輸出,不要讓網絡的特征維度變化太快,最好如金字塔一樣,慢慢的減少維度;
  • principle 2 - 更大維度的表征可以更容易的在網絡內部的局部進行處理,所以,如在卷積網絡中增加更多的激活神經元那么可以解耦合更多的特征,從而網絡就會訓練的更快(因為特征解耦了)(參考figure 7);
  • principle 3 - 空間聚合可以進行低維嵌入,這樣並不會導致網絡表示能力降低太多。例如在3*3的卷積之前,可以先對輸入信息進行降維。我們假設降維后的數據用在空間聚合上,那么在維度約簡過程中相毗鄰的單元之間具有很強的相關性會導致信息的減少不明顯。而且假如數據本身很容易被降維,那么還能加速訓練;如3*3前面加個1*1的卷積
  • principle 4 - 在擴增模型的時候,深度和廣度需要相適應,不要畸形擴展,即做好兩者的平衡關系。

ps:其實上面幾點都還是需要去驗證的,這里都只是大致的原則,大致的指導方針吧,主要還是為了說明Inception v2的改進是有理可依的。

v1的網絡得益於維度約間。這可以被看成是一種特殊的卷積分解從而減少計算量的需要。在視覺網絡中我們都期望相鄰的神經元激活值都是高度相關的,因此期望在空間聚合之前可以進行約間,從而生成相似的局部表征。所以任何計算量上的減少就意味着參數量的減少。這也就是說如果有合適的分解方式,那么可以得到更多解耦和的參數,因而能夠加速訓練了。同樣可以將多出的計算和內存用來多增加一些卷積核的數量,並且還能保證單機上多模型的穩定性。

1 - inception v2

1.1 分解卷積

因為是建立視覺網絡,所以可以用平移不變性這個特點。而對於一個5*5的卷積,其本身的感受野大小和兩個3*3的卷積是一樣的,可是所需的計算量是不同的,所以很自然的由此進行替換。而更狠一點,如果考慮不重復的感受野計算,那么還能將一個\(n*n\)的卷積分解成一個\(n*1\)的卷積和一個\(1*n\)的卷積的疊加。如下圖所示:

圖1.1.1 左:用兩個\(3*3\)的代替一個\(5*5\);右:用一個\(3*1\)的和一個\(1*3\)的代替一個\(3*3\)
所以結果如下:

圖1.1.2 v1中\(5*5\)的卷積核的替換


圖1.1.3 v1中\(n*n\)的卷積核的替換
不過對於將\(n*n\)的卷積分解成\(n*1\)\(1*n\)的卷積的時候,發現在網絡的前層這樣進行卷積分解起不到多大作用,不過在網絡的網格為\(m*m\)(m在[12,20]之間)的時候有個較好的結果。在這個層級,如使用\(1*7\)然后使用\(7*1\)的到的結果還是不錯的。

1.2 輔助分類器

v1中的輔助分類器是為了將有用的梯度能夠立即傳遞給更低的層,從而改善收斂情況和保證在訓練中能夠穩定收斂。Lee也主張輔助分類器可以讓模型更穩定的訓練和更好的收斂。不過本文發現,在訓練的早期其實是沒有改善收斂情況的;假定一個有輔助分類器,一個沒有,那么在兩個模型中,最開始都是表現一樣的,只有在訓練的最后,輔助分類器才有幫助提升效果。將v1中兩個輔助分類器中更低的輔助分類器去掉,網絡沒有太大差別,所以v1中原來的假設輔助分類器可以有助於發展低層級的特征的假設是錯的。v3中認為輔助分類器其實類似一個正則化器,支持的事實是:如果邊分支使用了bn或者使用dropout層,那么主分類器可以表現的更好。當然,這同時也弱證明了bn也是一個正則化器。

1.3 網格尺度約間

所謂網絡尺度約間,對於傳統cnn來說,就是每層的feature map變小,或者channel變少。假設一個feature map固定分成\(d*d\)大小的網格,且有\(k\)個通道。為了得到下一層為\(\frac{d}{2}*\frac{d}{2}\)大小的網格,且通道\(2k\)(為了不違反准則1,在減少map大小的時候,相應的增加通道數),則如果先以stride=1進行卷積,然后在進行池化,那么需要的操作是\(d*d*k*2k\),而如果直接池化則需要的操作是\(\frac{d}{2}*\frac{d}{2}*k*2k\),可以看出后者比前者減少了\(3/4\)

圖1.3.1 通常的網格尺度約間方法
如圖1.3.1所示,左邊那種方法因為map尺度下降太快,違反了准則1,而右邊的計算量又太大,所以需要找到一種新的網格尺度約間方法。


圖1.3.2 進行網格尺度約間的方法
作者提出了卷積和池化並行的方式,如圖1.3.2右邊所示,通過在基於輸入為\(35*35*320\)的上面左邊是一個stride=2的卷積操作,並列的增加一個stride=2的池化操作,從而並行的輸出得到一個\(17*17*640\)的層,可以看出這樣即保證了網格尺度的約間,也沒有違反准則1.

1.4 google v2網絡結構

只要遵循之前的那四點進行網絡設計得到的inception的變種,基本上准確度都很穩定。googlenet v2的網絡有42層,而計算量只是v1的2.5倍而已,當然還是比vgg要低。

圖1.4.1 googlenet v2的網絡結構
googlenet v2的網絡結構就是將上面的那些修改拿過來組合而成的,而且都遵循着最開始說的4個網絡指導原則進行了如下改進(當然這部分描述和圖1.4.1略有不符):

  • 1 - 將\(7*7\)的卷積替換為3個\(3*3\)的卷積;
  • 2 - 其中在\(35*35*288\)的部分引入三個inception v1模塊,不過是通過網格尺度約間技術使得輸出的時候網絡維度變成了\(17*17*768\)
  • 3 - 然后引入5個在inception v1上加入卷積分解(大卷積變成小卷積疊加)的模塊,同樣采用網格尺度約間技術使得網絡維度變成了\(8*8*1280\)
  • 4 - 接着引入2個在inception v1上加入卷積分解(2維卷積變成1維行(列)卷積)的模塊,並將輸出的通道合並成2048(即\(8*8*1024\)與另一個\(8*8*1024\)在通道維度上簡單的並列)

其中figure 7 如下圖:

圖1.4.2 在圖1.4.1中涉及的figure 7

1.4 低分辨率圖片

作者基於不同分辨率進行了網絡結構的微調:

  • 1 - 299*299的分辨率的在第一層中stride設為2,並且之后采用最大池化;
  • 2 - 151*151的分辨率的,在第一層中stride設為1,並且之后采用最大池化;
  • 3 - 79*79的分辨率的,在第一層中stride設為1,不要最大池化。
    可以看的出來,隨着分辨率的降低,那么就需要增加信息的獲取;反之減少。基於這三種結構,作者試驗發現效果都相當。

1.4 通過標簽平滑來進行模型正則

待續

2 - inception v3

其中inception v2加了BN輔助的就是v3了(也就是將針對inception v1 的所有的改進都加起來,然后加個BN)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM