570. Google - American Sign Language Fingerspelling Recognition | asl-fingerspelling
再次感谢Kaggle、Google和其他主办方举办这场激动人心的比赛。我认为这场比赛和上一场比赛都组织得很好,让我们能够尝试各种想法并从彼此身上学到很多。希望Kaggle能举办更多此类比赛。:)
我的整体解决方案与上一场比赛几乎相同,主要是基于上一届冠军模型采用了ASR(自动语音识别)算法(联合CTC + Attention)。模型、预处理和训练的细节与上一场比赛大体相似,因此有关模型/训练/增强等方面的更多详细信息,请参考上一届比赛解决方案。
我对ASR有浓厚的兴趣,在认识到它与比赛的关联后,我研究并试验了各种算法。虽然我在众多ASR算法中未找到明显优于广泛使用的普通CTC的方法,但通过大量实验学到了很多,在此主要分享这些见解。
在研究比赛用的ASR时,我从论文中发现当前神经网络ASR算法主要包括CTC、基于Attention和Transducer三种。我实现了全部三种(尽管还有更多样化的算法)。总之,从基线性能角度来看,这三种算法表现相当,各有利弊。以下是我实现每种算法的见解:
预测步骤 = O(L)(L = 编码器输出长度)。由于大多数预测步骤以贪心方式进行,效率不高。我没有进一步考虑,因为优化更困难且性能略低于CTC或Attention。但如果编码器是因果的,它具有实时流模式识别的优势(这与本次比赛无关)。
在Kaggle内核上测试数据集上的粗略单模型推理时间如下:
CTC贪心(~40分钟) < Attention贪心=CTC束搜索(~1小时20分钟) <= CTCAttention联合贪心(~1小时30分钟)
由于CTC和Attention表现出相似的性能,我尝试寻找利用两种技术的方法。我主要参考了以下两篇论文:
基于多任务学习的联合CTC-Attention端到端语音识别,Kim等,2017。
https://arxiv.org/pdf/1609.06773.pdf
端到端语音识别的联合CTC/Attention解码,Hori等,2017。
https://aclanthology.org/P17-1048.pdf
联合CTC-Attention训练,正如其名称所示,是在一个编码器上为多任务学习添加CTC解码器(单个GRU层)和Attention解码器(单个Transformer解码器层)。损失权重设置为CTC=0.25和Attention=0.75。但联合训练本身并未带来明显的性能提升。
通过使用CTC前缀分数,可以计算任意输出假设"h"的概率,而不依赖于CTC输出的输出时间步。换句话说,实现CTC前缀分数计算允许不仅在CTC模型之间,而且在CTC和Attention模型之间集成输出。CTC-Attention联合解码在CTC权重=0.3时显示性能提升了+0.007~8,对推理时间影响不大。对我而言,准确、高效地实现它并确保与tflite兼容尤其具有挑战性。
与上一届比赛解决方案类似,但更简单。使用并标准化所有地标和xyz坐标。翻转左撇子 signer(而非增强)。使用MAX_LEN=768。任何手工特征都不显著,可能是由于帧之间运动缺乏复杂关系。
编码器与上一届比赛相同(堆叠Conv1DBlock + TransformerBlock),但尺寸(Conv1DBlock中扩展比例2→4)和深度(8层→17层)增加。单模型约有650万参数。我应用了padding='same'(而非'causal')和output stride=2(需要更多处理掩码的逻辑)。在我的情况下,混合Transformer块不如上一届比赛有效。也许全局特征在这场比赛中不那么关键。此外,我在Conv1DBlock输入处添加了一个BN层以提高训练稳定性(特别是使用awp + 更多轮次时)。
CTC解码器使用单个GRU层后接一个FC层。Attention解码器使用单层Transformer解码器。在解码器输入上引入增强并添加最多4个解码器层可提高attention解码器的性能(最多+0.004)。然而,考虑到参数数量和推理速度,我认为这效率不高,因此使用了单层解码器。
这次我忽略的一点是:在较短轮次中显示无性能提升甚至性能下降的增强,在较长轮次中实际上可能有助于提升性能。我在上一届比赛中也经历过类似现象,但这场比赛似乎更加明显。仅根据60轮实验的结果选择增强,我认为当在最后一周测试400轮训练时,我错过了许多潜在有益的增强。
轮次 = 400
批大小 = 16 * num_replicas = 128
学习率 = 5e-4 * num_replicas = 4e-3
AWP = 0.2 从0.1 * 轮次开始
调度 = 带预热比例0.1的余弦衰减
优化器 = AdamW(略优于RAdam with Lookahead)
损失 = CTC(权重=0.25) + 带标签平滑=0.1~0.25的CCE(权重=0.75)
使用Colab TPUv2-8训练大约需要14小时(由于Colab TPU运行时间最近减少到3~4小时,需要连续进行4次会话才能完成训练)。
更长的轮次总是能获得更好的CV(按id的5折分割)和LB,但没有时间尝试超过400轮。
| 公开LB | 私有LB | |
|---|---|---|
| 上一届单模型 + CTC (或 Attention) | 0.76 | 0.74 |
| + 更深更宽模型,添加姿态 | 0.79 | 0.78 |
| + 3个种子集成(Attention) | 0.80 | 0.79 |
| + CTC attention联合解码 | 0.81 | 0.80 |
| + 使用所有地标,更长轮次 | 0.82 | 0.81 |
查看其他Kaggler的解决方案,不仅是顶级解决方案,还有公开的笔记本总是令人鼓舞。再次感谢始终分享见解和想法的Kaggler们。热烈祝贺@christofhenkel 和 @darraghdog 赢得这场竞争激烈的比赛!