Kaggle | Bengali 比赛总结(孟加拉字符分类 )
Bengali.AI 總結(jié)
Bengali.AI Handwritten Classification?
https://www.kaggle.com/c/bengaliai-cv19?
比賽內(nèi)容:孟加拉字符分類?
賽題解析
每一個(gè)字符由三部分組成:
grapheme root (共168類)
vowel diacritics (共11類)
consonant diacritics (共7類)
比賽任務(wù)需要對每一個(gè)字符識別的三個(gè)元素類別,因此這個(gè)比賽的任務(wù)是很常見的CNN分類任務(wù),只不過Bengali是三個(gè)類別的多類別分類比賽。這個(gè)比賽非常有意思,竟然讓榜單shake的天翻地覆,過擬合A榜簡直不要太簡單:
普通模型可以A榜得分0.97~0.99;
A榜得分和本地CV一致,但與B榜不一致;
設(shè)想一下一個(gè)多類別分類任務(wù),CNN精度竟然可以達(dá)到99%的準(zhǔn)確率,所以對于絕大部分選手都是過擬合,99%的人都翻車了,隨便提交一個(gè)baseline都可以達(dá)到銀牌和銅牌;
為什么會(huì)有這么大的變化呢,原因在于訓(xùn)練集中字符標(biāo)簽的空間與測試集的空間是不一樣的,也就是說在測試集會(huì)出現(xiàn)unseen的樣本。
對于類別分布不一致的情況的,會(huì)導(dǎo)致CV和B榜成績不一致,雖然在比賽期間已經(jīng)有類似的帖子,但我本人并沒有注意到:?
https://www.kaggle.com/karishmakunder/validation-with-unseen
Solution: 1st?Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135984
第一名思路:CycleGAN ZeroShot solutions,考慮所有類別的組合情況,共14784 (168 * 11 * 8) 種情況,這是首次GAN模型在Kaggle比賽中成功應(yīng)用;
第一名將數(shù)據(jù)按照可見和不可見進(jìn)行了劃分:
模型1:Out of Distribution Detection Model
預(yù)測圖像是Seen class,還是Unseen Class(與訓(xùn)練數(shù)據(jù)相比):使用模型類別輸出的大小確定,如果所有類別的輸出概率都很低,則是Unseen;反之則是Seen;
模型2:Seen Class Model
預(yù)測圖像屬于訓(xùn)練數(shù)據(jù)中Seen class對應(yīng)的類別;
模型3:Unseen Class Model
分為兩步:(1)生成新字符:使用ttf字體文件生成字符圖像;(2)字符風(fēng)格轉(zhuǎn)換:使用CycleGAN將生成的字符在變換為比賽的風(fēng)格;
第一名的方法非常清晰,通過ttf字體文件生成了unseen的樣本,同時(shí)利用CycleGAN進(jìn)行風(fēng)格轉(zhuǎn)換操作,這些都是認(rèn)真分析賽題后做的。第一名整體的流程可以參考Model Overview圖。
Solution: 2nd Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135966
Solution:?3rd Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135982
預(yù)訓(xùn)練模型: 使用hflip and vflip擴(kuò)增3倍數(shù)據(jù)集;
for seen grapheme and unseen grapheme:
模型1:encoder>gem>bn>fc
模型2 :encoder>avg>bn>dropout>fc
arcface,用來類別距離檢測unseen
encoder>avgpool>conv1d>bn
s 32(train), 1.0(test)
m 0.5
訓(xùn)練
seen 字符:?使用3倍數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,然后在原始數(shù)據(jù)集上進(jìn)行finetune;
arcface and unseen 字符:?使用arcface在預(yù)訓(xùn)練上進(jìn)行finetune
replace softmax with?pc-softmax
loss function: negative log likelihood
SGD with CosineAnnealing
Stochastic Weighted Average
預(yù)測
use cosine similarity between train and test embedding feature
threshold: smallest cosine similarity between train and validation embedding feature
Solution: 4th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136982
與3th思路類似,也是使用arcface預(yù)測unseen類別;使用特征距離來判斷預(yù)測樣本是seen還是unseen,然后分別使用模型分別預(yù)測;
Solution: 5th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136129
3 heads,?for consonant, vowel and root and
auxiliary?for grapheme with arccos loss
root loss: CrossEntropy
consonant loss: Multi?Binary Crossentropy
vowel loss : CrossEntropy
grapheme loss: ArcCos + CrossEntropy
挖掘consonant diacritic 3/4/6之間的關(guān)系,挖掘不同類的分布關(guān)系,轉(zhuǎn)換為多個(gè)二分類,獲得千分點(diǎn)的提升;
Solution: 6th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136011
Solution: 7th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135960
使用ttf生成47k額外的訓(xùn)練數(shù)據(jù);
Solution: 8th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/135990
使用Arcface檢測seen和unseen;
Solution: 10th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136815
Solution: 14th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136021
Solution: 24th Place
https://www.kaggle.com/c/bengaliai-cv19/discussion/136064
論壇上還有很多比賽總結(jié),非常值得學(xué)習(xí)~
個(gè)人總結(jié)
沒有免費(fèi)的午餐:任何B榜得分雖然有一定運(yùn)氣,但還是實(shí)力說了算。所以要認(rèn)真閱讀比賽數(shù)據(jù),不要有摸獎(jiǎng)心思;
數(shù)據(jù)、模型和損失函數(shù):為了精度,這三者都可以起作用;
評價(jià)函數(shù)和后處理:也會(huì)一定程度影響精度;
雖然這次比賽翻車了,但top選手都有各自的可取之處(讓人大開眼界),所以無腦調(diào)參不可取,要從具體的數(shù)據(jù)分析,找到突破點(diǎn);
也可以看下包佬對此次比賽的總結(jié):
https://zhuanlan.zhihu.com/p/114131221
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊深度學(xué)習(xí)在線手冊AI基礎(chǔ)下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復(fù)“加群”獲取一折本站知識星球優(yōu)惠券,請回復(fù)“知識星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的Kaggle | Bengali 比赛总结(孟加拉字符分类 )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI基础:数据划分、超参数调整、正则化
- 下一篇: 一个哈工大计算机系的在读博士,勤思考爱分