返回列表

4th place solution

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

开始: 2023-02-23 结束: 2023-05-01 音视频处理 数据算法赛
第4名解决方案 - ASL手势识别竞赛
作者:ohkawa3(Kaggle Grandmaster)
排名:第4名
发布时间:2023-05-03

我要感谢组织者和所有参赛者。
我的解决方案的整体概况如下图所示。

解决方案概览

预处理

  • 使用XY坐标
  • 将眉毛之间的坐标归一化到(0,0)
  • 比较左右手检测到的帧数,仅当右手检测到的帧数少于左手时进行翻转(x=-x)
  • 使用右手21个特征点的XY坐标(翻转左手)和嘴唇40个特征点,总共122维
  • 删除未检测到手部特征点的帧。因此,手部和嘴唇的帧数将不同

建模

  • 我构建了两种类型的一维卷积神经网络
  • 第一种是分类固定长度序列的模型(1DCNN-FixLen)
  • 第二种是分类可变长度序列的模型(1DCNN-VariableLen)
  • 两个模型都有手部主干网络、嘴唇主干网络和分类头部
  • 手部和嘴唇主干网络相似,只是卷积维度不同:手部主干使用128维,嘴唇主干使用64维

1DCNN-FixLen

  • 将序列插值到96帧。这一过程同时应用于手部和嘴唇特征点

主干网络

  • 应用11次卷积和3次最大池化,将序列长度减少到12(=96/(2**3))
  • 应用卷积将维度增加到512,然后应用全局最大池化
    • 将全局最大池化改为全局平均池化导致性能显著下降。这可能是因为序列中的重要特征只包含在少数几帧中。我们认为使用全局平均池化时,这些特征会被平均掉而消失
    • 我尝试了其他门控机制如Gated Linear Unit,但全局最大池化效果最好

头部

  • 将手部特征(512维)和嘴唇特征(512维)相加
  • 应用6个全连接层(浅层版本,stochastic_depth=0.1)或18个全连接层(深层版本,stochastic_depth=0.5)
    • 深层版本会捆绑全连接层的参数以防止模型膨胀
  • 分类为250个类别

1DCNN-VariableLen

主干网络

  • 总共应用5次卷积(kernel_size=3)和6次卷积(kernel_size=1)。与上述不同,这里不应用池化
    • 因此,感受野大小为11帧。由于进一步减少帧数会使情况恶化,增加帧数也会使情况恶化,似乎有意义的序列即使在长序列中也约为11帧
  • 通过卷积将维度增加到512后应用全局最大池化
    • 训练期间,输出会通过序列长度进行掩码处理,然后应用全局最大池化。这是因为应用了0填充以按批次中的最大长度进行归一化

头部

  • 与1DCNN-FixLen相同

训练

  • 3折参与者交叉验证
  • 300个epoch,15个epoch后应用SWA
  • AdamW优化器
  • 使用ArcMarginProduct,但由于margin m=0,仅应用特征和权重的归一化
  • 随机深度(Stochastic Depth),0.1或0.5
  • 标签平滑损失(Label Smoothing Loss),epsilon=0.5

数据增强

  • 随机丢弃帧(p=0.3)
  • 增强手部位置、大小和角度
  • 输入到1DCNN-FixLen的序列长度在64到128之间

CleanLab

  • 使用CleanLab移除约5000个被认为是噪声的场景
    • 使用21个参与者折叠计算后验概率,并使用filter_by="both"
  • 在清理后的数据集上训练的模型在独立模型中提升了LB,但在集成时提升不大
    • 是因为数据太干净,模型的多样性减少了吗?老实说我不知道
  • 此外,CV与LB之间出现了差距,所以我尝试不要过于自信
    • 在最终提交中,CleanLab仅应用于6个集成模型中的2个

额外实验

我做了一些实验,包括一些未包含在最终提交中的实验。从该评估中可以得出以下两点:

  • CleanLab有效(+0.003)(比较A和B,D和E)
  • 集成FixedLen和VariableLen效果显著(+0.01)(A0+D)
  • 仅靠集成fixedlen无法获奖
模型 长度 头部大小 cleanlab 种子 Private Public
A0 fixed deep no 0 0.8661 0.7843
A1 fixed deep no 1 0.8682 0.7842
B0 fixed deep yes 5 0.8721 0.7848
B1 fixed deep yes 6 0.8702 0.7862
C0 fixed shallow no 5 0.8651 0.7794
C1 fixed shallow no 6 0.8665 0.7825
D variable deep no 25 0.8653 0.7812
E variable deep yes 35 0.8688 0.7840
F variable shallow no 150 0.8647 0.7794
A0+A1 fixed - no - 0.8722 0.7905
B0+B1 fixed - yes - 0.8761 0.7935
A0+D - - no - 0.8766 0.7945
fixedlen only (A0+A1+B0+B1+C0+C1) fixed - - - 0.8774 0.7962
best sub(A0+B0+B1+C0+E+F) - - - - 0.8824 0.7999
同比赛其他方案