1. 程式人生 > >Inception——Going deeper with convolutions

Inception——Going deeper with convolutions

線性 不同的 比例 必須 高質量 個人 包含 尺度 測試

1. 摘要

作者提出了一個代號為 Inception 的卷積神經網絡架構,這也是作者在 2014 年 ImageNet 大規模視覺識別挑戰賽中用於分類和檢測的新技術。

通過精心的設計,該架構提高了網絡內計算資源的利用率,因而允許在增加網絡的深度和寬度的同時保持計算預算不變。

在作者提交的 ILSVRC14 中使用的一個特定的模型稱為 GoogLeNet ,一個 22 層深的網絡,在分類和檢測的背景下對其性能進行了評估。

2. 介紹

在過去三年中,卷積神經網絡在圖像識別和物體檢測領域取得了巨大的進步。可喜的是,這不僅僅是得益於更強大的硬件、更多的數據和更復雜的模型,更是許多新的想法、算法和改進的網絡結構所帶來的結果。比如,我們的 GoogLeNet 相比兩年前的 AlexNet 參數量少了 12 倍(500 萬 VS 6000 萬),但是卻更加準確。

另一個值得註意的因素是,隨著移動和嵌入式計算的不斷發展,我們的算法效率,特別是它們的功率和內存使用,變得越來越重要。作者在設計深層的網絡結構時就考慮了這一因素,而不僅僅是一味追求準確率的提高。對於文中的大部分實驗,這些模型在設計時都要保證測試階段保持 15 億次的乘-加操作時間預算。這樣,它們就不單單只是為了滿足學術界的好奇心,還能夠以合理的成本應用到實際中去,即使是在大型數據集上。

作者提出了代號為 Inception 的網絡架構,其得名於網絡中的網絡 (Network in network) 這篇論文,以及與電影 《盜夢空間》有關的一幅圖片。

技術分享圖片

這裏的 “深” 有兩層意思,其一是引入了我們新的 Inception Module,其二就是直觀的網絡的深度。

將 Network-in-network 引入卷積神經網絡後,其可以看作是一個卷積核為 1×1 的卷積層後面跟著激活函數。 作者在網絡中大量使用了這種結構,主要有兩個目的:一是降低維度來解決計算瓶頸,因此也限制了網絡的大小。這讓我們不僅僅能夠增加深度,同時也能在對性能沒有顯著損壞的情況下增加網絡的寬度。

3. 動機和考慮

提高網絡的性能的最直觀的方法就是增加網絡的大小,包括增加深度——網絡的層數和增加寬度——每層的單元數。這是最簡單最好用的方法,特別是給定大量的有標簽數據,但是它也有兩個主要的缺點。

大的模型通常意味著大量的參數,這在訓練數據有限的情況下更容易過擬合。這也是一個主要的瓶頸,因為高質量訓練集的建立是非常困難和高昂的,特別是在需要專業的人類評估者來區分像 ImageNe 那樣的細粒度視覺類別這種情況下,如下圖。

技術分享圖片

另一方面,統一增加網絡的大小會顯著增加計算資源的使用。比如,兩個連在一起的卷積層,增加卷積核的個數後會導致計算呈平方級增加。而如果增加的參數最後大部分都接近於零的話,許多計算就是被浪費掉了。在計算資源總是有限的情況下,盡管主要目的是增加模型的性能,我們也不能隨意增加網絡的大小而不註重計算資源的分配。

解決這兩個問題的根本方法就是將全連接變為稀疏連接,甚至是在卷積內部。然而,當涉及到非均勻稀疏數據的數值計算時,現在的計算設備效率還非常低。因此,問題就變成了兩者的折中,是否能設計一種結構,既能利用稀疏性又能利用當前硬件計算密集矩陣的優勢。

4. 網絡架構

Inception 架構的主要思想是說,要找出卷積視覺網絡中的最佳局部稀疏結構是如何通過容易獲得的密集組件來近似和覆蓋的。在設計網絡的時候,我們應該分析上一層的相關統計特性,將它們聚集成具有高相關性的單元組。我們假設來自前面層的每個單元對應於輸入圖像的某個區域,並且這些單元被劃分為濾波器組。

