第17名解决方案:Conformer + CTCLoss + 500轮训练
作者:Yu Wu | 发布日期:2023-08-25 | 竞赛排名:第17名 | 赞同数:20
摘要
固定长度输入(220帧),对较短输入进行填充,对较长输入进行缩放。
2层MLP关键点编码器 + 6层384维Conformer + 1层GRU,500轮训练(在Kaggle TPU上约需8小时)。
后处理(CV和LB均提升0.003):
if len(pred) <= 4:
pred = pred + " -aero"
我的 notebook 可用,该方案主要基于上一届第一名解决方案以及一些公开的竞赛 notebook,在此非常感谢他们的贡献。
数据预处理与增强
基本与上一届第一名解决方案相同。但我发现使用3D位置(即包含深度信息)和姿态关键点能获得更好的CV和LB分数。
我的输入包括:左右手、眼睛、鼻子、嘴唇以及姿态关键点。
模型
我认为这个任务与自动语音识别(ASR)非常相似,因此使用了Conformer模型。
后处理
- 我检查了验证集中预测最差的样本,发现较短的预测效果更差。大多数非常短的预测(长度小于5)基本上等于没有预测,例如单个字符"a"或空格" "。
- 我发现只有极少数标签的长度小于等于5。
- 因此,向过短的预测添加一些补充短语可能是个好主意。
- 我选取了训练集中最常见的字符:"a"、"e"、"r"、"o"、"-"、" "。
- 我基于验证集测试了这些字符的所有组合,最终" -aero"效果最好。
未生效的方法
- 自回归Transformer模型
我大部分时间都在研究生成式Transformer模型,但它们会严重过拟合短语,我找不到解决方法。
问题是,对于输入X[1...n]及其对应短语"123456789",我们可能期望模型对前半部分输入X[1...n/2]预测出"12345"。
对于CTC模型来说确实如此。但我的自回归模型总是产生一半正确预测"12345"加上一半随机错误预测,例如一些随机的5位数字。
- 可变长度输入的掩码机制
我尝试使用与上一届第一名解决方案相同的掩码技术,以支持更长的输入帧。
然而,使用掩码的模型CV和LB分数总是更低(-0.02)。我认为这是因为掩码限制了输出长度,但较短的输入仍然需要更大的输出空间。虽然很遗憾我没有时间验证这一点,但我相信这可能会带来更好的解决方案。
- 固定长度输入的空嵌入
我尝试对填充的空帧使用可学习的常量权重,并对原始帧中的关键点使用2层MLP进行编码。这看起来更有意义,但CV分数比直接编码所有帧更差。
我的Notebook
相关代码 notebook 已发布
参考实现
基于上一届第一名解决方案及其他公开 notebook