kaggle谷歌手語識(shí)別大賽金牌方案出了!
整理自kaggle平臺(tái)

https://www.kaggle.com/competitions/asl-signs
賽題背景
在美國,每天有33名嬰兒出生時(shí)患有永久性聽力損失。如果沒有美國手語,失聰嬰兒有患語言剝奪綜合征的風(fēng)險(xiǎn)。
PopSign是一款智能手機(jī)游戲應(yīng)用程序,使學(xué)習(xí)美國手語變得有趣、互動(dòng)且易于訪問。玩家將手語標(biāo)志的視頻與包含書面英語單詞的氣泡進(jìn)行匹配,以彈出它們。通過為PopSign訓(xùn)練手語識(shí)別器,參賽者可以幫助游戲更具互動(dòng)性,并提高想要學(xué)習(xí)手語與親人交流的玩家的學(xué)習(xí)能力和信心。
賽題任務(wù)
對(duì)美國手語進(jìn)行分類,幫助失聰兒童的親屬學(xué)習(xí)基本手勢,并更好地與他們的親人溝通。
數(shù)據(jù)描述
本次比賽要求以TensorFlow Lite模型的形式提交。參賽者可使用自己選擇的框架訓(xùn)練模型,只要在提交之前將模型檢查點(diǎn)轉(zhuǎn)換為 tflite 格式即可。
評(píng)估標(biāo)準(zhǔn)
本次比賽的評(píng)估指標(biāo)是簡單的分類準(zhǔn)確性。
優(yōu)勝方案
第一名
https://www.kaggle.com/competitions/asl-signs/discussion/406684
我的解決方案涉及1D CNN 和 Transformer 的組合,使用所有訓(xùn)練數(shù)據(jù)(僅比賽數(shù)據(jù))從頭開始訓(xùn)練,并使用4種子集成進(jìn)行提交。
我最初使用 PyTorch + GPU,但后來切換到 TensorFlow + Colab TPU(tpuv2-8) 以確保與 TensorFlow Lite 的兼容性。
如果幀間相關(guān)性很強(qiáng),1D CNN 會(huì)比 Transformer 更有效。在我的實(shí)驗(yàn)中,純 1D CNN 的性能輕松超過了 Transformer。 因此我最終僅使用 1D CNN 就獲得了 0.80 的公共 LB 分?jǐn)?shù)。然而Transformer 仍然有作用,可以在 1D CNN 之上使用(我們可以將 1d cnn 視為某種可訓(xùn)練的分詞器)。
Model
Regularization
Drop Path(stochastic depth, p=0.2)
high rate of Dropout (p=0.8)
AWP(Adversarial Weight Perturbation, with lambda = 0.2)
預(yù)處理
Augmentation

訓(xùn)練
Epoch = 400
Lr = 5e-4 * num_replicas = 4e-3
Schedule = CosineDecay with no warmup
Optimizer = RAdam with Lookahead(better than AdamW with optimal parameters)
Loss = CCE with label smoothing=0.1 or just p
lain CCE
最終單模結(jié)果
CV(participant split 5fold): 0.80
public LB: 0.80
private LB: 0.88
第二名
https://www.kaggle.com/competitions/asl-signs/discussion/406306
我們使用了一種類似于使用 EfficientNet-B0 模型的音頻頻譜圖分類的方法,使用大量增強(qiáng)和轉(zhuǎn)換器模型(例如 BERT 和 DeBERTa)作為輔助模型。
最終的解決方案包括一個(gè)輸入大小為 160x80 的 EfficientNet-B0,在 8 個(gè)隨機(jī)分割折疊中的單個(gè)折疊上訓(xùn)練,以及在完整數(shù)據(jù)集上訓(xùn)練的 DeBERTa 和 BERT。使用 EfficientNet 的單折模型的 CV 得分為 0.898,排行榜得分約為 0.8。
CNN預(yù)處理
提取了 18 個(gè)嘴唇點(diǎn)、20 個(gè)姿勢點(diǎn)(包括手臂、肩膀、眉毛和鼻子)以及所有手部點(diǎn),總共 80 個(gè)點(diǎn)。
應(yīng)用了各種增強(qiáng)。
實(shí)施了標(biāo)準(zhǔn)規(guī)范化。
沒有刪除 NaN 值,而是在歸一化后用零填充它們。
使用“最近”插值將時(shí)間軸插值為 160 的大小:。
yy = F.interpolate(yy[None, None, :], size=self.new_size, mode='nearest')
最后得到了一個(gè)尺寸為 160x80x3 的張量,其中 3 表示軸。
Transformer預(yù)處理
保留了61個(gè)穴位,其中唇穴40個(gè),手穴21個(gè)。對(duì)于左手和右手,保留 NaN 較少的那個(gè)。如果保留右手,則將其鏡像到左手。
依次應(yīng)用增強(qiáng)、歸一化和 NaN 填充。
長度超過 96 的序列插值為 96。短于96的序列保持不變。
除了原始位置外,還使用了手工制作的特征,包括運(yùn)動(dòng)、距離和角度的余弦。
運(yùn)動(dòng)特征由未來運(yùn)動(dòng)和歷史運(yùn)動(dòng)組成,可表示為:
包括 210 個(gè)手部點(diǎn)之間的完整 21 個(gè)成對(duì)距離。
包括隨機(jī)選擇的190個(gè)成對(duì)距離和8個(gè)嘴唇點(diǎn)中隨機(jī)選擇的40個(gè)角度。
第三名:
https://www.kaggle.com/competitions/asl-signs/discussion/406568
第四名:
https://www.kaggle.com/competitions/asl-signs/discussion/406673
第五名:
https://www.kaggle.com/competitions/asl-signs/discussion/406491
學(xué)姐安排了190多場比賽的top方案!
想要的關(guān)注“KGMking”公眾號(hào),回復(fù)“比賽”免費(fèi)獲取