圖像賽排行榜拉開100名差距的小技巧

極市導(dǎo)讀
?TTA技術(shù)目前是各大圖像相關(guān)的數(shù)據(jù)競(jìng)賽的必備技能之一,它能為最終的成績(jī)帶來(lái)非常大的幫助,也是目前圖像賽的必備技能之一,趕緊收藏吧!?>>加入極市CV技術(shù)交流群,走在計(jì)算機(jī)視覺的最前沿
Kaggle圖像賽上分技巧之TTA: Test Time Aug
1??TTA(Test Time Aug) 1.2.1??導(dǎo)入適合當(dāng)前問題的預(yù)測(cè)器(ClassPredictor用于分類,SegPredictor用于分割) 1.2.2??用配置和所需的任何參數(shù)實(shí)例化類 1.2.3??對(duì)圖片進(jìn)行預(yù)測(cè) 1.2.4??實(shí)驗(yàn)結(jié)果 1.1??簡(jiǎn)介 1.2??案例(keras) 1.3??小結(jié) 2??參考文獻(xiàn)
簡(jiǎn)介
我們都知道對(duì)我們的訓(xùn)練數(shù)據(jù)進(jìn)行翻轉(zhuǎn),平移,縮放等擴(kuò)充的操作往往可以獲得一個(gè)訓(xùn)練更好的網(wǎng)絡(luò)模型,這些擴(kuò)充操作往往可以幫助我們的模型更好的挖掘到那些對(duì)于位置,光照等信息不敏感的信息,從而具有更好的泛化性,得到更好的預(yù)測(cè)結(jié)果。那既然訓(xùn)練集的數(shù)據(jù)可以擴(kuò)充,測(cè)試集呢?
Bingo!沒錯(cuò),測(cè)試集也是可以采取類似的操作。而這種操作我們稱之為TTA(Test Time Augmentation),顧名思義就是在測(cè)試的階段對(duì)數(shù)據(jù)進(jìn)行擴(kuò)充。
TTA是一個(gè)非常通用的Trick,目前幾乎絕大多數(shù)圖像相關(guān)的競(jìng)賽都會(huì)使用到,而且基本是99%都能帶來(lái)線上排行榜的提升。那么究竟是怎么做的呢?其實(shí)很簡(jiǎn)單:就是在模型測(cè)試時(shí),對(duì)原始的測(cè)試圖像進(jìn)行各種策略的擴(kuò)充,例如:
圖像裁剪; 圖像縮放; 圖像旋轉(zhuǎn); 圖像平移; ...
然后我們將預(yù)測(cè)的結(jié)果進(jìn)行某種程度的融合,最常見的就是取平均值,然后將該分?jǐn)?shù)作為最終的預(yù)測(cè)分?jǐn)?shù)。
TTA操作較早出現(xiàn)在2015年ICLR的論文"Very Deep Convolutional Networks for Large-Scale Image Recognition"
We also augment the test set by horizontal flipping of the images; the soft-max class posteriors of the original and flipped images are averaged to obtain the final scores for the image.
案例(基于Keras)
以kaggle Dogs VS Cats為例,?edafa (TTA package)

1. 導(dǎo)入適合當(dāng)前問題的預(yù)測(cè)器(ClassPredictor用于分類,SegPredictor用于分割)
from edafa import ClassPredictor
2.繼承預(yù)測(cè)器類并實(shí)現(xiàn)主函數(shù):predict_patches(self,patches)
class myPredictor(ClassPredictor):def __init__(self,model,*args,**kwargs):super().__init__(*args,**kwargs)self.model = modeldef predict_patches(self,patches):return self.model.predict(patches)
3. 用配置和所需的任何參數(shù)實(shí)例化類
conf = '{"augs":["NO",\ "FLIP_LR"],\ "mean":"ARITH"}'
4. 對(duì)圖片進(jìn)行預(yù)測(cè)
p = myPredictor(model,conf)y_pred_aug = p.predict_images(X_val)y_pred_aug = [(y[0]>=0.5).astype(np.uint8) for y in y_pred_aug ]print('Accuracy with TTA:',np.mean((y_val==y_pred_aug)))
5. 實(shí)驗(yàn)結(jié)果
使用TTA:Accuracy with TTA: 0.7892 不適用TTA:Accuracy without TTA: 0.7852571428571429
小結(jié)
TTA技術(shù)目前是各大圖像相關(guān)的數(shù)據(jù)競(jìng)賽的必備技能之一,它能為最終的成績(jī)帶來(lái)非常大的幫助,也是目前圖像賽的必備技能之一,趕緊收藏吧!
參考文獻(xiàn)
1.Kaggle小技巧:TTA(test time augmentation)測(cè)試時(shí)加強(qiáng):https://www.shangmayuan.com/a/0e4942dc496047bb95c5806c.html
2.https://github.com/qubvel/ttach
3.https://www.kaggle.com/andrewkh/test-time-augmentation-tta-worth-it
推薦閱讀
基于大尺寸圖像的小目標(biāo)檢測(cè)競(jìng)賽經(jīng)驗(yàn)總結(jié)
2020 CCF BDCI 遙感影像地塊分割冠軍競(jìng)賽方案 & 語(yǔ)義分割trick整理
從39個(gè)kaggle競(jìng)賽中總結(jié)出來(lái)的圖像分割的Tips和Tricks

