感谢Kaggle、Google及其他主办方举办了这场激动人心的比赛,希望Kaggle上能举办更多此类竞赛。
TLDR
我的解决方案是一个使用CTC损失函数训练的大型单一模型(无集成,39MB),模型输出形状为(批次大小,句子长度,类别数)。
数据预处理与增强
基本与之前的第一名方案相同,但我发现使用(x, y, z)坐标和姿态关键点能获得更好分数。我使用了以下关键点:左手、右手、眼睛、嘴唇和姿态关键点。
模型
我采用了之前的第一名方案,但使用了Branchformer结构,并将多头注意力机制改为相对多头注意力。模型结构为:1个全连接层 - 4个一维卷积层 - 6个Branchformer层,此外还使用了随机深度(stochastic depth)。
训练
训练轮数(Epoch)= 150
批次大小(bs)= 64
学习率(Lr)= 8e-4
AWP = 训练轮数 × 0.1
学习率调度 = 带预热(比例0.1)的余弦衰减
优化器 = 带Lookahead的Adam
损失函数 = Inter CTC损失(https://arxiv.org/abs/2102.03216)