GoogLetNet網絡結構詳解與模型的搭建

首先給出三個鏈接:

1. GoogLeNet網絡結構詳解視頻

2. 使用pytorch搭建GoogLeNet網絡並訓練

3. 使用tensorflow搭建GoogLeNet網絡並訓練

 

GoogLeNet在2014年由Google團隊提出(與VGG網絡同年,注意GoogLeNet中的L大寫是爲了致敬LeNet),斬獲當年ImageNet競賽中Classification Task (分類任務) 第一名。原論文名稱是《Going deeper with convolutions》,下面是該網絡的縮略圖,由於原論文提供的圖太大,我將原圖放在博文的最後。

首先說說該網絡中的亮點:

(1)引入了Inception結構(融合不同尺度的特徵信息)

(2)使用1x1的卷積核進行降維以及映射處理 (雖然VGG網絡中也有,但該論文介紹的更詳細)

(3)添加兩個輔助分類器幫助訓練

(4)丟棄全連接層,使用平均池化層(大大減少模型參數,除去兩個輔助分類器,網絡大小隻有vgg的1/20)

 

接着我們來分析一下Inception結構:

左圖呢,是論文中提出的inception原始結構,右圖是inception加上降維功能的結構。

先看左圖,inception結構一共有4個分支,也就是說我們的輸入的特徵矩陣並行的通過這四個分支得到四個輸出,然後在在將這四個輸出在深度維度(channel維度)進行拼接得到我們的最終輸出(注意,爲了讓四個分支的輸出能夠在深度方向進行拼接,必須保證四個分支輸出的特徵矩陣高度和寬度都相同)。

分支1是卷積核大小爲1x1的卷積層,stride=1,

分支2是卷積核大小爲3x3的卷積層,stride=1,padding=1(保證輸出特徵矩陣的高和寬和輸入特徵矩陣相等),

分支3是卷積核大小爲5x5的卷積層,stride=1,padding=2(保證輸出特徵矩陣的高和寬和輸入特徵矩陣相等),

分支4是池化核大小爲3x3的最大池化下采樣,stride=1,padding=1(保證輸出特徵矩陣的高和寬和輸入特徵矩陣相等)。

 

再看右圖,對比左圖,就是在分支2,3,4上加入了卷積核大小爲1x1的卷積層,目的是爲了降維,減少模型訓練參數,減少計算量,下面我們看看1x1的卷積核是如何減少訓練模型參數的。同樣是對一個深度爲512的特徵矩陣使用65個大小爲5x5的卷積核進行卷積,不使用1x1卷積核進行降維話一共需要819200個參數,如果使用1x1卷積核進行降維一共需要50688個參數,明顯少了很多。

 

每個卷積層的卷積核個數如何確定呢,下面是原論文中給出的參數列表,對於我們搭建的Inception模塊,所需要使用到參數有#1x1, #3x3reduce, #3x3, #5x5reduce, #5x5, poolproj,這6個參數,分別對應着所使用的卷積核個數。

下面這幅圖是我將Inception模塊所使用到的參數信息標註在每個分支上,其中#1x1對應着分支1上1x1的卷積核個數,#3x3reduce對應着分支2上1x1的卷積核個數,#3x3對應着分支2上3x3的卷積核個數,#5x5reduce對應着分支3上1x1的卷積核個數,#5x5對應着分支3上5x5的卷積核個數,poolproj對應着分支4上1x1的卷積核個數。

 

接着下來在看看輔助分類器結構,網絡中的兩個輔助分類器結構是一模一樣的,如下圖所示:

着兩個輔助分類器的輸入分別來自Inception(4a)和Inception(4d)。

輔助分類器的第一層是一個平均池化下采樣層,池化核大小爲5x5,stride=3

第二層是卷積層,卷積核大小爲1x1,stride=1,卷積核個數是128

第三層是全連接層,節點個數是1024

第四層是全連接層,節點個數是1000(對應分類的類別個數)

 

關於模型的搭建與訓練代碼放在我的github中,大家可自行下載使用:

https://github.com/WZMIAOMIAO/deep-learning-for-image-processing

pytorch版本在pytorch_learning文件夾中,tensorflow版本在tensorflow_learning文件夾中.
 

最後給出我標註了部分信息的GoogLeNet網絡結構圖:

 

 

 

 

 

 

 

發佈了34 篇原創文章 · 獲贊 117 · 訪問量 13萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章