Kaggle | Bengali 比赛总结(孟加拉字符分类 )
Bengali.AI 總結
Bengali.AI Handwritten Classification?
https://www.kaggle.com/c/bengaliai-cv19?
比賽內容:孟加拉字符分類?
賽題解析
每一個字符由三部分組成:
grapheme root (共168類)
vowel diacritics (共11類)
consonant diacritics (共7類)
比賽任務需要對每一個字符識別的三個元素類別,因此這個比賽的任務是很常見的CNN分類任務,只不過Bengali是三個類別的多類別分類比賽。這個比賽非常有意思,竟然讓榜單shake的天翻地覆,過擬合A榜簡直不要太簡單:
普通模型可以A榜得分0.97~0.99;
A榜得分和本地CV一致,但與B榜不一致;
設想一下一個多類別分類任務,CNN精度竟然可以達到99%的準確率,所以對于絕大部分選手都是過擬合,99%的人都翻車了,隨便提交一個baseline都可以達到銀牌和銅牌;
為什么會有這么大的變化呢,原因在于訓練集中字符標簽的空間與測試集的空間是不一樣的,也就是說在測試集會出現unseen的樣本。
對于類別分布不一致的情況的,會導致CV和B榜成績不一致,雖然在比賽期間已經有類似的帖子,但我本人并沒有注意到:?
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比賽中成功應用;
第一名將數據按照可見和不可見進行了劃分:
模型1:Out of Distribution Detection Model
預測圖像是Seen class,還是Unseen Class(與訓練數據相比):使用模型類別輸出的大小確定,如果所有類別的輸出概率都很低,則是Unseen;反之則是Seen;
模型2:Seen Class Model
預測圖像屬于訓練數據中Seen class對應的類別;
模型3:Unseen Class Model
分為兩步:(1)生成新字符:使用ttf字體文件生成字符圖像;(2)字符風格轉換:使用CycleGAN將生成的字符在變換為比賽的風格;
第一名的方法非常清晰,通過ttf字體文件生成了unseen的樣本,同時利用CycleGAN進行風格轉換操作,這些都是認真分析賽題后做的。第一名整體的流程可以參考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
預訓練模型: 使用hflip and vflip擴增3倍數據集;
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
訓練
seen 字符:?使用3倍數據集進行預訓練,然后在原始數據集上進行finetune;
arcface and unseen 字符:?使用arcface在預訓練上進行finetune
replace softmax with?pc-softmax
loss function: negative log likelihood
SGD with CosineAnnealing
Stochastic Weighted Average
預測
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預測unseen類別;使用特征距離來判斷預測樣本是seen還是unseen,然后分別使用模型分別預測;
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之間的關系,挖掘不同類的分布關系,轉換為多個二分類,獲得千分點的提升;
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額外的訓練數據;
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
論壇上還有很多比賽總結,非常值得學習~
個人總結
沒有免費的午餐:任何B榜得分雖然有一定運氣,但還是實力說了算。所以要認真閱讀比賽數據,不要有摸獎心思;
數據、模型和損失函數:為了精度,這三者都可以起作用;
評價函數和后處理:也會一定程度影響精度;
雖然這次比賽翻車了,但top選手都有各自的可取之處(讓人大開眼界),所以無腦調參不可取,要從具體的數據分析,找到突破點;
也可以看下包佬對此次比賽的總結:
https://zhuanlan.zhihu.com/p/114131221
往期精彩回顧適合初學者入門人工智能的路線及資料下載機器學習在線手冊深度學習在線手冊AI基礎下載(pdf更新到25集)本站qq群1003271085,加入微信群請回復“加群”獲取一折本站知識星球優惠券,請回復“知識星球”喜歡文章,點個在看
總結
以上是生活随笔為你收集整理的Kaggle | Bengali 比赛总结(孟加拉字符分类 )的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: AI基础:数据划分、超参数调整、正则化
- 下一篇: 一个哈工大计算机系的在读博士,勤思考爱分