570. Google - American Sign Language Fingerspelling Recognition | asl-fingerspelling
我此前已在此处概述了解决方案的要点:链接。本文将提供遵循官方要求的完整总结,同时我已将工作整理至GitHub:链接。所有代码均以Colab或Kaggle笔记本形式保存,可直接运行,数据存放在公开Kaggle数据集中。如有遗漏请告知,我将及时修正。
本文总结本人在Google - 美式手语字母拼写识别竞赛中获得第12名的解决方案。数据页面详见:链接。
模型采用CTC编码器结构,结合Transformer与卷积层,基础架构源自上一届竞赛冠军方案的CTC改进版(由Rohith实现)。本人唯一改进是在首个Transformer层前添加了位置编码。
特征工程:沿用上届方案,使用嘴唇、鼻子和手部关键点(不含眼部),采用X/Y坐标(不含Z轴),并添加步长为1和2的差分特征。姿态关键点略有扩展。
数据增强:采用上届方案的增强策略,但优化了窗口操作。原方案使用随机窗口导致边缘修改概率低,我改为循环滚动窗口——超出帧长的部分会循环至序列开头继续修改。
数据过滤:采用两步过滤:
1. 初步过滤:保留(非NaN手部关键点帧数)> 2×(短语长度)的样本,训练基础模型
2. 进阶过滤:用基础模型计算所有样本的归一化Levenshtein距离,保留分数>0.2的样本。该策略有效扩充了训练数据。
训练成果:
- 949万参数模型(300轮训练):公开榜得分0.779
- 1547万参数模型(500轮训练):公开榜得分0.790
- 最终方案(增强优化+进阶过滤+1500轮训练):公开榜0.794,私有榜0.779(第12名成绩)
验证策略:初始使用首3000样本作为验证集。后期担心对特定手语者过拟合,测试了按手语者ID划分验证集(5人验证,其余训练)。1000轮后验证分数仍稳定,最终选择保留原始验证策略以利用全部手语者数据。
训练环境:主要使用Colab TPU(成本低且与Kaggle数据集集成便捷,无存储和流量费用)。
因模型需在时限内完成推理,训练后将最大帧数从340调整为320。推测更多训练轮次导致参数量化复杂度上升,影响推理速度。为符合40MB限制,模型采用16位量化(TPU训练使用bfloat16,量化后分数影响<0.001)。
未生效策略:Mix-up增强和AWP对抗训练未能成功应用,主因初期实施存在疏漏,待理清细节时已无充足训练时间。
完整可复现方案已发布于GitHub。感谢Google及所有分享代码、参与讨论的参赛者,使本次竞赛兼具挑战性与趣味性。