返回列表

9th Place Solution

570. Google - American Sign Language Fingerspelling Recognition | asl-fingerspelling

开始: 2023-05-10 结束: 2023-08-24 计算机视觉 数据算法赛
第9名解决方案 - ASL Fingerspelling竞赛

第9名解决方案

竞赛排名:第9名

作者:Rob Mulla

团队成员:Rafi Hai, Gilles Vandeweele, Rob Mulla

发布时间:2023年8月26日

总得票数:43票

以下内容是与@rafiko1@group16以及我本人的团队共同努力的结果。

我们要感谢主办方组织了一场精彩的比赛,真的非常有趣,我们也很高兴能够进入金牌区!我们已经阅读了一些顶尖团队的解决方案——祝贺所有参与者。

要点总结

我们使用了与@hoyso48在ASL-sign竞赛中类似的架构。我们的模型包含六个Conv1D/Transformer块,使用CTC损失函数训练了500多个epoch,并采用了大量数据增强。

这场比赛带来的挑战不仅仅是实现模型准确性。我们还必须满足模型限制(5小时提交时间和40MB模型大小)。同时需要确保所有代码都能很好地转换为tflite格式,这有时令人沮丧。这要求我们在模型大小和推理时间之间找到良好平衡,并尽量减少后处理。

数据与预处理

我们以训练数据为基础数据集,但在微调期间也使用了补充数据和外部数据(ChicagoWild/Plus)。所有数据集的预处理方式相同:

  • 使用每个点的均值和标准差进行标准化缩放。
  • 每个点的x、y、z坐标。
  • 使用的关键点包括:RHAND(右手)、LHAND(左手)、LIP(嘴唇)、POSE(姿态)、REYE(右眼)和LEYE(左眼)。
  • 我们尝试了不同的最大帧长度设置,因为它对我们的预处理影响最大,最终确定为356帧。
  • 对非手部帧进行下采样:为处理超过356帧的样本,我们首先以均匀间隔移除缺少手部的帧。当我们在推理中加入此方法时,性能得到了提升——因此最终我们也将其加入了训练流程。
  • 调整大小:对下采样后仍超过最大帧长度的样本进行调整。

数据增强

大量数据增强帮助我们在长期训练中避免过拟合。

  • 镜像/翻转
  • 随机重采样
  • 随机旋转
  • 随机空间和时间掩码
  • 时间裁剪
  • 极少量随机噪声
  • 随机缩放

训练过程

由于每个模型的训练都需要很长时间(在Colab TPU上运行数天),我们从最佳检查点恢复,以试验不同的数据增强方式、数据比例和学习率调度。很难完全追溯我们到达最终模型的步骤,但总体思路是:

  • 以恒定学习率进行基础训练,不使用增强,直到收敛(约150个epoch)。
  • 引入大量数据增强,持续训练直到验证分数趋于平稳(200-400+个epoch)。

在比赛最后一周,我们不同实验的验证分数提升示例如下:

直到比赛结束,我们仍能通过更多训练获得小幅分数提升。

模型架构

最初,我尝试了类似signs竞赛第二名方案的efficientnet方法。后来,我转向了类似公共notebook的第一名架构。合并团队后,我们发现双方都有相似的架构,但@rafiko1做了一些改进,提升了在该任务上的性能:

  • 将每个Conv/Transformer块中的Conv1D层从3层改为2层。
  • 增加到6个块(形成一个1050万参数的模型)。
  • 参数设置:384最大帧数、320维、每个transformer 8个头。
  • 未使用最终的MaxPooling层。

我们还试验了使用DebertaV2代替transformer块,但最终模型未采用。

在不重新训练的情况下扩大模型规模

在比赛接近尾声时,意识到我们并没有很好的模型集成方法,我们希望在不重新训练的情况下获得尽可能大的模型。我们发现,与其从头重新训练,不如简单地增加Conv1D/Transformer块的数量——并从之前的最佳模型复制权重,重复最终层的权重。这使得模型能够快速收敛,并在5小时推理限制下挤出额外的准确率。

最终方案中未采用的尝试

  • 基于伪标签的Cutmix:想法是利用模型预测来定位视频中显示每个字母的帧,然后在训练期间应用帧级cutmix。最初有效,但每次修改预处理或模型架构时都需要重新创建tfrecords,因此在最终方案中未采用。使用时我们只在相似短语类型之间应用cutmix(仅将电话号码相互混合等),但有趣的是,读到顶尖团队发现最好只在同一 signer 之间混合。
  • 集成技术:无法在tflite中使用CTC损失找到好的解决方案。
  • Beam search
  • Efficientnet/Transformer
  • DebertaV2

后处理/集成

填充词:正如其他人指出的,数据集中有相当多样本的帧数很少。这些样本与目标相关的信号很低或没有。我们发现直接用一个填充词('+w1- ea-or')替换它们更好。我们还发现,最好将这些应用于帧数少于30帧且预测短语长度小于等于6个字符的样本。
模型权重平均:每次训练运行的最终epoch,对最后几个epoch的权重进行平均,这极大地帮助了CV和LB分数。在比赛后期,当我们的模型更强时,这种方法效果减弱。

强大的验证/LB相关性

我们跟踪了每次提交的执行时间和CV/LB相关性。这场比赛的验证集(一个parquet文件)与LB之间有很强的相关性。我们最好的private LB分数是0.788,但我们没有选择它,因为它在public LB上表现不佳。

同比赛其他方案