我在<Kaggle> <Flower Classification with TPUs>中的解決方案

 

Intro

  任務是, 使用tensorflow和主辦方提供的TPUs訓練自己的模型,對104種花朵圖像作分類. 主辦方提供了最高分辨率爲512x512的圖像數據集. 在提交測試集結果後,系統採用F1 score進行評分. 在這場playground比賽中,我採用了 data argumention 和 應用多個SOTA模型作ensemble 的技巧, 後期又使用了外部數據, 取得了比較靠前的成績.

 

Backbone與調參

  我所使用到的SOTA模型--- EfficientNetB7, DenseNet201 . EfficentNetB7選擇noisy-student作爲預訓練權重,在訓練時候作全局訓練,    DenseNet201選擇imagenet作爲預訓練權重.  ENet在40Epoch左右基本收斂到全局最優, Densenet在30EPOCH左右時候基本收斂到全局最優.  因爲是在TPU上訓練,batch size設置爲了每個單元16, 總共8個單元,也就是全局128的batch size.   另外設置了學習率 callback,實踐標明使用lrfn對調參有顯著正影響.

 

數據擴充data argumention

  比賽過程中我嘗試了多種圖像DA手段, 如mixup , cutmix , brightness 等等, 最後基於效果只選用了random flip left right 和random saturation .

  另外將官方提供的驗證集合併到訓練集中作爲訓練數據 也是提分必要手段.

 

比賽中遇到的一些問題

  首先是TPU使用超時. 主辦方爲每個notebook設置了運行上限三小時, 這導致模型訓練過程受限, 我採用了保存模型權重到本地,再加載模型權重這種多notebook訓練一個模型的方法, model.save_weights() 和model.load_weight()的延時超低, 實踐表明這是一個超實用的trick.

  其次是外部數據的實用. 主辦方並沒有對此做出限制要求. 我使用了多途徑的花朵圖像數據投入訓練, 最終使結果分數有了明顯的提升.

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章