Kaggle PetFinder.my - Pawpularity Contest

老肥今天和大家分享的是剛剛結(jié)束的kaggle競賽PetFinder.my-Pawpularity Contest,具體任務(wù)是使用一些元數(shù)據(jù)以及圖像數(shù)據(jù)做出流行度預(yù)測(一個回歸問題)。然而本題其實元數(shù)據(jù)并無用處(負(fù)收益),主要就是一個圖像的競賽。在本次比賽中,我犯了一些錯誤但也學(xué)習(xí)了很多,本文具體內(nèi)容分成第一部分比賽回顧講述我們隊的具體方案,第二部分Top方案上分點總結(jié)對本次競賽的上分點做一個盤點。
比賽回顧
本次比賽的主要思路就是把回歸任務(wù)看作分類任務(wù),使用BCEWithLogitsLoss損失函數(shù),使用swin_large模型(本次競賽的明星模型)進行訓(xùn)練預(yù)測,采用常規(guī)的數(shù)據(jù)增強手段,五折交叉驗證。
我們隊也采用了多種學(xué)習(xí)的策略,主要有一些幾種:
策略一,使用額外的數(shù)據(jù)集訓(xùn)練一個 貓狗細(xì)分類器(分成37類,采用了efficientnet_b0),輸出每一類的分類概率與swin_large輸出的特征向量作為拼接,再輸入全連接層作為最后的輸出【PB17.081】。策略二,使用yolo模型識別有貓或是有狗的 粗分類,將標(biāo)簽送入模型進行學(xué)習(xí)【PB17.090】。策略三,使用 SVR Head對深度學(xué)習(xí)模型的輸出做一個集成【PB17.123】。(此處采用原始的swin,未混合策略一與策略二,因為LB成績過低,未在后續(xù)使用(當(dāng)事人老肥非常后悔))
最后采用多模型平均融合的策略,這里有一個非常值得反思的地方,我們在本次比賽中沒有好好的評測利用CV分?jǐn)?shù),而是使用了LB成績最好的模型進行融合,導(dǎo)致切榜之后shake了三位數(shù)的排名,這是非常不應(yīng)該的,
以后在每一次模型迭代的時候都應(yīng)該保存一份OOF.csv來正確地計算CV得分,避免過度擬合公共排行榜,避免大幅shake down(下圖是Leadboard shake圖,來自[5])。

Top方案上分點總結(jié)
重復(fù)的圖像放到同一個fold里面,保證驗證集里圖像未泄露導(dǎo)致過擬合[1]。
為了使它看起來像 petfinder 網(wǎng)站上的縮略圖,
剪切圖像的長邊,然后再調(diào)整分辨率, 直接Resize會改變縱橫比[1][2]。多任務(wù)學(xué)習(xí),增加第二個學(xué)習(xí)的任務(wù),預(yù)測是貓或者是狗[2]。使用額外的數(shù)據(jù),在上一屆PetFinder競賽中,有約1700個圖像與本次競賽的訓(xùn)練集圖像(約占17%)重復(fù),由于測試集是從總體樣本中抽樣的,所以同樣存在部分比例的測試集圖像來自于上一屆PetFinder競賽, 而上一屆競賽中元數(shù)據(jù)是非常有用的(本次競賽元數(shù)據(jù)對提高分?jǐn)?shù)毫無用處),這便可以使用圖像哈希進行匹配的方法找出對應(yīng)圖片并將元數(shù)據(jù)作為特征輸入樹模型(未匹配的全部為NaN),提高模型的預(yù)測能力[3]。使用SVR Head,訓(xùn)練深度學(xué)習(xí)模型時,在其頭部拼接一個SVR頭,該SVR使用深度學(xué)習(xí)模型提取的特征向量以及元數(shù)據(jù)并最后與該深度學(xué)習(xí)模型的輸出做集成[2]。使用hill climbing算法做集成,先選擇所有模型中oof得分最高的,然后選擇新的模型與之前的模型做集成,得到集成分?jǐn)?shù)最好的第二個模型,加入到集合之中,重復(fù)過程直至提升小于指定閾值[2][4]。
參考資料
[1]https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301072 [2]https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301015 [3]https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301091
[4]https://www.kaggle.com/c/siim-isic-melanoma-classification/discussion/175614 [5]https://www.kaggle.com/c/petfinder-pawpularity-score/discussion/301192
——END——
