GoogLeNet Inception v1 結構 及 pytorch、tensorflow、keras、paddle實現ImageNet識別

背景

GoogLeNet是谷歌在imageNet上的ILSVRC 2014大賽冠軍方案,論文“Going deeper with convolutions”網絡主要部分有Inception模塊組成,v1版本的核心思想是通過多個並行的稀疏結構代替密集結構,從而在擴大特徵範圍的同時減少計算量,同時使用1*1卷積再次減少卷積時的計算量。同時,在網絡中間層增加了兩個Loss,用來減弱梯度回傳消失的情況。最終使網絡的寬度和深度都有所增加.

 

網絡結構

藍色部分爲並行的卷積,黃色是爲降低計算量使用的1*1卷積,稱爲降維操作,紅色爲stride爲1的池化(Additionally, since pooling operations have been essential for the success in current state of the art convolutional networks, it suggests that adding an alternative parallel pooling path in each such stage should have additional beefificial effect, too

1*1卷積降低計算量:假設inception輸入爲n*n*j,輸出爲n*n*k,原始版本中3*3卷積過程的參數量爲j*3*3*j=9*jk,降維版本中的參數量爲j*1*1*m+m*3*3*k=m(j+9k),其中m表示1*1降維卷積的通道數,由於j、k通道數可以達到幾百甚至幾千,所以只有m不是過大,降維版本的計算量會遠小於原始版本

完整網絡結構如上圖,主體部分是inception模塊,在訓練時,在4a、4d的輸出部分添加loss輸出如下圖:

• An average pooling layer with 5×5 fifilter size and stride 3, resulting in an 4×4×512 output for the (4a), and 4×4×528 for the (4d) stage.
• A 1×1 convolution with 128 fifilters for dimension reduction and rectifified linear activation.
• A fully connected layer with 1024 units and rectifified linear activation.
• A dropout layer with 70% ratio of dropped outputs.
• A linear layer with softmax loss as the classififier (predicting the same 1000 classes as the main classififier, but removed at inference time)
 

 

代碼:

pytorch實現

tensorflow實現

keras實現

paddle實現

 

 

注:

以上代碼在alexnet的基礎上,實現了:

1)調用框架api讀取數據集

2)進行train、val的流程

3)在train時可以輸出各層shape

4)保存最優loss模型,並在結束時輸出最優loss及對應epoch

5)在訓練結束後查看loss、acc變化曲線

 

(實驗數據集):UC Merced Land Use Dataset,常用的遙感場景分類數據集,21class * 100pic = 2100張圖片,統一爲256*256pix大小

http://weegee.vision.ucmerced.edu/datasets/landuse.html

(在pytorch上可以有有效收斂,在tensorflow、keras、paddle目前不收斂)

 

文件結構:my_utils.py文件存放通用函數

 

 

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