華爲雲杯-粵港澳大灣區強降水臨近預測比賽小結

比賽背景

  1. 根據近年的雷達回波格點數據共同建立的標準雷達數據集爲基礎劃分了訓練集和測試集,希望參賽者綜合運用計算機視覺、機器學習、深度學習等技術,實現根據過去2個小時內的雷達回波圖像數據預測未來2小時的雷達回波圖像變化,並提交未來30分鐘、60分鐘、90分鐘和120分鐘的雷達回波 圖像數據。
  2. 團隊rank:初賽:25 ,因前幾名有開小號被封號順位進決賽
    比賽官網地址
    競賽主頁

賽題分析

  1. 本次比賽跟18年的全球氣象AI挑戰賽性質類似,都是預測未來的雷達回波圖像,但本次比賽挑戰時間更長的序列圖,難度更大,且從多次提交的反饋情況來看計算評分的hss函數給強回波和誤分類的情況權重非常高,且本次比賽的從計算方式的角度較之18年的比賽更像一個多類語義分割比賽,而非傳統的迴歸預測。
  2. 18年挑戰賽top解決方案分析:首先18年挑戰賽的數據集十分劣質,樣本極度不平衡,大多數樣本是現實中無降水的過程,所以這樣直接導致很多選手直接套用施行健的幾個模型訓練,評分很低(比賽主頁交流區中可以看到)而top5的解決方案中有兩個是基於光流法,這是因爲預測時效很短,而光流法在0.5h的效果並不一定比DL模型差,所以KNN+光流也能取得很好的效果,但不適用於本次賽題(18年的top5佑佑先鋒本次比賽得分很低),而top1的解決方案很有參考意義分類型訓練(但本人嘗試後效果不好下文論述),以及multi-head-attention的ConvLSTM+GDL的第四名。