在離輸入較近的層,相關的單元可能更集中於局部區域。這就意味著大量的聚類集中在一個區域,這種情況可以用一個 1×1 卷積核來實現。同理,一些其它聚類可能有更大的空間區域,也就需要我們用更大的卷積核來實現。為了避免對齊問題,作者只采用了 1×1、3×3 和 5×5 三種卷積核大小,但這不是必須的。此外,由於池化在一些卷積網絡中必不可少,作者也引入了一個池化通道。

技術分享圖片

隨著這些模塊的疊加,特征一級一級逐漸被深層的網絡所捕獲,它們的空間集中度應該會逐漸減小,也就是說在更深的網絡層更大尺寸 3×3 和 5×5 的卷積核應該會增加。

但是上面的結構有一個很大的問題,在通道數量非常多的卷積網絡上,即使采用適量的 5×5 卷積核,計算也會非常昂貴。引入池化後,上面的現象變得更加明顯,因為池化後的通道數與前一層相同。這樣,經過幾層之後,計算量就會逐漸爆炸。

因此,作者在計算比較昂貴的 3×3 和 5×5 卷積前先引入 1×1 的卷積,對通道的維度進行降低,同時也包含一個非線性激活函數。

技術分享圖片

我們的網絡通常由一系列上面的模塊級聯而成,同時增加步長為 2 的最大池化層來將分辨率減半,而且,在更深的網絡層中引入 Inception 模塊而前面的層采用傳統的卷積網絡效果似乎更好。

該架構的主要好處之一是它允許在每個階段顯著增加單元的數量而不會導致計算復雜性不受控制地爆炸。另一個實用的方面是它與直覺相符,也即視覺信息應該以各種比例處理然後聚合,以便下一階段可以同時抽象來自不同尺度的特征。

5. GoogLeNet

GoogLeNet 得名於作者的隊伍名稱,同時也是為了致敬經典的 LeNet 結構。其模型構架如下所示:

技術分享圖片

註:個人認為上表中的參數一欄有些不準確,比如第一個卷積層,卷積核的權重參數應該為 6477*3=9408,表中為 2.7K 。

網絡的輸入是 224×224 的 RGB 圖像減去各通道像素的均值,所有的激活函數都是 ReLU。‘#3×3 reduce’ 代表在 3×3 卷積之前先利用 1×1 的卷積對通道數進行降低,‘#5×5 reduce’ 同理。‘pool proj’ 代表在最大池化後再經過一個 1×1 的卷積。

將每個 Inception 模塊看做兩層的話,帶參數的層總共有 22 層,所有層獨立計算的話網絡總共大約 100 層。給定這個較深的網絡,將梯度有效地反向傳播是一個難點。

通過較淺的網絡在分類任務上的強大表現得出了一個有趣的見解,網絡中間層的特征非常具有判別性。因此,作者添加了一些連接到這些中間層的輔助分類器,期望能夠鼓勵較低階段特征的判別性,來增加反向傳播的梯度信號並且提供額外的正則化。詳細網絡結構如下圖所示:

技術分享圖片

在訓練階段,這些輔助分類器的損失乘以權重 0.3 後和網絡的總損失加到一起。在測試階段,它們則被拋棄。輔助分類器的結構是這樣的:

  • 一個平均池化層,卷積核大小 5×5,步長為 3
  • 一個 1×1 的卷積層,卷積核數量 128
  • 一個 1024 個單元的全連接
  • 一個 Dropout 層丟棄率為 70%
  • 一個 Softmax 層用於 1000 分類,測試時被拋棄

6. 實驗結果

訓練多個模型,它們的參數初始化和學習率策略都是一樣的,但獲取訓練圖片的采樣方法不同以及看到訓練集的順序是隨機的。然後,對一個測試圖片,通過不同的方法裁剪出多張圖片。最後,將這些不同圖片不同模型的輸出結果做一個平均作為最終的預測結果。

技術分享圖片

技術分享圖片

獲取更多精彩,請關註「seniusen」!

技術分享圖片

Inception——Going deeper with convolutions