546. Google - Isolated Sign Language Recognition | asl-signs
以下是第8名解决方案的简要概述。
3个Transformer模型,每层2层(384隐藏单元,512隐藏单元FFN),带有一个FFN编码器(512->384),从头开始训练。学习率8e-4,使用余弦调度,训练约300个epoch,dropout 0.1,batch size 1024,label smoothing 0.1。使用手部、嘴唇和姿态(仅腰部以上)。在一个Transformer模型中,使用了全部姿态和部分嘴唇数据以增加多样性。
数据增强
预处理
[1, 2, 3, 4, 6, 8, 12, 16]。重要的是使用前向填充NaN值,而不是用0填充。Tflite
训练全部在PyTorch中进行。转换为TFLite时,特征预处理用TensorFlow重写,基础模型通过ONNX转换为TF(从第2名解决方案来看,这是一个错误,我应该重写Transformer编码器)。这是一个学习TensorFlow的绝佳机会。我喜欢它。
一个有趣的事情……在转换为ONNX之前,对PyTorch模型执行model = model.half().float()操作,最终在TFLite推理中获得了很好的加速。我尝试量化PyTorch模型,但并没有进一步提升速度。
在最后一周,我发现在预处理中,对整个序列按通道进行归一化带来了很好的提升。具体来说,我尝试对每个身体部位获取通道方向的范围(最大值-最小值),然后计算所有帧的平均范围,并用此来归一化时间差值和原始坐标——而不是独立归一化每一帧。每次我提交这个版本,大约25分钟后都会得到一个非常低的分数。我多次用不同方式重写,在Kaggle kernels中配合TFLite工作正常,但提交后就不行。最后这非常令人沮丧。然而,我认为这个提升也不足以让我进入获奖范围,而这才是目标🤑
失败的尝试