比賽歷程

  • 基於Unet的baseline
    參考追風比賽的top解決方案unet可能會在比賽中效果不錯,由於其簡單輕量所以選擇它作爲baseline模型,這時我還沒意識到語義分割的問題,仍然當做迴歸任務來處理,數據集取樣採用官方的建議,使用前2 h間隔12 min取10張圖作爲input,預測未來2 h的4張圖,loss函數採用MSE+MAE,baseline的得分爲0.15左右,之後採用BMSE+BMAE進行微調調到0.17左右,接着我使用帶SE-Attention的Unet看看能否有所提高,但詭異的是評分反而下降。

  • 多模型嘗試
    (1)接着我們對不同模型進行了嘗試,首先我本人復現了predrnn++模型,但於tf版本的官方開源有所差別,我採用了施行健17年軌跡GRU裏的encoder-decoder結構(官方tf和torch的開源都沒法在不同層間進行上下采樣),使用三層的ED結構,分別用兩套卷積層對M state和Hidden state進行上下采樣節約計算開銷,並且我混用了ST-LSTM和casualLSTM底層用了ST-LSTM+GHU,並分別嘗試了採樣層加激活函數和不加激活函數兩種版本,但詭異的是不加激活函數的模型分數可以到0.18而加了激活函數的只有0.13這個我始終沒有搞懂爲什麼。

    (2)而隊友復現predrnn+selfattention也未達到0.18,之後隊友魔改了MIM模型(官方版本)我本人嘗試了帶scheduled sampling版本的和不帶的差別不大,原因可能是decoder部分timestep只有4,如果輸出更長也許效果會很明顯,這裏的輸出也有兩種版本由於時間有限未嘗試,就是decoder部分每一層的Hidden進行stack操作和直接對最後一層直接1*1卷積兩種方式,據說用3D卷積效果會更好?我未進行嘗試。MIM的分在0.17左右比predrnn++效果要差一點,模型均用BMSE+BMAE損失函數,之後我又嘗試了ConvGRU+BMSE+GDL分數也在0.178左右比MIM要好一點。
    (3)模型集成後效果反而很差,這個我當初十分困惑,我將unet+mim+predrnn++簡單的進行平均融合,分數反而更低,可能的原因如下,模型之間的差異很小(但訓練的過程中每個模型的訓練集和驗證集都是隨機劃分的,應該也是有差異的)這種bagging的方式效果不明顯,此外評分方式只計算區間(分類)小的浮動對評分計算方式來說影響不大,其只關心分類正確而非樣本的間的距離,如果採用單個最優模型k-flod驗證是否會更好呢?但這樣計算開銷會非常大。

  • 數據清洗與特徵工程
    (1)與此同時我們進行了數據eda和清洗工作,發現樣本序列均值大概在24dbz左右呈現正態分佈,比起18年的數據集要均勻很多,但樣本中有許多全黑的缺測圖和不同仰角混用拼圖,隊友採用計算滑動序列標準差的方式選擇大於3西格瑪的樣本判定爲有問題的圖片來填充數據集,我本人直接採用剔除明顯含有劣質圖片的樣本來訓練(大概2000個左右)***但效果不顯著***比賽後才發現測試集中的忘處理了,隊友在後續提交的作品中也進行了填充也有小幅度的分數提高,我本人嘗試用rover光流對提交作品進行填充,但算法有點問題最後告敗。在eda的時候我嘗試進行樣本的特徵構造如均值,方差,回波強度加強與減弱幅度等,用lightgbm預測測試集的樣本分佈發現樣本分佈與訓練集分佈大體相似。
    (2)之後參考18年冠軍的分類型訓練,我先用kmean對樣本進行聚類,但分出來的很詭異,索性直接分成弱和強的兩個模型用單模最高的predrnn++去訓練,結果直接爆炸,當時也困惑了很久,我猜原因是,樣本數量太少只有兩萬個,我按24dbz均值去分正好對半,但這樣很可能分分鐘過擬合,導致預測的時候gg?但這只是猜測具體原因仍不太清楚。

  • 多類語義分割
    接着嘗試了predrnn+unet對任務進行多類語義分割,使用魔改後帶權重的交叉熵損失函數一度把分拉倒top,事實證明這確實是個語義分割比賽,接着我嘗試了multi-label的dice損失函數和iou損失函數來解決樣本類別不均勻,但又讓人疑惑的是分數又下降了,真是百思不得其解,我試過單獨訓練,fine-tune效果都下降但降的不是很多,然後我將unet接到convgru上訓練後發現預測圖全是一小塊一小塊的馬賽克,隊友將unet接到MIM上後也出現了同樣的情況,這個到現在也不清楚是什麼情況。後來我又嘗試了先ranger後sgd訓練效果反而下降,使用sgd+餘弦退火效果也不明顯。

比賽總結和討論

(1)本次比賽主要還是以多分類的語義分割爲主,單模做迴歸預測估計通過調參最高能到0.20。
(2)經過思考後,我發現可能在切割樣本的時候還可以有所提升,官方的建議是一個40張圖的序列作爲一個樣本前20預測後20中的4張,但通過數據eda發現整個訓練集中的過程大多是平穩的,即很少出現強烈的回波生消,這樣我們就不需要更多的信息(非平穩)(使用全部前20張的信息)來預測,可能只需要5張連續的圖(平穩)來作爲input,這樣一個樣本通過滑動窗可以切出4個樣本,可以大幅度的擴充數據集避免過擬合,但本人未經過嘗試有些遺憾,此外這也可能解釋了MIM效果不好的原因,一方面decoder輸出短導致空間state的效果下降,另一方面的可能是針對非平穩過程的MIM在處理平穩的回波時效果不顯著,反而增加了模型的複雜度降低了泛化能力。當然這都是我猜的,沒辦法從公式上論證。
(3)可以嘗試更多的語義分割比賽的trick和模型,比如加入focal loss使用predrnn+deeplabv3或者其他sota模型,在訓練中使用snapshot ensemble策略也許能提高一些,但我很困惑前面超過0.25分的不知道用了什麼方法漲點的,簡單的調參感覺很難衝到這麼高,希望比賽結束後好好學習一下。
(4)最後時間限制未嘗試Transformer模型,如果時間容許Transformer應該會有不錯的表現

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