返回列表

14th place solution: publicly shared Transformer architecture was so strong!

546. Google - Isolated Sign Language Recognition | asl-signs

开始: 2023-02-23 结束: 2023-05-01 音视频处理 数据算法赛
第14名解决方案:公开共享的Transformer架构如此强大!

第14名解决方案:公开共享的Transformer架构如此强大!

作者:Bilzard (Kaggle Grandmaster)
竞赛排名:第14名
发布时间:2023年5月2日

总结

感谢Kaggle主办方组织这次竞赛。虽然处理TensorFlow的晦涩错误以及失败的TFLite转换尝试非常艰难,但这些底层经验对我而言十分宝贵。以下是我的竞赛解决方案总结。

解决方案流程

我在本次竞赛中尝试了超过377种不同的模型训练模式,但最终最佳架构仅是在Mark Wijkhuizen的优秀公开笔记本基础上做了少量修改。

混合PostLN & PreLN架构

我测试了a) PostLN, b) PreLN, c) 混合架构三种方案,发现混合架构效果最佳。该架构最初(可能是无意的)在Mark Wijkhuizen的公开笔记本(早期版本)中实现。

其他改进

  • 在预处理阶段保留无手部帧(而非丢弃)
  • 增加关键点编码器的层数。层数越多准确率越高,4倍层数设置是准确率与推理时间的最佳平衡点
  • 为关键点编码器各部分独立设置隐藏单元数(嘴唇=192, 左手=256, 右手=256, 姿态=128),在不损失准确率的前提下减少推理时间
  • 训练时附加ArcFace层

训练设置

  • 损失函数: 0.5 * ArcFace + 0.5 * 交叉熵(该设置来自Med Ali Bouchhioua)。ArcFace与交叉熵损失结合使用能更快收敛,且准确率更高
  • 测试了50、80、100、120个epoch,100个epoch在LB上表现最佳
  • 标签平滑(0.20-0.25)可避免过拟合,但ArcFace效果更好。同时使用标签平滑和ArcFace并未提升CV/LB

数据增强

增强策略基本与@hengck23分享的方案一致:

  • 手部朝向交换(p=0.5)
  • 全局2D仿射变换(p=0.5, 平移=(-0.1, 0.1), 旋转=(-30, 30), 缩放=(0.9, 1.1), 剪切=(-1.5, 1.5))
  • 随机帧掩码(p=0.5, 掩码比例=0.75)

帧掩码模拟关键点检测失败的情况,同时在图像任务中起到cutout增强的作用。

TFLite转换

当对Mark的原始实现应用FP16量化时,Transformer块会输出NaN值。因此我基于@henck23的实现重写了transformer块。FP16量化使模型大小减少约一半,且未损失准确率。

测试时增强(TTA)

  • 对4个集成种子模型中的2个应用手部朝向交换增强

输出TFLite模型

  • 模型大小=26MB
  • 评分时间=56-59分钟

未生效的实验

  • 距离/速度特征未提升准确率
  • 使用合成手部姿态数据集训练z轴预测模型。将该模型的预测结果用于a) 3D仿射变换增强和b) 从关键点编码器输出预测z轴的子任务,但两种尝试均未提升准确率
同比赛其他方案