背景
google在InceptionV1之後,又發表文章《Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift》、《Rethinking the Inception Architecture for Computer Vision》,前者提出了廣泛使用的Batch Normalization方法,後者提出了InceptionV2、InceptionV3結構,通過在InceptionV1的基礎上逐步改進得到V2,最後彙總所有的改進策略得到V3。
使用RMSprop優化器,而非SGD優化器
使用Batch Normalization,將每一層的輸入儘量規範化,在輔助分類器中也使用BN
分步卷積,將大尺寸的卷積核分解爲多個小卷積核,減少計算量、提升計算速度
卷積與池化並行進行降維,減少參數量的同時 避免表徵瓶頸(representational bottlenecks)
使用Label Smoothing進行訓練,減輕預測中非最大概率值的懲罰
網絡結構
網絡結構如上圖,在Inception部分,表格與文字部分不一致,儘量以圖片部分爲準,同時借鑑tensorflow官方實現代碼
文字表述:
在35*35部分有3個傳統模塊,每個模塊有288個filters;這部分使用768個filters進行卷積與池化並行降維操作(見Section5,即圖10,但是5*5未分解),將35*35降至17*17
之後,接上5個分解後的模塊,結構如圖5(在InceptionV1模塊的基礎上講5*5分解爲兩個3*3),並使用卷積與池化並行降維操作,如圖10,降至8*8*1280
最後,使用圖6所示的兩個模塊,輸出2048個filters
本文實現的Inception部分結構:
35*35*288 ——> 33Inception a ——> 33Inception b ——> 33Inception c(並行降維)——>
17*17*768 ——> 17Inception a ——> 17Inception b ——> 17Inception c ——> 17Inception d ——> 17Inception b (並行降維)——>
8*8*1280——> 13Inception a ——> 13Inception b ——> 8*8*2048
代碼:
注:
以上代碼在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
(在pytorchtensorflow、keras、paddle目前不收斂)
文件結構:my_utils.py文件存放通用函數