水下魚類物種識別(得分99.89)
1、數據預處理
①查看圖片數據,觀察發現這些魚類圖片分辨率大多數都是很小的,我們可以從小分辨率開始逐步增大圖像分辨率,通常可以從128開始
②自定義數據集劃分,可以將訓練集和驗證集劃分爲8:2或者9:1,特別是數據量少時我們需要儘可能將訓練集設置大一點
③數據增強:訓練集數據增強使用AutoML的RandAugment可以防止過擬合,並且通常會比自己手工試數據增強效果好很多;驗證集數據增強,訓練發現直接使用Resize的方式會比先Resize再CenterCrop的效果要好,可能是CenterCrop會丟失一些信息
2、選擇baseline
①可以考慮使用resnetxt-swsl系列或者efficientnet系列作爲baseline,我這邊使用的是resnetxt101-32x8swsl
②實驗可以發現efficientnet佔用內存會相對大一點,efficientnet-b3佔用內存和resnetxt101-32x8swsl就已經差不多大了,對於圖片較大的數據集來說使用efficientnet系列效果會好點
③使用efficientnet作爲baseline學習率可以選擇爲0.005 ~ 0.01,使用resnetxt101-32x8swsl作爲baseline學習率可以選擇爲0.0001 ~ 0.0005
3、提分技巧
①LabelSmoothingCrossEntropy:使用標籤平滑損失函數可以防止過擬合,訓練發現使用CrossEntropy泛化能力會相對較差,加上標籤平滑泛化能力相對好一點,因子一般取0.1即可
②ReduceLROnPlateau:訓練發現使用ReduceLROnPlateau學習率調整技術可以使得loss下降更加平滑,一般將驗證acc作爲評判標準,patience選擇3或者4
③TTA:訓練發現使用測試時間增強技術,可以穩定提分0.06 ~ 0.2分,只不過測試時間會加長很多,通常使用五切測試增強即可
④模型融合:訓練發現使用模型融合技術,可以提高測試效果,我這邊用到的是resnetxt101-32x8swsl和efficientnet-v3進行融合
本文爲作者在FlyAI平臺發佈的原創內容,採用知識共享署名-非商業性使用-禁止演繹 4.0 國際許可協議進行許可,轉載請附上原文出處鏈接和本聲明。
本文鏈接地址:https://www.flyai.com/n/131409