GoogLeNet网络结构详解与模型的搭建[通俗易懂]
首先給出三個鏈接:
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)使用1×1的卷積核進行降維以及映射處理 (雖然VGG網絡中也有,但該論文介紹的更詳細)
(3)添加兩個輔助分類器幫助訓練
(4)丟棄全連接層,使用平均池化層(大大減少模型參數,除去兩個輔助分類器,網絡大小只有vgg的1/20)
接著我們來分析一下Inception結構:
左圖呢,是論文中提出的inception原始結構,右圖是inception加上降維功能的結構。
先看左圖,inception結構一共有4個分支,也就是說我們的輸入的特征矩陣并行的通過這四個分支得到四個輸出,然后在在將這四個輸出在深度維度(channel維度)進行拼接得到我們的最終輸出(注意,為了讓四個分支的輸出能夠在深度方向進行拼接,必須保證四個分支輸出的特征矩陣高度和寬度都相同)。
分支1是卷積核大小為1×1的卷積層,stride=1,
分支2是卷積核大小為3×3的卷積層,stride=1,padding=1(保證輸出特征矩陣的高和寬和輸入特征矩陣相等),
分支3是卷積核大小為5×5的卷積層,stride=1,padding=2(保證輸出特征矩陣的高和寬和輸入特征矩陣相等),
分支4是池化核大小為3×3的最大池化下采樣,stride=1,padding=1(保證輸出特征矩陣的高和寬和輸入特征矩陣相等)。
再看右圖,對比左圖,就是在分支2,3,4上加入了卷積核大小為1×1的卷積層,目的是為了降維,減少模型訓練參數,減少計算量,下面我們看看1×1的卷積核是如何減少訓練模型參數的。同樣是對一個深度為512的特征矩陣使用64個大小為5×5的卷積核進行卷積,不使用1×1卷積核進行降維話一共需要819200個參數,如果使用1×1卷積核進行降維一共需要50688個參數,明顯少了很多。
每個卷積層的卷積核個數如何確定呢,下面是原論文中給出的參數列表,對于我們搭建的Inception模塊,所需要使用到參數有#1×1, #3x3reduce, #3×3, #5x5reduce, #5×5, poolproj,這6個參數,分別對應著所使用的卷積核個數。
下面這幅圖是我將Inception模塊所使用到的參數信息標注在每個分支上,其中#1×1對應著分支1上1×1的卷積核個數,#3x3reduce對應著分支2上1×1的卷積核個數,#3×3對應著分支2上3×3的卷積核個數,#5x5reduce對應著分支3上1×1的卷積核個數,#5×5對應著分支3上5×5的卷積核個數,poolproj對應著分支4上1×1的卷積核個數。
接著下來在看看輔助分類器結構,網絡中的兩個輔助分類器結構是一模一樣的,如下圖所示:
著兩個輔助分類器的輸入分別來自Inception(4a)和Inception(4d)。
輔助分類器的第一層是一個平均池化下采樣層,池化核大小為5×5,stride=3
第二層是卷積層,卷積核大小為1×1,stride=1,卷積核個數是128
第三層是全連接層,節點個數是1024
第四層是全連接層,節點個數是1000(對應分類的類別個數)
關于模型的搭建與訓練代碼放在我的github中,大家可自行下載使用:
https://github.com/WZMIAOMIAO/deep-learning-for-image-processing
pytorch版本在pytorch_learning文件夾中,tensorflow版本在tensorflow_learning文件夾中.
最后給出我標注了部分信息的GoogLeNet網絡結構圖:
總結
以上是生活随笔為你收集整理的GoogLeNet网络结构详解与模型的搭建[通俗易懂]的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 北京摇号时间每月几号
- 下一篇: 好想法是什么意思